一文带你走进网络编程

news2024/12/25 9:11:46

网络编程

什么是网络编程:

就是用来实现网络互通的不同计算机运行程序之间进行数据的交换的编程

网络模型

OSI(模型):七层协议

应用层: 如: HTTP协议 主要解决如何包装数据,用于通信的应用程序和用于消息传输的底层网络提供接口,提供常见的网络应用服务
表示层: Linux给window发包,两个系统语法不一致,就像安装包一样,exe是不能在linux下用的,shell在window下也是不能直接运行的。于是需要表示层,帮我们解决不同系统之间的通信语法问题
会话层: 要建立一个自动收发包,自动寻址的功能。会话层的作用就是建立和管理应用程序之间的通信,自动调用TCP去打包
传输层: 如: TCP协议 保证传输大量文件时的准确性。于是,对发出去的数据进行封装。就像发快递一样,一个个地发。
网络层: 如: IP协议 即路由器,交换机那些具有寻址功能的设备所实现的功能。这一层定义的是IP地址,通过IP地址寻址。所以产生了IP协议
数据链路层:通过无线电波,通过其它介质来传输。然后我还要保证传输过去的比特流是正确的,要有纠错功能。
物理层: 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等它的主要作用是传输比特流,

TCP五层模型

img

TCP/IP协议中的应用层处理七层模型中的第五层、第六层和第七层的功能。TCP/IP协议中的传输层并不能总是保证在传输层可靠地传输数据包,而七层模型可以做到。TCP/IP协议还提供一项名为UDP(用户数据报协议)的选择。UDP不能保证可靠的数据包传输

HTTP(超文本传输协议)

是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式

HTTP请求

由三部分组成,分别是:请求行、消息报头、请求正文。

请求行

Method Request-URI HTTP-Version(三部分空格隔开)

其中:

Method表示请求方法
      GET       请求获取Request-URI所标识的资源
      POST       在Request-URI所标识的资源后附加新的数据(GET请求往往把自制
                  数据放在quary_string中,POST请求往往把自定制数据放在body中)
      HEAD      请求获取由Request-URI所标识的资源的响应消息报头
      PUT      请求服务器存储一个资源,并用Request-URI作为其标识
      DELETE     请求服务器删除Request-URI所标识的资源
      TRACE      请求服务器回送收到的请求信息,主要用于测试或诊断
      CONNECT     保留将来使用
      OPTIONS     请求查询服务器的性能,或者查询与资源相关的选项和需求
​
Request-URI是一个统一资源标识符;
      请求的地址 
HTTP-Version表示请求的HTTP协议版本。
现在大多都是1.1的
​

消息报头(header)

若干个键值对,每个键值对占一行,每个键和值之间使用:分割

请求正文(body)

 一般GET请求没有body,POST请求才有

HTTP响应格式

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文。

状态行

HTTP-Version表示服务器HTTP协议的版本;

Status-Code表示服务器发回的响应状态代码;

Reason-Phrase表示状态代码的文本描述。

状态码: 1xx:指示信息–表示请求已接收,继续处理; 2xx:成功–表示请求已被成功接收、理解、接受; 3xx:重定向–要完成请求必须进行更进一步的操作; 4xx:客户端错误–请求有语法错误或请求无法实现; 5xx:服务器端错误–服务器未能实现合法的请求。

消息报头(header)

任然是一组键值对,每个键值对占一行每个键和值之间用:分割

Content-Type:描述了body的数据格式类型; Content-Length:描述了body的数据长度(字节Byte); Host:描述了访问的主机名(域名/ip); Referer:当前页面是从哪个页面跳转过来的; Cookie:字符串,浏览器的本地存储的能力之一,中经常会包含一种叫做“身份标识”的信息(session id); Session:服务器端维护的一个数据结构,记录了用户的身份信息,session id就是session对象的唯一身份标识,session id 存在浏览器中,浏览器后续在访问服务器的时候,就会自动带着session id,从而让服务器知道当前请求是哪个用户发来的。

User-Agent:会告诉网站服务器,访问者是通过什么工具来请求的,手机还是电脑等。

响应正文(body)

响应中的正文格式也有很多种,比如可以是一个html,也可以是一个css,也可以是一个JavaScript,还可以是一个图片数据,还可以是一个json数据

常用的命令(重点)

ping ,ipconfig ,telnet

本机地址(重点)

127.0.0.1 代表自己的电脑主机

localhost 代表本机

端口

用于标识进程的逻辑地址,不同的进程端口不同。

netstat -ano

比如说QQ,微信,是通过ip:端口发送数据到对应好友的电脑上。

QQ 端口 10.1.1.2:1010

微信 端口 10.1.1.2:10080

TCP和UDP(重点)

常见的两种协议:

UDP:将数据源和目的地封装到数据包中,不需要建立连接

每个数据包的大小有限制

因为不用建立连接,所以安全性差,但是速度快

应用场景:

游戏

TCP: 建立连接形成传输数据的通道,然后再传输数据,通过三次握手。安全性高,效率低

Socket

Socket是网络编程提供的一种机制,通信的两端都要有socket,网络通信其实就是socket间的通信,数据在socket间的io流上通信

TCP通信

服务端

客户端

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/53641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VM系列振弦采集模块全频段扫频

VM系列振弦采集模块全频段扫频 根据起始频率与终止频率范围,频率由低向高向传感器发送渐进的扫频激励信号,直到传感器产生共振并返回共振电流信号。在输出激励信号的过程中,激励信号的频率变化由频率步进和信号周期数量决定。 此激励方法较为…

Day2--使用ESP32双核、U8G2 OLED任务、任务以绝对频率运行、任务内存优化

使用ESP32双核 ESP32-C系列为单核,ESP32的core0主要运行WI-FI和蓝牙 API: xPortGetCoreID() 获取当前任务运行的核心 xTaskCreate() 有系统选择运行核心,优先选择0 xTaskCreatePinnedToCore() 指派任何给指定核心 Arduino的setup和loop默认运行在core1 …

初识Thread类与创建多线程的方法

目录 1.创建一个线程 2.start()方法与run()方法 3.查看线程 4.创建线程的各种方法 4.1实现Runnable接口 4.2使用匿名内部类 4.3使用匿名内部类,实现Runnable 4.4使用Lambda表达式 1.创建一个线程 Java操作线程最核心的类就是Thread类 创建线程有很多方法,下面我们写一…

[附源码]计算机毕业设计springboot人体健康管理app

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

SpringBoot结合XXL-JOB实现定时任务

《从零打造项目》系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建SpringBoot集成Mybatis项目实操SpringBoot集成MybatisPlus项目实操SpringBoot集成Spring Data JPA项目实操 数据库变更管理 数据库变更管理:Liquibase…

阿里自爆秋招面试笔记,福音来了

前言 最近又掀起了一股面试招聘风潮,我们一边要巩固基础知识、备战试题的同时,另外与面试官的对达沟通也直接影响你的成功与否!那我们应该如何做好准备呢? ​先说面试过程,今天阿鑫给大家整理了这三个小经验&#xf…

笔试强训Day2

选择题 1. 思路:e是按指数类型输出,f是按照浮点数类型输出(输出只有f不用lf) 输出默认是右对齐,-则是左对齐,四位精度就是小数点后保留几位用.4,输出字符数用整数30在小数点前表示即可。 如果…

MySQL数据库复习——索引

目录 一、什么是索引?索引的作用 二、索引的简单使用 三、索引背后的数据结构 1、B 树 2、B 树 一、什么是索引?索引的作用 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指…

Nacos 配置中心

1. 什么是配置中心 1.1 什么是配置 应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。 配置主要有以下几个特点: 配置是独立于程序的只读变…

java基础讲义03

