TCPIP学习笔记

TCP的连接

状态变化

 

各个状态的意义如下:

LISTEN - 侦听来自远方TCP端口的连接请求; 

SYN-SENT -在发送连接请求后等待匹配的连接请求; 

SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;

ESTABLISHED- 代表一个打开的连接,数据可以传送给用户; 

FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;

FIN-WAIT-2 - 从远程TCP等待连接中断请求; 

CLOSE-WAIT - 等待从本地用户发来的连接中断请求;

CLOSING -等待远程TCP对连接中断的确认; 

LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认; 

TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;

CLOSED - 没有任何连接状态;

三次握手(wireshark抓包如下)

 

说明:1.发送方与接收方各自维护自身的seq与ack

2.关于mass指的是包最大发送数据量,决定了要分几个包进行发送。Mass加上TCP头和IP头的长度就能得到MTU。

3.win表示自身还能接受多少字节的数据。

4.发送方根据ack当中期望收到的下一个字节的序号以及窗口,还有已经发送的字节序号,可以算出还可以发送的字节数。

5.FIN携带这个标志的包表示正在请求终止连接。

带宽与速率、滑动窗口之间的关系

滑动窗口:用于接收方通知发送方自己可以接受的数据大小。

拥塞窗口:用于发送方主动控制发送速率。

带宽:单位时间内从发送端到接受端所能通过的最高速率。

设滑动窗口大小为W, 发送端和接收端的带宽为B, RTT为Tr。

TCP发送数据时受滑动窗口的限制,当TCP将滑动窗口中的数据都发出后,在收到第一个ACK之前,滑动窗口大小是0,不能再发送数据了,必须等待ACK包使滑动窗口移动。那么在理想情况下,ACK包应该在什么时候到达呢?显然,就是在数据发出后的RTT时间后,ACK包到达。这也就是说,现在在不考虑丢包和拥塞情况下,TCP在一个RTT时间内能发出的最大数据量为W,所以不考虑带宽限制下,TCP能一个时刻能达到的最大速度是 V = W/Tr

如果假设Tr是一个定值,那么决定TCP速率的唯一因素就是TCP的滑动窗口大小。现在再考虑带宽限制,前面说过当马路上摆满车的时候,就无法再往里放车了,同理,TCP发送端在Tr/2时间内,能往通道上放的数据量为 V*Tr/2,当 V*Tr/2<=B*Tr/2时,单向通道容积不构成瓶颈,速率的限制主要来源于窗口大小限制。而当V*Tr/2>B*Tr/2时,则就受到容积限制,即此时速率限制来源于带宽限制。

把V*Tr/2<=B*Tr/2和V*Tr/2>B*Tr/2两边的Tr/2约掉,再把V = W/Tr代入,则可以得到 :

W <= B*Tr 及 W > B*Tr

B*Tr就是带宽时延乘积,取W为TCP能支持窗口的最大值Wmax,当Wmax <= B*Tr时,此时发送和接收端之间的通道就是所谓的长肥管道,即带宽时延乘积大的通道。在我们平时生活中使用的宽带网络,ADSL等环境下,因为带宽都比较小,从而B*Tr也比较小,再加上网络情况比较复杂,拥塞情况比较常见,所以这些网络环境下,TCP速率的主要限制因素在于带宽,丢包率等。长肥管道一般不太常见,多见于一些单位使用的专线网络,在这些网络中速率的主要限制因素就是窗口大小了,这也是传统TCP在这些网络环境中不能充分利用带宽的原因所在(因为传统TCP的窗口大小是用2字节表示的,所以最大只有65535(不考虑窗口扩大选项)),除了专线网络外,随着网络硬件技术的发展,万兆交换机的出现,局域网中也可能会出现带宽时延乘积较大的情况。

总结,在W<B*Tr时,影响TCP发送数据速率的最直接的因素是滑动窗口的大小,TCP的流量控制策略(比如超时时窗口设置为1,重复ACK时窗口减半)最终都是通过控制窗口大小来控制速率,而慢启动,拥塞避免这些流量控制算法实际上就是控制窗口增长方式的算法,也就是控制的是加速度大小。当W>B*Tr时,则影响速率的因素就是带宽了。

重传的研究

网络之所以能限制发送窗口,是因为它一口气收到太多数据时会发生拥塞。

拥塞窗口的维护:

  1. 连接刚刚建立,发送方对网络情况一无所知,如果一口气发太多数据就可能遭遇拥塞,所以发送方把拥塞窗口的初始值定的很小。
  2. 慢启动。
  3. 拥塞避免。

 

发生超时重传之后:

 

快速重传:当发送方得到三个或以上重复确认时,就意识到相应的包已经丢,立即重传。之所以限定三个或者以上可以在很大程度上避免因乱序而触发快速重传。

说明:

  1. 没有发生拥塞时,发送窗口越大,性能越好。所以在没有带宽限制的情况下,应该尽量增大接受窗口。
  2. 如果经常发生拥塞,那限制发送窗口反而能提高性能。因为即便是万分之一的重传对性能的影响都很大。
  3. 超时重传对性能影响最大,因为它有一段时间(RTO)没有数据传输,而且拥塞窗口会设置成1mss
  4. 快速重传对性能影响小一些,因为它没有等待时间,而且拥塞窗口减少的没有那么大。
  5. SACK和NewReno有利于提高重传效率,提高传输性能。
  6. 丢包对极小的文件影响比大文件要大。

 

转载于:https://www.cnblogs.com/wangzhenghua/p/10254877.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值