数据的封装过程
传输层
UDP
直接将数据封装为UDP数据报,添加UDP头部(8B)。
要点:
- UDP首部简单,无连接不可靠、无重传、无拥塞控制,适用于实时性要求较高的通讯;
- 不需要源端口或不想计算检验和时,可让相应字段全部为0。
TCP
将数据分割为数据段(Segment),每个段添加TCP头部(20B-60B)。
- 序号seq。占4B,共
个序号。
- 确认号ack。累计确认,若确认号为N,表明到N-1为止的序号已经全部收到。
- 数据偏移。即首部长度,不要被名字迷惑,单位4B。
- URG。URG=1表示紧急字段有效,表示数据紧急应尽快传送。
- ACK。ACK=1确认号字段才有效,只有握手1的ACK字段为0。
- PSH。PSH=1表示接收方需尽快交付此报文到应用进程。
- RST。RST=1表示需要释放连接。
- SYN。SYN=1表示这是一个连接请求或者连接接受报文,只有握手1,2的SYN字段为1。
- FIN。FIN=1表示此报文段的发送方已发送完毕,需要释放连接,只有挥手1,3的FIN字段为1。
- 窗口。告诉对方目前允许对方发送的数据量,有流量控制的作用。
要点:
- TCP是有连接,可靠的传输,支持分段,不支持广播;
- 握手1、2,挥手1、3即使不携带数据,也需要占用一个序号。
网络层
IPv4
传输层数据段被封装为IP数据包,添加IP头部(20B-60B)。
- 版本。IPv4为4,IPv6为6 。
- 首部长度。单位4B,最常用的首部长度为5。在题目中通常IP数据报的开头为45(16进制)。
- 总长度。单位1B。数据报理论最大长度65535B,以太网的最大传送单元为1500B。
- 标识。最低位为MF,MF=1表示后面还有分片;中间位为DF,只有DF=0才允许分片。
- 片偏移。单位8B。除最后一个分片,每个分片一定是8B的整数倍。
- TTL。路由器转发数据前先将TTL-1,若此时TTL变为0,则丢弃该数据报。
数据链路层
以太网MAC帧
IP数据包被封装为数据帧。以太网帧的范围64B-1518B。
无线局域网MAC帧
主要关注3个地址字段
去往AP=0,来自AP=1。地址1=目的地址,地址2=AP地址,地址3=源地址。
去往AP=1,来自AP=0。地址1=AP地址,地址2=源地址,地址3=目的地址。
简单来说,地址1=本次发送的接收方地址,地址2表示发送方地址。
题目解析
一般说来,45开头直接可以判断是IP数据报了。那么第一行第4块(c0 a8 00 08就是源IP地址)。
1)将主机H的IP换成16进制,为c0a80008,在13-16字节处,因此1、3、4为H发送的IP分组。
TCP建立过程为握手1、2、3,握手1的ACK为1,握手1、2的SYN为1,这两个字段都在34字节里,将每个字段的34字节换成二进制,发现1的ACK=0,SYN=1;2的ACK=1,SYN=1,那么1就是握手1,2就是握手2。握手3的ack应该是握手2的seq+1。发现握手3应该是3。综上1,2,3完成了TCP的连接建立。
以太网的最短长度为64B,其中IP数据报部分为46B,本题应找到长度小于46B的IP分组。总长度字段在3,4字节处,发现3,5的总长度为28,换成10进制为40B<46B,而其他都大于46B,因此3,5通过时进行了填充。
2)5中的ack序号为84 6b 41 d6,说明84 6b 41 d5及之前序号的数据全收到了,题1知道发送的第一个字节应该是握手3中的seq序号,为84 6b 41 c6。收到的字节数为(HEX)d5-c6+1=(DEC)16。
3)通过比较发现来自S的分组应该对应的是到达H的5,S分组的TTL为(HEX)40(9字节处),5的TTL为(HEX)31。通过的路由器个数为(HEX)40-31=15个。