广州总校区切换校区
图片
news

新闻资讯

TCP传输规则及策略

发布时间: 2022-04-15

TCP传输规则及策略,TCP协议通过提供滑动窗口管理机制,在确保数据传输的可靠性的同时,充分地利用网络带宽。

滑动窗口提供一种动态的传输机制,允许一次连续传输若干数据包而不必一一等待确认,但对连续发送的数据包的数量进行限制。

滑动窗口的大小表明了接收方接收缓冲区的大小。它由一组按顺序排列的数据包序号组成,这些数据包包括:发送并已确认部分,发送但未被确认的部分和能够发送但未发送的部分。按照顺序发送的若干数据包不必一一等待确认,确认的顺序可以打乱。




假设发送方通过滑动窗口一次性向接收方发送了顺序号为4、5和6的数据包,数据包5、6被确认,而数据包4未被确认,这时窗口是不能被滑动的,直到数据包4被确认后,窗口立即向后滑动。实际上,滑动窗口的大小在随着接收方缓冲区的变动而变动,努力地使发送方一次发送的若干数据包可以正好填满接收方的接收缓冲区,这实际上是一种流量控制技术。

滑动窗口主要负责对流量进行控制,路由器或接收方可以通过发送ICMP消息给发送方,以确保发送方发送数据包的速度。

发送方在知道接收方缓冲区大小的情况下发送了一个数据包,而该数据包只占用了接收方缓冲区的一部分。在应用程序取走这个数据包之前,接收方会通告窗口大小为剩下的那部分缓冲区的大小,并立即对上一次的数据包进行确认。

发送方会根据接收方提供的新的窗口大小进行发送,如果这时发送的数据包正好装满接收方的缓冲区,但接收方的应用程序还没有对数据进行读取,接收方会进行确认并声明滑动窗口大小为0。

此时发送方会停止发送数据包而进入等待状态,直到接收方的应用程序读取缓冲区内的数据后,接收方又会声明大于0 的窗口大小,发送方会继续发送数据。在这种情况下,很容易出现窗口声明丢失从而出现死锁的可能。

实际上,TCP标准提供了比较有效的手段防止以上情况的发生。

其实,发送方不用在应用程序的数据到来时就马上发送数据包;接收方也不用一收到数据包就进行确认。发送方产生了一个数据包,但该数据包可能只占用接收方缓冲区的一部分,此时发送方会将该数据包暂时缓存起来,等数据包的数量和大小足以装满接收方缓冲区时再一起发送,接收方亦如此。利用这一方式可以大大提高数据传输的性能。

TCP在具体实现时采用设置延迟的方式,即对包含确认信息和窗口大小的修改信息的数据包进行延迟操作,向后延迟500ms再发送出去,并尽可能在这些数据包上带上一些实际数据。这样,只要应用程序在500ms内响应,便可以将发送的数据包数降低50%,网络的实际利用率也随之得到提高。

采用这种方法可以改善网络的使用状况,但发送方的效率还是没有得到有效的改善。

以上提到的情况其实属于愚蠢窗口症候群(silly window syndrome)现象:终端应用程序在普遍情况下每进行一次单击键盘操作(即一个字节)就会发送一个包,而典型情况下一个包会拥有一个字节的数据载荷和40个字节长(20字节TCP头和20字节的IP)的头,于是产生4000%的过载,很轻易地就降低了网络传输性能。

1984 年,John Nagle设计了Nagle算法解决这种网络问题,后来成为了一种标准并且在因特网上得以实现。

现在Nagle算法已经成为默认配置了。这种方法的原理其实很简单:发送方首先发送从应用程序传来的数据的第一个字节,并等待接收方的确认信息;在此之前,从应用程序传来的数据会缓存起来,当确认信息到达后,即将缓存的数据一起发送出去。

这种方法动态地改善了网络性能。但是在某些实际的TCP程序设计中,最好将Nagle算法关掉,因为使用它也可能产生不良效果。

上一篇: 什么是ARP协议

下一篇: 什么是端口与端口号

<
在线咨询 ×

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!