`

TCP协议之网络延时

阅读更多

影响TCP 网络时延的因素

  • 硬件速度
  • 网络和服务器的负载
  • 请求和响应报文的尺寸
  • 客户端和服务器之间的距离
  • TCP 协议的技术复杂性

TCP协议产生的时延

  • TCP 连接建立握手;
  • TCP 慢启动拥塞控制;
  • 数据聚集的 Nagle 算法;
  • 用于捎带确认的 TCP 延迟确认算法;
  • TIME_WAIT 时延和端口耗尽。

TCP连接建立

TCP连接的建立,需要经历3个报文的交互过程,沟通相关连接参数,这个过程称为三次握手(three-way handshake)。

因此,如果在每次发送数据之前,都重新建立一次TCP连接,那么建立连接的耗时将对性能产生较大的影响(特别是在发送少量数据的情况下)。

 



 

三次握手四次挥手(参考自coolshell)

 

优化方法

建立长连接,多次数据的发送复用同一条连接。

TCP慢启动

如果在发送方和接收方之间存在多个路由器和速率较慢的链路,此时多个发送方一开始便向网络发送多个报文段,由于受网络传输和服务端处理能力的影响,一些中间路由器必须缓存分组,并有可能最终耗尽存储器的空间,因而更多的报文发送将使网络出现拥塞。

TCP慢启动(slow start),就是用于防止因特网的突然过载和拥塞的一种流量控制机制。

慢启动为发送方的TCP增加了一个窗口:拥塞窗口(congestion window),简称cwnd。

刚建立连接时,拥塞窗口被初始化为1个报文段。每收到一个ACK,拥塞窗口就增加一个报文段。发送方取拥塞窗口与接收方通告窗口中的最小值作为发送上限。

也就是说,TCP连接会随着时间进行自我“调谐”,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。

注:拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

优化方法

采用长连接,避免每次建立连接后的慢启动。

Nagle算法

在广域网上,小分组会增加网络拥塞出现的可能性。Nagle算法(根据其发明者John Nagle命名)旨在收集这些小分组,以一个分组的方式发出去,以提高网络效率。

该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。

该算法的优越之处在于它是自适应的:确认到达得越快,数据也就发送得越快。

Nagle 算法会引发以下性能问题

  • 当报文无法填满一个分组时,需要等待其他额外数据;
  • Nagle算法会阻止数据的发送,直到有确认分组抵达为止,但确认分组自身会被延迟确认算法延迟 100 ~ 200 毫秒。

算法伪代码

if there is new data to send
  if the window size >= MSS and available data is >= MSS
    send complete MSS segment now
  else
    if there is unconfirmed data still in the pipe
      enqueue data in the buffer until an acknowledge is received
    else
      send data immediately
    end if
  end if
end if

优化方法

对于实时性要求较高的应用场景,可以通过设置TCP_NODELAY参数来关闭Nagle算法,提高性能。

延时确认算法

通常TCP在接收到数据时并不立即发送ACK;相反,它推迟发送,以便将ACK与需要沿该方向发送的数据一起发送。

有时称这种现象为数据捎带ACK,由于确认报文通常很小,所以TCP允许在发往相同方向的输出数据分组中对其进行“捎带”。

绝大多数实现采用的时延为200ms,也就是说,TCP将以最大200ms的时延等待是否有数据一起发送。

通常,延迟确认算法会引入相当大的时延。

优化方法

根据所使用操作系统的不同,可以调整或禁止延迟确认算法。(这个方法我没尝试过)

TIME_WAIT状态

TIME_WAIT状态也称为2MSL等待状态。

当某个 TCP 端点关闭 TCP 连接时, 会在内存中维护一个小的控制块,用来记录最近所关闭连接的 IP 地址和端口号。

这类信息只会维持一小段时间,通常是所估计的报文段最大生存时间的的两倍(称为2MSL,通常为2分钟左右),以确保在这段时间内不会创建具有相同地址和端口号的新连接。

实际上,这个算法可以防止在两分钟内创建、关闭并重新创建两个具有相同IP地址和端口号的连接。

将 2MSL 的值取为 2 分钟是有历史原因的。很早以前,路由器的速度还很慢,人们估计,在将一个分组的复制副本丢弃之前,它可以在因特网队列中保留最多一分钟的时间。现在,最大分段生存期要小得多了。

  • 报文段最大生存时间MSL(Maximum Segment Lifetime),是指任何报文段被丢弃前在网络中的最长生存时间。

  • RFC 793 [Postel 1981c]指出MSL为2分钟。然而,实现中的常用值是30秒,1分钟或2分钟。

优化方法

  • 打开tcp_tw_reuse,让程序可以重用处于TIME_WAIT状态的端口。如果使用tcp_tw_reuse,必需设置tcp_timestamps=1(默认值)。(这个对于快速重启某些服务很有用,特别是服务端程序)
  • 打开tcp_tw_recycle,让处于TIME_WAIT状态的套接字更快的回收。

对于该设置,通常由专业运维同事在服务器上做好相关配置。

关于TIME_WAIT问题,更详细介绍可阅读耗子叔的这篇文章《TCP 的那些事儿(上)》:

https://coolshell.cn/articles/11564.html

 

参考

《TCP/IP详解卷1: 协议》

《HTTP权威指南》

https://coolshell.cn/articles/11564.html

维基百科

 

转载请注明来源:http://zhanjia.iteye.com/blog/2428102

 

个人公众号

二进制之路

 

  • 大小: 85.1 KB
分享到:
评论

相关推荐

    TCP原理和TCP协议介绍

    T C P还必须解决互联网中的数据报丢失和延迟问题以 提供有效的数据传输,同时还不能让底层的网络和路由器过载。在评论了T C P为应用提供的服 务之后,本章将会介绍T C P实现可靠性所使用的技术。

    TCP、UDP协议网络测试工具,支持延时发送,多条发送

    TCP、UDP协议网络测试工具,支持延时发送,多条发送

    论文研究-802.11无线接入TCP连接本地延迟抖动的理论模型.pdf

    为了分析802.11接入网类型对延迟抖动的影响,基于对802.11DCF(distributed coordinated function)信道访问机制的分析与马尔可夫模型,...该模型可以用于接入网类型区分、数据包流量分类、TCP协议改进与非法AP检测。

    计算机专业毕设精选-ASP.NET基于TCP协议的简单即时通信软件的设计与实现(源代码+论文).rar

    2. **实时通信功能**:利用TCP协议的低延迟特性,实现了用户间的实时消息传输。系统自动处理连接建立、维护和断开等网络操作,确保消息的及时送达。 3. **安全通信机制**:采用了基本的加密措施,如消息摘要算法等,...

    ESP8266 MCU开发板与APP实现TCP局域网通信-arduino代码开发

    局域网内设备数量相对较少,因此TCP协议建立连接的时间较快,对网络延迟的影响较小。 局域网内的设备相对安全,不会受到外部攻击的干扰,因此TCP协议中的加密措施可能不需要那么复杂。 总之,使用TCP协议进行局域网...

    采用TCP协议的聊天软件客户端和服务器一体

    基于TCP协议的聊天软件、绝无网络延迟问题。聊天内容绝不会在其他地方保存。不了网也能用。。

    Qt设备状态检测系统源代码串口 网络TCP UDPModbus通信协议带有报警声音详细注释 设备状态检测源代码支持串口网口Tcp

    Qt设备状态检测系统源代码串口 网络TCP UDPModbus通信协议带有报警声音详细注释 设备状态检测源代码支持串口网口TcpUdp播放音频LED显示采用modbus协议 提供,提供详细注释,提供设计文档 使用说明介绍 1.功能介绍: ...

    iperf3是一个网络带宽测试工具,iperf3可以擦拭TCP和UDP带宽质量。iperf3可以测量最大TCP带宽,具有多种参数

    使用iperf3,你可以调整与时序、缓冲区和协议(如TCP、UDP、SCTP)相关的几个参数。它对网络性能调优操作很方便,为了获得最大或相当改善的网络性能,你需要增加吞吐量以及网络接收个发送功能的延迟。但是在进行实际...

    TCPIP协议详解卷二.part2.rar

    2.6.5 TCP重组避免调用m_pullup 39 2.6.6 m_pullup使用总结 40 2.7 mbuf宏和函数的小结 40 2.8 Net/3联网数据结构小结 42 2.9 m_copy和簇引用计数 43 2.10 其他选择 47 2.11 小结 47 第3章 接口层 49 3.1 ...

    论文研究-一种基于TCP的实时视频传输延时预测模型.pdf

    针对TCP重传易导致延时抖动大、降低流媒体播放质量的问题,提出了使用TCP传输实时视频时,播放质量不受TCP重传影响的必要条件,即视频帧发送延时、播放缓冲区延时与网络往返时间需要满足一定的关系式。建立了视频帧...

    tcp-ip详解2:协议的实现

    2.6.5 TCP重组避免调用m_pullup 39 2.6.6 m_pullup使用总结 40 2.7 mbuf宏和函数的小结 40 2.8 Net/3联网数据结构小结 42 2.9 m_copy和簇引用计数 43 2.10 其他选择 47 2.11 小结 47 第3章 接口层 49 3.1 引言 49 ...

    TCP拦截和网络地址转换

    TCP拦截和网络地址转换 本书将讨论与访问表相关的技术,而非访问表本身。这些技术提供了控制网络中数据流 量的附加功能。这些功能特性会使读者能够加强进出网络报文的附加功能。通过智能地对数 据本身进行操作,...

    通信与网络中的基于混合TCP-UDP的HTTP协议实现方法

    在用于PDA(个人数字助理)中浏览器的设计中,根据无线网络延迟大、带宽窄的特点提出了一种混合TCP-UDP传输协议的方法来解决这一问题。本方法使用UDP[2]作为短会话时的传输层协议,而对于有大量数据需要传输时则...

    gev 是一个轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库.rar

    arp -包arp实现ARP协议,如RFC 826中所述。 buffstreams - 通过TCP流化协议缓冲区数据变得容易。 canopus - CoAP客户端/服务器实施(RFC 7252)。...gev - gev是基于Reactor模式的轻量级,快速,无阻塞的TCP网络库。

    一种按需确认的TCP协议改进算法 (2006年)

    本文提出了一种基于按需确认的TCP协议改进算法,该算法规定接收方根据发送方要求来对数据报文进行确认。同传统TCP相比,大大...仿真试验结果表明,该算法减少了TCP协议对网络系统的开销要求,并保持良好的传输效率。

    python抓取数据包提取五元组

    解析可以涉及解码网络协议头部(如IP头部、TCP/UDP头部)以及提取负载数据。 提取五元组:五元组是指网络通信中标识唯一连接的五个关键属性,包括源IP地址、目标IP地址、源端口号、目标端口号和传输协议(如TCP或...

    TCP_IP详解卷1

    《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输...

    论文研究-新的正交最小二乘方法.pdf

    由于DVB-RCS网络长传播延迟以及高误码率的特点,会造成所承载TCP业务的性能下降。传统的分层协议设计方式已经不适合这种动态变化的网络特点。采用跨层协议设计方式优化TCP协议性能。跨层设计方式结合了传输层上TCP...

    TCP-IP详解卷2:实现.part1

    本书适用于希望理解TCP/TP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。 目 录 译者序 前言 第1章 概述 1 1.1 引言 1 1.2 源代码表示 1 1.2.1 将拥塞窗口设置为1 1 ...

    TCP/IP详解part_2

    《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输...

Global site tag (gtag.js) - Google Analytics