目录
一、OSI参考模型
1979由ISO国际公有化组织提出,作为网络的行规,是网络统一的标准和体系
核心思想:分层
属于同一层次的协议设备相同或者相似的功能(不同的层次的协议功能有明显的区别)
(1)更有利于标准化
(2)降低层次之间的关联性(每一层都在下层的基础上提供增值服务)
(3)利用网络的发展
具体分层:
应用层:各种应用层序APP的集合,提供人机交互的窗口
表示层:统一编码格式,将人类传递的参数命令转换为二进制
会话层:可以建立维护和断开一次会话通讯(会话:建立主机和目标服务器(目标设备)之间的一条逻辑通道)
传输层:提供端到端的传输(用来区分应用和服务,提供应用到应用之间的数据传输)
网络层:利用ip地址进行逻辑寻址(路由)
数据链路层:利用MAC地址进行物理寻址(包含MAC介质访问控制层,LLc逻辑链路控制层)
物理层:介质
端口号:
16位二进制,范围0-65535 ,0作为保留,实际能够使用的端口号范围1-65535
互联网规定1-1023作为知名端口号(著名端口号)
HTTP(80)
HTTPS(443)
FTP文件传输协议(20/21)
Telent远程登陆协议(23)
SSH安全的远程登陆协议(22)
DHCP地址解析协议(67 /68)
DNS域名解析协议,目标IP地址(53)
例:访问网站,利用HTTP传输网页数据
TCP/IP参考模型(前身:TCP/IP协议簇)
osi由ISO组织维护
tcp/ip由IANA维护
产生标准模型与对等模型的原因:考虑方向不同,一方由功能考虑,一方由联系考虑
PDU(协议数据单元)
数据单位,给协议一个名称。物理层L1PDU、数据链路层L2PDU,以此类推
但为区分简单每一层都有特别的称呼:
(1)、应用层---数据报文
(2)、传输层---数据段
(3)、网络层---数据包
(4)、数据链路层---数据帧
(5)、物理层---比特流(数字信号)
数据转发--->封装与解封装
封装
封装:每一层都把上层产生的协议数据当作自身的数据部分,加上自 身的功能数据组成一个新的数据单元---这个过程被称为封装(封装--应用层到数据链路层截至,物理层仅传输不需要封装功能数据)
解封装
解封装:还原原始数据的过程,每一层接收到数据之后,会检查目标地址是否是自身,如果是自身那 么会解开当前层次的协议报头,之后继续向上层解封装应
协议地图
用户层协议
HTTP---80
HTTPS---443
FTP--文件传输协议---20/21
Telent---远程登陆协议--23
SSH--安全的远程登陆协议---22
DHCP--地址解析协议:67 /68
DNS---域名解析协议--目标IP地址--53
传输层协议
必须支持端到端的传输
类别:TCP(传输控制协议)与UDP(用户数据协议)
TCP与UDP区别:
(1)、TCP是面向连接的协议,UDP是无连接的协议
(2)、TCP的传输是可靠的,而UDP的传输是不可靠(尽力而为型转发)。(依靠可靠性机制实现:排序、确认、流控、重传)
(3)、.TCP可以进行流控,UDP不能
(4)、3.TCP可以进行流控,UDP不能
(5)、TCP传输效率比较低,占用网络资源较大,UDP传输效率高,资源占 用小
TCP应用场景:传输效率低,但是对传输可靠性要求很高的场景--例如 传输网页数据,邮件,文件等
UDP应用场景:传输效率高,但是对传输可靠性要求一般的场景--例如 所有的即时通讯
TCP的报文头部
1字节=8位二进制
源端口号:16位,标识发送数据的进程。
目的端口号:16位,标识接收数据的进程。
序号:32位,用于标识从TCP发送端向接收端发送的字节流,它表示这个报文段中的第一个数据字节。
确认序号:32位,如果ACK标志位被设置,则表示期望收到的下一个报文段的起始编号。
首部长度:4位,指示TCP头部的长度,表示有多少个32位字组成。
保留:6位,为将来的使用保留,目前应为零。
标志位:6位,包括URG(紧急)、ACK(确认)、PSH(推送)、RST(复位)、SYN(同步)和FIN(终止)等控制位,用于控制TCP的状态。
窗口大小:16位,用于流量控制,表示还能接收多少字节的数据。
校验和:16位,覆盖整个TCP报文段,用于检测数据在传输过程中的任何错误。
紧急指针:16位,仅在URG标志位被设置时有效,指出紧急数据的结束位置。
选项:长度可变,最多40字节,用于支持诸如最大报文段大小(MSS)、窗口扩大因子、时间戳等高级功能。
填充:确保TCP头部长度是32位字的整数倍。
重要性:
TCP头部的设计直接影响到TCP/IP网络通信的性能和可靠性。它使得TCP能够提供一种可靠的、面向连接的、全双工的数据传输服务。通过精确控制序列号、确认回应、窗口大小等参数,TCP能够在各种网络条件下有效地传输数据,同时保证数据的顺序和完整性。
在网络编程和网络维护中,理解TCP头部的结构和功能是至关重要的。它不仅有助于诊断网络问题,还能够帮助开发者设计出更高效、更可靠的网络应用程序。
UDP头部报文
源端口:16位,用于标识发送数据的进程。如果不需要对方回发消息,可以设置为0。
目的端口:16位,用于标识接收数据的进程。
长度:16位,表示UDP报文的总长度,包括头部和数据部分。由于头部长度固定为8字节,因此该字段的最小值为8。
校验和:16位,用于检测UDP数据报在传输过程中是否出错。如果出错,数据报将被丢弃。校验和的计算包括一个12字节的伪首部,该伪首部不实际传输,仅用于校验和计算。
源端口(Source Port):16位,用于标识发送数据的进程。如果不需要对方回发消息,可以设置为0。
目的端口(Destination Port):16位,用于标识接收数据的进程。
长度(Length):16位,表示UDP报文的总长度,包括头部和数据部分。由于头部长度固定为8字节,因此该字段的最小值为8。
校验和(Checksum):16位,用于检测UDP数据报在传输过程中是否出错。如果出错,数据报将被丢弃。校验和的计算包括一个12字节的伪首部,该伪首部不实际传输,仅用于校验和计算。
TCP三次握手
第一次握手 TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT 同步已发送状态
第二次握手 TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了 SYN-RCVD 同步收到状态
第三次握手 TCP客户端收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态 触发三次握手
为什么要进行三次握手以及每次握手证明什么?
第一次握手,客户端向服务器端发送报文,证明客户端的发送能力正常。第二次握手,服务器端接收到报文并向客户端发送报文,证明服务器端的接收能力、发送能力正常。第三次握手:客户端向服务器发送报文,证明客户端的接收能力正常
采用二次握手会出现什么情况?
客户端向服务器端发送的请求报文由于网络等原因滞留,未能发送到服务器端,此时连接请求报文失效,客户端会再次向服务器端发送请求报文,之后与服务器端建立连接,当连接释放后,由于网络通畅了,第一次客户端发送的请求报文又突然到达了服务器端,这条请求报文本该失效了,但此时服务器端误认为客户端又发送了一次连接请求,两次握手建立好连接,此时客户端忽略服务器端发来的确认,也不发送数据,造成不必要的错误和网络资源的浪费。如果采用三次握手的话,就算那条失效的报文发送到服务器端,服务器端确认并向客户端发送报文,但此时客户端不会发出确认,由于客户端没有确认,由于服务器端没有接收到确认,就会知道客户端没有请求连接。
四次挥手
第一次挥手 客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态
第二次挥手 服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态
第三次挥手 客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成
为什么要等待2MSL?
主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。
分段:MTU(最大传输单元)
流控:滑动窗口机制,引入win值(0-655535)
TCP使用滑动窗口机制,做到一次确实同时发送多段数据
快速重传机制
网络层协议
ip协议占绝大部分,也有其它协议,例:ICMP--PING
版本:ipv4或ipv6
首部长度:解封装时需要解多少数据
可选字段:用来填充
区分服务(QAS):将服务区分开
总长度:数据部分加上报文头部长度
生存时间-TTL:(数据包每经过一个节点转发,TTL会减1,当TTL为0,那 么该数据包失效--为了防环)
协议: 如果协议字段为6那么代表数据利用TCP传输 ,如果协议字段为17那么代表数据利用UDP传输
首部检验和:只校验头部数据是否有问题,有没有丢失、篡改
源地址与目的地址:传输数据
IP 分片是网络层的一种机制,用于将大于链路层最大传输单元(MTU)的IP数据报分割成更小的单元进行传输。这个过程对于确保大尺寸数据包能够在不同MTU限制的网络中传输至关重要。
分片过程:
标识字段用于标记属于同一个原始IP数据报的所有分片。
标志字段中的DF(Don't Fragment)位用于指示数据报是否可以被分片。如果DF位设置为1,则数据报不会被分片。
Don't fragment:set 1时表示为完整数据可直接处理,0时为分片数据需与其它数据一块处理
More fragment:set 1时后面还有更多的分片,0时代表没有后续分片
片偏移字段表示分片在原始数据报中的相对位置,单位是8字节。
分片和分段的数据量默认--不易太大或太小
MTU---最大传输单元--默认1500字节
规定来到二层的数据最大不能超过1500字节
分片数据理论最大=MTU(1500)-IP协议头部(20)-UDP协议头部(8)= 1472字节
MSS--最大段长度--规定来到网络层的数据最大数据量--在三次握手过程 中协议,在第一次握手协商(以两端字节最小为标准)
数据链路层(以太网协议)
以太网帧
前导码: MAC物理层使用7个字节同步码( 0和1交替( 55-55-55-55-55-55-55))实现数据的同步
帧起始界定符( SFD):使用1个字节的SFD(固定值为0xd5)来表示一帧的开始,后面紧跟着传输的就是以太网的帧头。
目的MAC地址: 即接收端物理MAC地址,占用6个字节。 MAC地址从应用上可分为单播地址、组播地址和广播地址。单播地址:第一个字节的最低位为0,比如00-00-00-11-11-11,一般用于标志唯一的设备;组播地址:第一个字节的最低位为1,比如01-00-00-11-11-11,一般用于标志同属一组的多个设备;广播地址:所有48bit全为1,即FF-FF-FF-FF-FF-FF,它用于标志同一网段中的所有设备。
源MAC地址:即发送端物理MAC地址,占用6个字节
长度/类型: 上图中的长度/类型具有两个意义,当这两个字节的值小于1536(十六进制 为0x0600)时,代表该以太网中数据段的长度;如果这两个字节的值大于1536,则表示该以太网中的数据属于哪个上层协议,例如0x0800代表IP协议( 网际协议) 、 0x0806代表ARP协议(地址解析协议)等。(为了解封装)
数据:以太网中的数据段长度最小46个字节, 最大1500个字节。最大值1500称为以太网的最大传输单元( MTU, Maximum Transmission Unit),之所以限制最大传输单元是因为在多个计算机的数据帧排队等待传输时,如果某个数据帧太大的话,那么其它数据帧等待的时间就会加长,导致体验变差,这就像一个十字路口的红绿灯,你可以让绿灯持续亮一小时,但是等红灯的人一定不愿意的。另外还要考虑网络I/O控制器缓存区资源以及网络最大的承载能力等因素, 因此最大传输单元是由各种综合因素决定的。为了避免增加额外的配置, 通常以太网的有效数据字段小于1500个字节。
帧检验序列( FCS) : 为了确保数据的正确传输, 在数据的尾部
加入了4个字节的循环冗余校验码( CRC校验) 来检测数据是否传输错误。 CRC数据校验从以太
网帧头开始即不包含前导码和帧起始界定符。 通用的CRC标准有CRC-8、 CRC-16、 CRC-32、 CRCCCIT,其中在网络通信系统中应用最广泛的是CRC-32标准。