数据包概述
下图是笔者我实际中用Wireshark 抓到的HTTP的完整数据包,现分析如下:
网络接口层(物理层和数据链路层) | IP头(网络层) | TCP头(传输层) | HTTP协议+data(应用层) |
---|
1. 在链路层
由以太网的物理特性决定了数据帧的长度为[46+18]-[1500+18],其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500
2. 在网络层
因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480
3. 在传输层
对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472; (note:实验不要求)
4. 在应用层
Data最大长度为1472。 (当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃)
Note: IP分片、“TCP分片”的区别
首先声明:TCP分片应该称为TCP分段. 区别
IP分片产生的原因是MTU网络层的;TCP分段产生原因是MSS(Max Segment Size), 它们工作在不同的层
IP分片由网络层完成,也在网络层进行重组;TCP分段是在传输层完成,并在传输层进行重组. //透明性
对于以太网,MSS为1460字节(1500 – 20 - 20),而MTU(1500 – 20 )往往会大于MSS. 其中20字节为IP / TCP 头长。故采用TCP协议进行数据传输,是不会造成IP分片的。若数据过大,只会在传输层进行数据分段,到了IP层就不用分片
- 我们常提到的IP分片是由于UDP传输协议造成的,因为UDP传输协议并未限定传输数据报的大小
图中最开始的绿色部分就是24 Bytes的Pcap Header,接下来红色的16 Bytes是第一个消息的Pcaket Header。后面的红色的16 Bytes是第二个消息的Pcaket Header。两块蓝色的部分分别是两个消息从链路层开始的完整内容。在网络上实际传输的数据包在数据链路层上每一个Packet开始都会有7个用于同步的字节和一个用于标识该Packet开始的字节,最后还会有四个CRC校验字节;而PCAP文件中会把前8个字节和最后4个校验自己去掉,因为这些信息对于协议分析是没有用的
Frame帧
用Wireshark打开一个PCAP数据包,每条消息的所有field会被解析出来并会按照协议层次折叠起来。第一层显示的是FrameXXX,这一级别没有对应某层具体的协议,而是对本条消息的一个概括性总结&#