TCP可靠传输与重传分析

Posted Y0n1an

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP可靠传输与重传分析相关的知识,希望对你有一定的参考价值。

实验步骤

sysctl -w net.ipv4.tcp_rmem='4096 65536 65536' 

降低缓存数,减少窗口值

sysctl -w net.ipv4.tcp_sack=0

避免使用sack重传算法
然后执行之前的脚本,模拟我上述几篇文章的网络拓扑
执行之后,用iptable设置规则,以10%的丢包率模拟丢包

ip netns exec RA iptables -I FORWARD -d 192.168.57.254 -m statistic --mode random 
--probability 0.1 -j DROP

然后执行

ip netns exec ns56A bash

模拟ns56A终端
执行

ip netns exec ns57C bash

模拟ns57C终端
在ns56A中创建一个大小为100K字节大小的文件

truncate -s 100K 100K.0

同时命名为100k.0
在ns56A中抓包

ip netns exec ns56A wireshark & 

ns57c中4499打开TCP服务,并将输出流重定向到100k.1文件。

nc -lv 4499 > 100K.1

在ns56A中输入套接字中的目的地址的ip和端口

nc 192.168.57.254 4499 < 100K.0

将输入重定向到文件100.k
当读到一个EOF时,会主动断开TCP。

重传分类

本实验要求捕获到TCP超时重传事件,快重传事件和部分ACK事件,你在实验中捕获这几种事件时,操作系统为主机ns56A上的TCP客户程序分配的端口号是多少,如果这些事件是分多次捕获的,请分别给出客户进程的端口号。截图说明。
抓了四次,有一次实验具有超时重传,快重传、另一次有部分ACK事件,主机端口分别为39814,39810


超时重传

根据捕获:可以得到下表


根据序号,找到了一个快重传,而快重传丢掉了后才会触发超时重传

原报文段

通过这个信息,可以看到对前一个报文段得ack确认


结合两张图,一次正常确认+19,总共20次,触发过快重传,快重传和超时重传间隔0.213486144-0.000793191,所以RTT差不多是0.21秒

快重传





可总结得到如上两张表
同样ACK确认总共3+1 = 4:

部分ACK重传



如图,36657的快重传报文的编号,对应丢失报文段是53,ns56A快重传前发送最后一个报文段的编号是68
这是丢失报文段数据

快重传报文

快重传前最后一个报文

部分ACK
因为部分ACK确认字小于快重传前最后一个字节的编号38105<52584,所以是一个部分ACK。对于TCP快重传,如果收到部分ACK,立即重传部分ACK所指向的报文。所以下一个报文重传38105

以上是关于TCP可靠传输与重传分析的主要内容,如果未能解决你的问题,请参考以下文章

TCP可靠传输与重传分析

TCP超时与重传

TCP超时与重传机制

TCP/IP 协议——十四章:TCP超时与重传

TCP/IP传输层协议实现 - TCP的超时与重传(lwip)

13.TCP的超时与重传