java基础讲义一 流程控制1.1流程控制语句介绍1.2顺序结构二 选择控制2.1 选择结构介绍2.2 选择语句if2.2.1 格式12.2.2 if格式22.2.3 if格式32.3 选择语句switch2.3.1 switch语句介绍2.3.2 switch注意事项2.3.3 switch面试题2.3.4 if语句与switch语句区别三 循环语句3.1 循环语…

Yolov5 计算访存量MAC与计算量FLOPS

说明:因为yolov5函数中已经计算了 FLOPS,因此如果想要计算访存量那么只需按照flops的位置,添加访存量的计算即可 一、先记住计算量和访存量的公式: 二、找到计算FLOPS的位置,并添加访存量 yolov5中计算flops的位置在torch_utile…

微服务外交官-Feign

引言 书接上篇 负载均衡组件Ribbon核心-LoadBalanced-下 我们讲完了Ribbon负载均衡原理之后,接下讲一个SpringCloud Alibaba新的组件:Fegin 前面章节我们使用Ribbon方式实现负载均衡版的远程调用, //方案4:使用Ribbon方式--带负…

不知道10年老电脑如何重装系统?其实很简单

肯定很多朋友家里都有一两台吃灰的10年老电脑了,当我们有空可以把它拿出来耍耍的时候,却发现电脑无法开机了,想拿去修又觉得不太值得。其实我们可以先试着给电脑重装系统,这样也能先排查系统是否有问题。如果你不知道这台10年老电…

【Linux】Linux编译器-gcc/g++使用

大家好我是沐曦希💕 文章目录1.背景知识1.1 预处理1.2 编译(生成汇编)1.3 汇编(生成机器可识别代码)1.4 链接接(生成可执行文件或库文件)1.5 习题习题一习题二2.函数库2.1 动态库2.2 静态库3.g的基本使用4.…

数据结构之二叉树

数据结构之二叉树什么是二叉树二叉树的特殊类型二叉树的遍历方式二叉树的叶子结点求法二叉树的高度求法什么是二叉树 二叉树(Binary tree)是树形结构的一个重要数据类型,想要成为二叉树必须满足两个条件。1、本身是有序树。2、树中包含的各个…

【小程序】导航栏和内容页面联动效果实现

💭💭 ✨: 微信小程序导航栏和页面联动   💟:东非不开森的主页   💜: 因为很多东西来不及去做去看可是时间很快总是赶不上,所以要去成长呀💜💜   🌸: 如有错…

React—— HelloWorld

React 学习笔记Hello WorldJSX (JavaScript XML) 语法规则JavaScript 语法函数组件、类组件 & 属性 props组合组件生命周期函数 & 状态 state事件处理refs受控组件、非受控组件 & 高阶函数、函数的柯里化npm参考Hello World <!DOCTYPE html> <html lang&…

Request请求转发与Respones请求重定向有什么区别?

目录&#xff1a; 1.Request请求转发 2.Respones请求重定向 3.关于转发和重定向的路径问题 1.Request请求转发 请求转发(forward)是一种在服务器内部的资源跳转方式。 (1)浏览器发送请求给服务器&#xff0c;服务器中对应的资源A接收到请求 (2)资源A处理完请求后将请求发…

在html中使用js实现图片的无缝滚动(四种状态)

文章目录js原理实施任务1.从左往右无缝滚动代码示例运行效果2.从右往左无缝滚动代码示例运行效果3.从上往下无缝滚动代码示例运行效果4.从下往上无缝滚动代码示例运行效果js原理 获取整个ul和ul下面的所有li&#xff0c; 把ul里面的li内容添加一份&#xff0c;因为需要完成图片…

【加油站会员管理小程序】01需求分析

随着这两年微搭产品的迭代,目前组件基本够用,像常用的支付这种功能也是有的,因此我们就可以结合现有功能来完成一个实际使用的小程序的开发。 我们本次的实战课,是以加油站的业务场景为出发点,涵盖会员的开通、充值、消费、积分兑换等常用场景。结合实战案例,我们完整的…