目录
OSI/RM七层参考模型——开放式的系统互联参考模型
每一层都在上一层的基础上提供增值服务
-
应用层:为应用程序通过网络服务,它包含了各种用户使用的协议
-
表示层:用于处理在两个通信系统中交换信息的表示方式,主要包括数据格式变换、数据的加密与解密、数据压缩与恢复等功能
-
会话层:负责维护通信中两个节点之间的会话连接的建立、维护和断开,以及数据的交换
-
传输层:向用户提供端到端的数据传输服务(实现端对端的传输),实现为上层屏蔽低层的数据传输问题,并可以区分不同的进程和服务→依靠端口号实现(根据端口号识别应用)
端口号的实质是16位二进制,共2^16=65536个端口号
0号作为保留端口号,实际上能够被使用的有65535个端口号
1-1023:知名(著名)端口号
-
网络层:逻辑寻址(IP地址)
-
数据链路层:物理寻址(MAC地址)
MAC:介质访问控制层
LLC:逻辑链路控制层
-
物理层:利用传输介质为通信的网络节点之间建立、维护和释放物理连接,实现比特流的透明传输,进而为数据链路层提供数据传输服务
核心——分层
1.更利于标准化——每一层的功能及所提供的服务都有精确的细化说明
2.降低层次之间的关联性——每一层只执行对应的功能,某一层出现的问题、某一层协议的增加或减少不会影响到其他层
TCP/IP模型——TCP/IP协议簇
两种模型的区别
应用层
应用层协议
①HTTP协议:超文本传输协议,80端口
②HTTPS协议(==HTTP+SSL):超文本传输安全协议,443端口
③Telnet协议:远程终端协议,23端口
④DNS协议:域名解析协议,53端口
⑤FTP协议:文本传输协议,20/21端口
⑥DHCP协议:动态主机配置协议,67/68端口
封装与解封装
封装
-
封装原理:
封装:将数据变为比特流的过程中,参考模型的每一层需要添加上特定的协议报头
——从高层往低层依次封装,每一层都把上层的协议包当成数据部分,加上自己的协议头部,组成自己的协议包
-
协议数据单元(PDU)
(TCP/IP) (OSI-RM)
应用层——数据报文 应用层——L7PDU
传输层——数据段 表示层——L6PDU
网络层——数据包 会话层——L5PDU
数据链路层——数据帧 ······
物理层——比特流 物理层——L1PDU
-
封装过程:
应用层:原始数据 → 二进制数据
传输层:二进制数据 + TCP头部 → 数据段 (TCP头部的关键信息–端口号)
网络层:数据段 + IP头部 → 数据包 (IP头部的关键信息–IP地址)
数据链路层:数据包 + MAC头部 → 数据帧 (MAC头部的关键信息–MAC地址)
物理层:数据帧 → 比特流,在网线中传输
解封装
-
解封装原理:
解封装 :封装的逆过程,数据从比特流还原为数据的过程
——从底层往高层依次解封装,每解封装一层,会将该层的封装的那个协议报头去掉
-
解封装过程:
物理层:电信号 → 二进制数据,并将其送至数据链路层
数据链路层:查看MAC地址,地址是自己 → 拆掉MAC头部,继续传输;地址不是自己,就丢弃数据
网络层:查看IP地址,地址是自己 → 拆掉IP头部,继续传输;如果IP地址不是自己,则会路由表查找去往该网段的下一跳地址。如果存在转发路径,会为数据包添加一个新的二层帧头和帧尾部。
传输层:查看TCP头部(端口号),判断应该传到哪里,然后重组数据,传输到应用层
应用层:二进制 → 原始数据
传输层
TCP协议和UDP协议的区别
TCP协议和UDP协议的区别 | TCP | UDP |
---|---|---|
连接 | 面向连接 | 无连接 |
传输可靠性 | 可靠——可靠传输机制:排序、确认、重传、流控 | 不可靠 |
分段 | 可以分段 | 不能分段 |
流控 | 可以进行流控 | 不能进行流控 |
转发效率 | 较低 | 较高 |
适用场景 | 对于数据可靠性要求比较高,但是对于实时性要求相对较低的场景,如电子邮件 | 对于数据可靠性要求比较低,但是对于实时性要求相对较高的场景,如视频聊天 |
-
UDP是无连接的,在传输数据前不需要与对方建立连接
TCP是面向连接的,在通信之间双方必须建立TCP连接 -
UDP提供不可靠的服务,数据可能不按发送顺序到达接收方,也可能会重复或者丢失数据
TCP提供可靠的服务,TCP协议可以保证传输的数据按发送顺序到达,且不出差错、不丢失、不重复
TCP的报文
TCP报头最小是20字节→只有功能数据,无可选项(1字节=8位,即一层4字节,除去选项有五层,4*5=20字节)
源端口和目的端口:端口是传输层与应用层的服务接口(源IP,目的IP,源端口,目的端口,TCP→可以唯一标识一个TCP连接)
序号(seq):TCP是面向字节流的,TCP传送的报文可看成为连续的字节流。TCP报文段中每一个字节都有一个编号,该字段指明本报文段所发送的数据的第一个字节的序号
确认序号(ack):期望收到的下一个报文段首部的序号字段的值,确认具有累积效果。若确认号为M,则表明序号M-1为止的所有数据都已经正确收到
首部长度:TCP报头长度,大小不固定(不含数据部分的长度)
标志位:用于区分不同类型的TCP报文,相应标志位置位时有效
标志位 | 含义 |
---|---|
URG | 紧急标志位,表明此报文段中包含紧急数据 |
ACK | 确认标志位,表明确认号字段有效 |
PSH | 推送标志位,表明应尽快将此报文段交付给接收应用程序 |
RST | 重置标志位,表明TCP连接出现严重差错,需释放连接,然后再重新建立连接 |
SYN | 同步标志位,在连接建立时用来同步序号 |
FIN | 完成标志位,用来释放一个连接 |
窗口:该字段在传输过程中经常动态变化,表明现在允许对方发送的数据量,以字节为单位。TCP使用滑动窗口机制进行流量控制
校验和:校验数据包的完整性,检验和字段检查的范围包括伪首部、TCP首部和数据两部分,与UDP校验和计算方法相同,但是伪首部中的协议字段值是6
紧急指针:只有在URG=1时才有效,指明本报文段中紧急数据的字节数
选项:长度为0~40字节,注意必须填充为4字节的整数倍。最常用的选项字段是最大段长度MSS
TCP的三次握手
TCP三次握手的工作过程
(1)主机A的TCP向服务器B的TCP发出连接请求报文段,其首部中的同步比特标志位SYN应置为1,同时选择一个初始序号(随机)seq=x
(2)服务器B的TCP收到连接请求报文段后,则发回确认,标志位ACK应置为1,确认号应为ack=x+1。因为连接是双向的,所以服务器B也发出和A的连接请求,在报文段中同时应将SYN置为1,为自己选择一个初始序号seq=y
(3)主机A的TCP收到此报文段后,还要向服务器B给出确认,ACK应置为1,其确认号为ack=y+1;第一次握手发出的seq=x,由于ACK报文段不携带数据则不消耗序号,所以第三次握手发出的seq=x+1
TCP的四次挥手
TCP四次挥手的工作过程
(1)主机A的TCP通知对方要释放从主机A到服务器B这个方向的连接,将发往主机B的TCP报文段首部的终止比特标志位FIN置1,假定此时序号为seq=m
(2)服务器B的TCP收到释放连接的通知后,即发出确认,FIN需要消耗一个序号,所以其确认号为ack=m+1,这样从主机A到服务器B的连接就释放了,连接处于半开闭状态。此时如果服务器B还发送数据,主机A仍接收
(3)服务器B向主机A的数据发送结束后,TCP释放服务器B到主机A的连接。服务器B发出的连接释放报文段必须将终止比特标志位FIN置1,并假定其序号seq=n,因为标志位ACK不需要消耗序号,所以此时的确认号仍是ack=m+1
(4)主机A必须对此发出确认,因为FIN需要消耗一个序号,所以给出的确认号为ack=n+1。最终双方连接释放全部完成
TCP的四种可靠传输机制
(1)排序
TCP数据包分段
假设有一份较大的数据包,如果这份数据包在发送的过程中出现丢包现象,TCP会发生重传,重传的是这一大份数据包。如果TCP把这份数据包分段成几个小的数据包,此时如果在发送过程中发生丢包,那么TCP只会重传丢失的那一小部分数据包
MTU最大传输单元——默认最大1500字节,是数据链路层的参数(限制二层数据)
MSS最大分段大小——MTU-IP协议报头最小长度,最大1480字节(限制分段)
(2)确认
接收端接收到分段数据时,根据fen'duan数据序号向发送端发送一个确认
(3)重传
如果发送端发完数据段之后,并没有收到接收端反馈的确认报文,重新发送一遍
(4)流控——滑动窗口机制
根据接收方的接收能力,通过接收窗口实现端到端的流量控制,接收端将接收窗口的值放在TCP报文中的“窗口”字段中传送给发送端
发送窗口在连接建立时由双方商定初始值。在通信的过程中,接收端可根据自己的资源情况,随时动态地调整自己的接收窗口,然后告诉发送方,使发送方的发送窗口和自己的接收窗口一致