首先先回顾下ISO/OSI模型的结构:
那什么是PDU呢?
PDU:指协议数据单元(Protocol Data Unit),它是在不同网络层次之间数据传递的单位。
具体来说,物理层的PDU是比特流(bit),数据链路层的PDU是数据帧(frame),网络层的PDU是数据报(packet),传输层的PDU是数据段(segment),而其他更高层次的PDU则是数据(data)。
数据封装过程(应用层 -> 物理层)
- 用户信息转换为数据,以便在网络上传输(应用层)
- 数据转换为数据段,并在发送方和接收方主机之间建立一条可靠的连接(传输层)
- 数据段转换为数据报,并在报头中放入数据的逻辑地址,这样每一个数据报都可以通过互联网进行传输(网络层)
- 数据报转换为帧,以便在本地网络中传输。在本网段上,使用MAC地址唯一标识每一台主机。(数据链路层)
- 帧转换为比特流,并通过编码和调制进行数据转换。(物理层)
应用层PDU:
传输层PDU:
TCP报文段的首部格式:
首部最小长度:20B(20字节)的固定首部。
(备注:UDP数据报首部长度为8B。)
TCP有效数据载荷的长度是1460字节。
首部固定部分各字段:
- 源端口和目的端口:各占2B。
- 序号:占4B。
- 确认号(ack):占4B。指期望收到对方下一个报文段的第一个数据字节的序号。例:B 正确收到 A 发送来的一个报文段,其序号字段值时是 501 ,数据长度是200B(序号501~700),这表明 B 正确收到了 A 发送的到序号 700 位置的数据,期望收到 701 号数据,所以 B 在发送给 A 的确认报文段中把确认号置为 701 。
- 数据偏移:占4B。指出TCP报文段的首部长度。
- 保留:占6B。
- 紧急URG(URGent):当URG = 1时,表明紧急指针字段有效。它告诉习题该报文段中有紧急数据,应当尽快传送。
- 确认ACK(ACKnowledgment):仅当ACK = 1时,确认号字段才有效。
- 同步SYN(SYNchronization):在建立连接时用来同步序号。当SYN = 1,且ACK = 0时,表明是一个连接请求报文段。对方若同意连接,则应在响应报文段中使 SYN = 1和ACK = 1。
- 终止FIN(FINish):用来释放一个连接。当FIN = 1时, 表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
- 复位RST(RwSeT):当RST = 1时,表明TCP连接中出现严重差错(如主机崩溃 或其他原因),必须释放连接,然后再重新建立运输连接。
剩余不重要,不需要过多了解。
网络层PDU(ip数据报)
ip数据报首部:
长度:20B ~ 60B。
1、版本
从图中可以看到,版本字段占4位。记录着通信双方使用的IP协议版本,比如IPv4、IPv6,目前广泛使用的是IPv4。
2、首部长度
占4位,表示的单位为4字节,比如1111(十进制的15)就代表首部长度为60字节(15*4=60).以4字节的整数倍划分,不足则填充。最常用的首部长度为0101(20字节)。
3、区分服务
占8位,用以获得更好的服务。
4、总长度
即首部长度和数据长度之和。占16位。因此,最大长度可知为16位都是1,就是65535字节。
在IP层下层数据链路层存在自己的帧格式,帧格式的数据字段最大传送单元(MTU)是1500字节。尽可能长的数据报能够提高传输效率,实际中数据报长度很少大于1500字节。所以,IP标准规定:所有主机和路由器的IP数据报长度不能小于576字节。
如果数据报长度超过MTU,则将进行分片后再传送,与后面的片偏移相关。然后总长度就成了分片后每个分片的首部和数据的长度之和。
5、标识
占16位。在实际IP中,维持了一个计数器,每产生一个数据报,计数其加1,存放到该字段。IP是无连接服务,不存在按序接收问题,该标识不是序号,而是在进行分片之后对相同的数据报进行标识,属于同一个数据报的标识相同,以便到达目的后被重新封装为原来的数据报。
6、标志
占3位。目前使用2两位有意义的。
最低位:MF(More Fragment)还有分片,MF=0时说明是最后一个分片。
中间位:DF(Don‘t Fragment)不能分片,DF=0时才能分片。
7、片偏移
占13位。用于记录较长分组中0,指出一个分片在原数据报中的相对位置。片偏移以8字节为单位,长度是8字节的整数倍。
假设一个数据报总长度为3820字节。首部20字节和数据3800字节。现在要求长度不超过1420字节,那么它的每个分片为多少呢?
我们简单分析一下,数据部分尽可能长的可以分为1400,1400,1000三个分片,这样再加上首部满足小于1420字节。
分片一:0-1399字节,因此片偏移=0/8=0
分片二:1400-2799字节,片偏移=1400/8=175
分片三:2800-3800字节,片偏移=2800/8=350
很容易就计算出每个分片的片偏移。
8、生存时间
TTL(Time To Live)占8位。最大值255。每个数据报都有TTL,防止被错误路由在网络中不断循环,消耗网络资源。在实际中,TTL表示的是跳数而不是时间,指明数据报在网络中最多可经过多少个路由器。
9、协议
占8位。指明数据报携带的数据是使用什么协议,方便目的主机的IP层将数据交给对应的程序处理,这里列举几个。
协议 ICMP IGMP TCP UDP OSPF
字段值 1 2 6 17 89
10、首部检验和
占16位。只校验数据报首部,不包括数据部分。这样可以减少计算量,同时不采用复杂的CRC检验码,而是使用简单的反码算术运算。
反码算术运算:将数据报首部划分为多个16位的序列,16位序列相加之和取反码,写入检验和。接收方再将首部16位序列(包含检验和的16位)相加之和取反码,结果为0则说明数据报正确,否则丢弃。
原文链接:https://blog.csdn.net/Charzous/article/details/115956836
数据链路层PDU(帧):
什么是MTU?每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元MTU(Maximum Transfer Unit)。
PPP帧
MAC帧
MAC帧长度:64~1518B。
MAC帧的有效数据字段长度:46~1500B。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面加入一个整数字节的填充字段,以保证以太网的MAC帧长不小于64字节。
现在如果问:
物理层(比特流)
参考资料: