TCP的交互式数据流、TCP的成块数据流、TCP超时和重传、TCP坚持定时器、TCP保活定时器

来源:互联网 发布:淘宝店铺转让受骗案例 编辑:程序博客网 时间:2024/05/14 11:33
TCP的交互式数据流


1)经受时延的确认
TCP的交互式数据流通常使用“经过时延的确认”技术。通常服务器在接收到从客户端发送过来的数据时,并不马上发送ACK,而是等一小段时间,看看本机是否有数据要反馈给客户端,如果


有,就将数据包含在此ACK包中,一起发送给Client。一般情况下这个时延为200ms。需要注意的时这个200ms的定时器时相对于内核的时钟滴答的。如果一个数据分组到达后,此定时器已经经


过了100ms,那么再过100ms ACK才会被发送,如果在这100ms内有数据要反馈,则在100ms后ACK会和数据一起发送。
      
2)Nagle算法分析。
Nagle算法主要用来预防小分组的产生。在广域网上,大量TCP小分组极有可能造成网络的拥塞。
       Nagle时针对每一个TCP连接的。它要求一个TCP连接上最多只能有一个未被确认的小分组。在该分组的确认到达之前不能发送其他小分组。TCP会搜集这些小的分组,然后在之前小分组的确认到达后将刚才搜集的小分组合并发送出去。
       有时候我们必须要关闭Nagle算法,特别是在一些对时延要求较高的交互式操作环境中,所有的小分组必须尽快发送出去。
       我们可以通过编程取消Nagle算法,利用TCP_NODELAY选项来关闭Nagle算法。






TCP的成块数据流


1)正常数据流
TCP通常不会对每个到达的数据分段进行确认操作,通常一个ACK报文可以确认多个成块数据段报文(报文与ACK不是是一对一的关系),通常情况下是两个成块数据报文段需要一个


ACK报文确认。


2)滑动窗口协议
该协议允许发送方在停止等待确认前可以连续发送多个分组。由于发送发不必发送一个分组就停下来等待确认,因此该协议可以加速数据的传输。特别需要注意的是,滑动窗口是一


个抽象的概念,它是针对每一个TCP连接的,而且是有方向的,一个TCP连接应该有两个滑动窗口,每个数据传输方向上有一个,而不是针对连接的每一端的。
1、窗口左边沿向右边沿靠近为窗口贺龙。这种现象发生在数据被发送和确认时。2、窗口右边沿向右移动时,允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接受进程


读取已经确认的数据并释放了TCP的接受缓存。3、当右边沿向左边沿移动时,称之为窗口收缩。如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。


同样,在实现中,发送方不必发送一个全窗口的数据,但是它当然可以这样做。ACK总是将窗口向右边滑动,窗口的大小可以减小,接收方在发送ACK之前不必等待窗口被填满(即变为0),很多实现是收到两个数据报文段后立刻发送ACK。




3)PUSH标志
发送方使用该标志通知接受方将所接受到的所有数据全部提交给接收进程,发送端每次发送都清空发送缓存。当接收端收到这些数据后,它需要立刻将这些数据提交给应用层进程,


而不再等待是否还有额外的数据到达。


4)慢启动(指数增加,嘲讽)
慢启动是四种拥塞窗口控制算法中的一种,另外的三种是:拥塞控制算法(线性增加)、快重传、快恢复。
慢启动用到了两个窗口:1)拥塞窗口(congestion window):发送方使用的流量控制  2)通告窗口:接收方使用流量控制。发送方每次选取拥塞窗口和通告窗口中的最小值作为发送上线。
慢启动为TCP的发送方增加了一个拥塞窗口,当连接建立时,拥塞窗口被初始化为一个报文段大小,每收到一个ACK,拥塞窗口就会增加一个报文段,发送方取拥塞窗口与通过窗口的最小值作为发送的上限。


5)成块数据的吞吐量
什么是吞吐量,吞吐量就是在单位时间内通过某个网络(或信道、接口)的数据量。
时延带宽积:bandwidth(b/s)*round-trip times(s)这个值依赖于网速和两端的RTT。RTT加倍、带宽加倍可使管道容量加倍


6)紧急方式
TCP提供了一种“紧急方式”的数据传输方式,TCP的一端可以告诉另一端有些具有某种方式的紧急数据被放在了普通的数据流中,接收方可以自行选择处理。URG比特被置为1,并且一个16bit的紧急指针被置为一个整的偏移量,该偏移量必须与TCP首部中序号字段相加,以便得出紧急数据的最后一个字节的序号。只要从接收方当前读取位置到紧急数据指针之间有数据存在,就认为应用程序处于“紧急方式”。




习题20.1
0字节号用于SYN,8193字节号是FIN。SYN和FIN各占一个字节


20.3
Case 1: 128ms*256000b/s*47%/8=1925字节
Case 2: 500ms*256000b/s*13%/8=2080字节


申请2048字节大小的窗口


20.4 
不行,因为TCP超时之可能对那个重新对数据进行分组




20.5
15是窗口更新,16是应用进程关闭它这一端连接的结果






TCP超时(对确认的超时)和重传




TCP管理4个不同的定时器
1)重传定时器(使用于希望收到另一端的确认)
2)坚持定时器(使窗口大小信息保持不断流动)
3)保活定时器(检测到一个空闲连接的另一端合适崩溃或重启)
4)2MSL定时器(测量一个连接处于TIME_WAIT状态的时间)




1)快重传
在收到一个失序的报文段时, TCP立即需要产生一个ACK(一个重复的ACK)。这个重复的ACK不应该被迟延。该重复的ACK的目的在于让对方知道收到一个失序的报文段,并告诉对方自己希望收到的序号。
由于我们不知道一个重复的ACK是由一个丢失的报文段引起的,还是由于仅仅出现了几个报文段的重新排序,因此我们等待少量重复的ACK到来。假如这只是一些报文段的重新排序,则在重新排序的报文段被处理并产生一个新的ACK之前,只可能产生1 ~ 2个重复的ACK。
如果一连串收到3个或3个以上的重复ACK,就非常可能是一个报文段丢失了。于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。这就是快速重传算法。于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。接下来执行的不是慢启动算法而是拥塞避免算法。这就是快速恢复算法。
注意:重传后,发送方继续发送正常的数据,不需要等待对方确认重传
快恢复常常配合快重传使用,其过程有两个要点1)乘法减小2)加法增大






TCP坚持定时器


1)如果一个确认丢失了,双方有可能因为等待对方而使连接终止。为了防止这种死锁的情况,发送方使用一个坚持定时器来周期性地向接收方查询,以便发现窗口是否已经增大。这些从发送方发出的报文段称为窗口探查。探查报文段包含一个字节的数据。
在连接的一方需要发送数据而对方通告窗口大小为0时,就需要设置TCP坚持定时器。
2)窗口探查
通常,服务器向客户端发送ACK,通告其窗口为0,从而使客户停止发送任何其他数据。这就引起客户设置坚持定时器。如果在该定时器时间到达时客户还没有收到一个窗口更新,它就探查这个空的窗口以决定窗口更新是否丢失。坚持定时器使用普通的TCP指数退避算法。


3)坚持定时器与重传超时之间的不同点
TCP从不放弃发送窗口探查。这些探查每隔60s发送一次,这个过程将持续到窗口被打开,或者应用进程使用的链接终止。


4)糊涂窗口综合征
a)什么是糊涂窗口综合症:当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者兼而有之;就会使应用进程间传送的报文段很小,特别是有效载荷很小。 极端情况下,有效载荷可能只有1个字节;而传输开销有40字节(20字节的IP头+20字节的TCP头) 这种现象就叫糊涂窗口综合症。
b)避免糊涂窗口综合征就是使TCP避免通告小的窗口大小或发送小的报文段。
c)避免糊涂窗口综合症的措施:接收方:除非接收方有足够的空间来接收一个满长度的报文或是腾出缓冲区空间的一半,ACK的win值为0
   发送方:只有满足下列条件之一才能发送------1)可以发送一个满长度的报文段2)可以发送至少是接受方通告窗口大小一半的报文段3)能够发送手头上的所有数据而不希望接收ACK




22.2
FIN标志,和SYN标志一样,在序号空间占据了一个字节。通知窗口看起来笑了一个字节,是因为TCP允许FIN标志在序号空间中占用一个字节的空间。


TCP保活定时器


一个服务器希望知道客户主机是否崩溃并关机或者崩溃又重新启动。许多实现提供的保活定时器可以提供这种能力。保活定时器主要是为服务器应用程序提供的。
如果一个给定的连接在两个小时内没有任何动作,则服务器就向客户发送一个探查报文段。客户主机必须处于以下四种状态之一:
1)客户主机正常运行,并从服务器可达。
2)客户主机已经崩溃,并且关闭或者重新启动。在任何一种情况下,客户的TCP都没有响应。服务器将不能够收到对探查的响应,并在75s后超时。服务器总共发送10个这样的探查,每个间隔75s。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接
3)客户主机崩溃并已经重新启动。这时服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,是的服务器终止这个连接。
4)客户主机正常运行,但是从服务器不可达。可能是一个中间路由器已经崩溃,或一条电话线临时出现故障,或发生了其他一些类似情况。


保活定时器的优点:通常激活keepalive选项比显示的编写应用程序探测报文更容易;keepalive探测报文比应用程序探测报文占用更少的网络带宽;如果连接不是空闲的,就不会发送探测报文.




保活定时器的缺点:keepalive选项可能会由一个临时性的网络中断而引起一个非常好的连接断开;发送探测报文的间隔一般不可以根据应用程序进行配置。
0 0
原创粉丝点击