一、TCP协议重传机制
TCP协议是一种面向连接、可靠的传输层协议。为了保证数据的可靠传输,TCP采用数据包重传的机制来应对网络传输过程中可能出现的丢包、错包和乱序等问题。
TCP协议的重传包括超时重传、快速重传、带选择确认SACK的重传和重复SACK重传四种。
二、iptables命令
执行Linux命令,用iptables设置规则,模拟丢包:以10%的概率丢弃目的地址为192.168.57.254的IP数据报。
iptables -I FORWARD -d 192.168.57.254 -m statistic --mode random --probability 0.1 -j DROP
解释:
(1)-I FORWARD 在FORWARD接口上执行命令;
(2)-d 192.168.57.254 目的地址(destination address)是192.168.57.254的IP数据报;
(3)-m statistic 以统计的概率进行丢包;
(4)-mode random 随机模式;
(5)--probability 0.1 概率是0.1;
(6)-j DROP 操作(job):丢弃;
三、Wireshark软件默认规则
1. 黑色打底、红色字体(默认的着色规则,可修改)的TCP数据包:出错的数据包;
2. TCP Dup ACK:重复(duplicate)的ACK;
3. TCP Fast Retransmission:快重传;
4. TCP Out-Of-Order:乱序(部分ACK(快重传中的特殊情况:在一次快重传的过程中,一个RTT(往返时间)之内,出现两次丢包的现象));
5. TCP Retransmission:超时重传;
四、序号
相对序号:TCP协议 右键——Protocol Preference——勾选Relative sequence numbers;
绝对序号:TCP协议 右键——Protocol Preference——取消勾选Relative sequence numbers;
五、应用到列
把序号字段应用到列:Sequence numbers 右键——Apply as Column
六、重复ACK确认
超时重传报文段发送之前,共收到几次对该报文段的前一个报文段的ACK确认:
「TCP Dup ACK 26#19」表示:对26号ACK报文,重传19次,加上正常26号ACK,一共20次。
七、重传机制
触发快重传之后,如果还是传输失败,会重置时钟,直到触发超时重传,超时重传与快重传之间的时间间隔是一个RTT。
快重传定义:三次重复ACK然后发送快重传(实际情况是可能在接收方快重传之前,就连续收到大于三次的重复ACK确认报文)。
八、回答问题
(1)找到94号TCP Out-Of-Order(乱序),前一个报文93号是部分ACK报文;
(2)根据93号部分ACK报文段,找到它前面的快重传编号是78;根据快重传报文中的序号,分析序号34713是原始报文要发送的数据编号;
(3)根据序号34713找到Wireshark分配给(引起快重传的)丢失报文段的编号:53;
(4)Wireshark分配给快重传前ns56A发送的最后一个报文段的编号:快重传前的报文是76号;快重传发生时,ns56A发送的最后一字节的编号是63672(62225 + 数据长度Len1448 - 1);
(5)ns56A收到部分ACK报文段后,会立即重传部分ACK所指向的报文60777;
九、超时重传
(1)使用部分ACK可以(一定程度)避免超时重传;
(2)超时重传需要回退N帧,从下一个确认帧(66号)开始重新发送,直到对方发来下一个确认帧(77号)结束;