一.HTTP的超时和Keep Alive HTTP Keepalive 机制是http 1.1中增加的一个功能. 在HTTP 1.0中,客户端每发起一个http 请求,等收到接收方的应答之后就断开TCP.下一个请求再需要发送时,要重新建立TCP连接. 在HTTP 1.1中,客户端每发起一个http请求之后,服务器可以通过keep alive的方式告知客户端,同时保持之前建立的TCP连接.下一个http请求和应答从而能够避免再次建连,通过已有连接继续发送. HTTP层的超时设置实例代码如下,set…
TCP是可靠传输.可靠之一体现在收到数据后,返回去一个确认.但是不能完全避免的是,数据和确认都可能丢失.解决这个办法就是,提供一个发送的重传定时器:如果定时器溢出时还没收到确认,它就重传这个报文段. 想法是完美的,关键之处在于超时和重传的策略,即怎么决定超时间隔和如何确定重传的频率. 书中举了一个简单的超时重传例子: 如图: 比如A往B传,传了一部分数据后,把B的网线拔了(前边讲过,如果不传数据的话,双方没法知道这个连接已经断了).然后开始A再给B发数据,此时tcpdump出来发现,连续重传了一…
作为TCP的重头戏,本章节涉及了许多关于计算方面的内容,使用了大量的例子来指明一些观点. 我使用的理解方法是:通过别人的博客,以及实例结合进行理解,不然会很吃力. 21.1 引言 reliable TCP提供可靠的运输层,它使用的方法之一就是确认从另外一端收到的数据. 也就是说通过ACK,或者说 TCP自时钟,来保证这一特性. TCP通过在发送的时候,设置一个定时器来解决这些问题.如果当定时器溢出还没有收到确认,就重传数据,对于任何的实现而言,关键就在超时和重传的策略. 四个不同的定时器 重传定…
最近需要写一个linux下的通信程序, 通信模块用的是Qt的QTcpSocket. 最后程序需要增加一个断网检测, 在windows下调试没问题, 拔网线, 断网口都能马上检测到, 但到了部署到linux下就需要等10多分钟才能得到断网的信号. 调试+google后, 定位问题应该不是Qt的问题, 而是windows和linux下对tcp超时的设置不同导致的, 也找到一些解决方案, 大致可以归纳为两类: 直接修改系统参数的(链接) echo "6" > /proc/sys/net…
在TCP连接中假设发送方一开始便向网络发送多个报文段,直到达到接收方通告的窗口大小为止.当发送方和接收方处于同一个区域网段时,这种方式是可以的.但是如果发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现问题. 一些中间路由器必须缓存分组,并有可能耗尽存储器空间. 现在,TCP需要支持被称为“慢启动”的算法.该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作. 慢启动发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记做cwnd…
超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止. 1.超时 超时时间的计算是超时的核心部分,TCP要求这个算法能大致估计出当前的网络状况,虽然这确实很困难.要求精确的原因有两个:(1)定时长久会造成网络利用率不高.(2)定时太短会造成多次重传,使得网络阻塞.所以,书中给出了一套经验公式,和其他的保证计时器准确的措施. 1.1.递推公式概说 最早的TCP曾经用了…
RTT:往返时间:  RTO:Retransmission Timeout即超时重传时间: 关键点在于:超时和重传间隔的策略,即怎样确定超时间隔和重传间隔: TCP中的四个定时器:2MSL定时器:重传定时器:坚持定时器:保活定时器: 首先是如何得到RTO值:(假设已经能测量到RTT值情况下) RTO值是依赖RTT值来确定的:而鉴于网络环境的不稳定性,RTT总是变化的, RTT = 0.1*M  + 0.9*R;  M:当前测试的RTT值,R:历史RTT的值: RTO=@RTT:    @:一般取…
TCP提供可靠的运输层.它使用的方法之一就是确认从另一端收到的数据.但数据和确认都有可能会丢失.TCP通过在发送时设置一个定时器来解决这种问题.如果当定时器溢出时还没有收到确认,它就重传该数据. 对于实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传频率. TCP管理4种不同的定时器: 重传定时器:当希望收到另一端的确认时使用. 坚持定时器:使窗口信息保持不断流动,即使另一端关闭了其接收窗口. 保活定时器:检测一个空闲连接的另一端何时崩溃或重启. 2MSL定时器:测量一个…
21.1 引言 可靠性的保证之一就是超时重传 前面两个超时重传的例子 1)  ICMP端口不能到达时,TFTP客户使用UDP实现了一个简单的超时和重传机制,假定5s是一个适当是时间间隔,并每隔5s进行重传 2)  在向一个不存在的主机发送ARP的 例子中,可看到当TCP试图建立连接的时候,在每个重传之间使用一个较长的时延来重传SYN 对于每个连接,TCP管理4个不同的定时器: 1)  重传定时器使用于当希望收到另一端的确认 2)  坚持(persist)定时器使窗口大小信息保持不断流动,即使另一…
1.基本概念 TCP之所以能够安全的将数据在传输中的安全性,是因为它每次给对方发送数据,都会等待对方给个确认,当长时间收不到这个确认,发送端就会重发这个数据. 2.超时时间的測量 要測超时时间,TCP必须要发送一个特别序号的字节和接收包括该字节的确认之间的RTT,可是,确认本身就是有延时的,所以一般有一种简单的測量超时时间的公式 RTO = RB 当中R为随RTT变化而变化的平滑因子 3.拥塞避免算法 前边的博客有写道,当发送端使用慢启动算法时,因为其发送的数据段呈指数增长,因此也非常easy达…
一.引言 对于每个TCP连接,TCP管理4个不同的定时器 重传定时器用于当希望收到另一端的确认. 坚持 (persist) 定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口. 保活 (keepalive) 定时器可检测到一个空闲连接的另一端何时崩溃或重启. 2MSL定时器测量一个连接处于TIME_WAIT状态的时间. 二.往返时间测量 TCP超时与重传中最重要的一部分是对一个给定连接,如何测量往返时间 (RTT).由于路由器和网络流量均会变化,因此我们认为这个时间会经常变化,TCP应…
TCP超时和重传的基础是怎样根据给定连接RTT设置RTO,若TCP先于RTT开始重传,可能会在网络中引入不必要的重复数据,反之,若延迟至远大于RTT的间隔发送重传数据,整体网络利用率会随之下降.由于RTT的测量较为复杂,根据路由和网络资源的不同,它会随时间而改变.TCP必须跟踪这些变化并适时做出调整来维持好的性能. TCP在收到数据后会返回确认信息,因此可在该信息中携带一个字节的数据来测量传输该确认信息所需的时间.每个此类的测量结果称为RTT样本.TCP首先需要根据一段时间内的样本值建立好的估算…
TCP提供可靠的运输层. 它使用的方法之中的一个就是确认从还有一端收到的数据.但数据和确认都有可能会丢失.TCP通过在发送时设置一个定时器来解决这样的问题.假设当定时器溢出时还没有收到确认,它就重传该数据. 对于实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和怎样确定重传频率. TCP管理4种不同的定时器: 重传定时器:当希望收到还有一端的确认时使用. 坚持定时器:使窗体信息保持不断流动,即使还有一端关闭了其接收窗体. 保活定时器:检測一个空暇连接的还有一端何时崩溃或重新启动. 2…
c.SetReadDeadline(time.Now()) if _, err := c.Read(one); err == io.EOF { l.Printf(logger.LevelDebug, "%s detected closed LAN connection", id) c.Close() c = nil } else { var zero time.Time c.SetReadDeadline(time.Now().Add(10 * time.Millisecond)) }…
rwnd(窗口,代表接收端的处理能力).cwnd(拥塞窗口,从发送端看当前网络整体承载能力).ssthresh(快速增长切换成慢速增长的界限值) 1.慢启动,是指数增长(对面确认多少个包,就增加多少),并不慢,只是它的起点低,所以慢启动阶段仍需要时间.实际是起点低(1),快增长阶段,每一轮将当前拥塞窗口翻倍.2.拥塞避免,引入了ssthresh(这个是个变量,初始往往是最大值65536,随后续拥塞发生不断调整),控制慢启动阶段区间是在窗口超过ssthresh之后,就开始线性增长(是让cwnd缓慢…
dubbo启动时默认有重试机制和超时机制.超时机制的规则是如果在一定的时间内,provider没有返回,则认为本次调用失败,重试机制在出现调用失败时,会再次调用.如果在配置的调用次数内都失败,则认为此次请求异常,抛出异常. 如果出现超时,通常是业务处理太慢,可在服务提供方执行:jstack PID > jstack.log 分析线程都卡在哪个方法调用上,这里就是慢的原因.如果不能调优性能,请将timeout设大. 某些业务场景下,如果不注意配置超时和重试,可能会引起一些异常. >>超时设…
要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作.是的,就跟常见的文件操作一样,只要写过就一定知道. 对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了.对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失.最后,我们还知道,在建立连接前,必须知道对方的IP地址和…
一 超时时间配置 如果在一个微服务当中对同一个接口同时配置了Hystrix与ribbon两个超时时间,则在接口调用的时候,两个计时器会同时读秒. 比如,访问一个接口需要2秒,你的ribbon配置的超时时间是3秒,Hystrix配置的超时时间是1秒. 在这种情况下,程序会回调进入到Hystrix的fallback方法,因为在访问接口的时候,Hystrix与ribbon的两个计时器同时计时,而在Hystrix计时器结束的时候自动停止了访问进行回调,进入fallback方法. 如果没有配置Hystri…
往返时间的估计与超时   TCP采用超时/重传机制来处理报文段的丢失问题.尽管这在概念上面很简单,但是在实际中还是会产生很多微妙的问题.最明显还是超时时间间隔的设置.很显然,这个时间间隔肯定会大于RTT时间,但是具体为多大呢?如何估计最开始的往返时间呢?下面将介绍这些问题的一些解决办法. 估计往返时间   报文段的样本RTT(表示为SampleRTT)为某报文段发出到对该报文段的确认被收到之间的时间量大多数TCP的实现仅在某个时刻做一次SampleRTT测量,而不是为每个报文段测量一个Sampl…
TCP协议为了提供可靠的数据传输服务,会启动数据重传来解决下层网络层(IP)可能出现的数据包丢失. 超时重传介绍 TCP重传由两套独立机制来完成重传,基于时间的超时重传(RTO,TCP发送数据时会设置一个计时器,若至计时器超时仍未收到数据确认信息,则会引发相应的超时和计时器重传操作),基于确认信息的构成(通常在没发生延时的情况下,若TCP累积确认无法返回新的ACK,或者当ACK包含的选择确认信息(SACK)表明出现失序报文段时,快速重传会推断出现丢包,这时候发送端认为接收端可能出现数据丢失时,需…
Linux 系统默认的建立 TCP 连接的超时时间为 127 秒,对于许多客户端来说,这个时间都太长了, 特别是当这个客户端实际上是一个服务的时候,更希望能够尽早失败,以便能够选择其它的可用服务重新尝试. socket 是 Linux 下实现的传输控制层协议,包括 TCP 和 UDP,一个 socket 端点由 IP 和端口对来唯一标识: 如果开启了地址复用,那么可以进一步由协议,IP 和端口来唯一标识. 系统调用 connect(2) 则是用来尝试建立 socket 连接(TCP)或者和远程协…
Linux 建立 TCP 连接的超时时间分析 tags: linux | network Linux 系统默认的建立 TCP 连接的超时时间为 127 秒,对于许多客户端来说,这个时间都太长了, 特别是当这个客户端实际上是一个服务的时候,更希望能够尽早失败,以便能够选择其它的可用服务重新尝试. socket 是 Linux 下实现的传输控制层协议,包括 TCP 和 UDP,一个 socket 端点由 IP 和端口对来唯一标识: 如果开启了地址复用,那么可以进一步由协议,IP 和端口来唯一标识.…
在前面我们概述了TCP的超时重传之后我们简单的看一下tcp超时重传的示例.首先简单的描述一下测试过程 1.设置/proc/sys/net/ipv4/tcp_early_retrans为2,关掉TLP功能(后面内容介绍TLP).设置/proc/sys/net/ipv4/tcp_retries2为8,减少重传次数,这样方便wireshark抓包演示.同时设置/proc/sys/net/ipv4/tcp_discard_on_port为9877,以让client可以精确的控制发出的TCP报文,而不受到…
TCP Retransmission 连接超时 kame 2019/3/17 33 TCP 记一次TCP 连接超时 背景 用户反馈 >> 有出现支付超时.页面问题 (部分情况会出现) 分析 检查最近是否有上线导致 (并没有上线) 排除 对接第三方平台 API接口是否有上线 (没有) 排除 是否网络延迟导致 (从前端 到后端 内网检测没问题ICMP包),检查从外网到第三方接口(ICMP没有问题) 排除网络问题导致 没有办法只能上tcpdump 抓包 (抓取双方服务器 网络通讯数据包) 发现 IC…
1.前言 很多人认为,TCP协议自身先天就有KeepAlive机制,为何基于它的通讯链接,仍然需要在应用层实现额外的心跳保活?本文将从移动端IM实践的角度告诉你,即使使用的是TCP协议,应用层的心跳保活仍旧必不可少. 有关TCP协议的权威理论介绍,请参见<TCP/IP详解>这本书. 说明:本文引用了网易云信项望烽的技术文章,感谢分享. (本文同步发布于:http://www.52im.net/thread-33-1-1.html) 2.学习交流 - 即时通讯开发交流群: 215891622 […
免责声明:和往常一样,此文章的观点都属于‘No Bugs’Hare(译注:一个网站) ,也许不一定和翻译者或者Overload编辑的意见一致.同时,翻译者从Lapine翻译到英语也具有一定的难度.除此之外,翻译者与Overload对于从阅读此文章所带来的后果或不作为明确不负任何责任. 原文地址:Once Again on TCP vs UDP 讨论TCP与UDP的好与坏几乎与Linux和windows的争辩有着一样长的历史.我一直支持一个观点,也就是:UDP与TCP都有各自的适用场景(比如:[N…
Yves Pitsch Azure 网络首席项目经理 我们很高兴地宣布,Azure负载平衡器现在可以为云服务和虚拟机提供可配置的 TCP空闲超时支持.要配置此功能,可以使用服务管理 API.PowerShell或服务模型 概述 在默认配置下,Azure 分钟. 这意味着,如果 tcp 或 http 会话不活动的时间超过这个超时值,客户端和服务之间的连接将无法保证是否可以维持下去. 当连接关闭时,客户端应用程序会显示如下错误消息"The underlyingconnection was close…
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不能理解Web短连接(就是最常见的HTTP通信了)跟长连接(主要指TCP.UDP协议实现的socket通信,当然HTML5里的Websocket协议也是长连接)的区别,导致写即时通讯这类系统代码时往往找不到最佳实践,搞的一脸蒙逼. 本篇我们先简单了解一下 TCP/IP,然后通过实现一个 echo 服务…
原因 TCP是一种有连接的协议,但是这个连接并不是指有一条实际的电路,而是一种虚拟的电路.TCP的建立连接和断开连接都是通过发送数据实现的,也就是我们常说的三次握手.四次挥手.TCP两端保存了一种数据的状态,就代表这种连接,TCP两端之间的路由设备只是将数据转发到目的地,并不知道这些数据实际代表了什么含义,也并没有在其中保存任何的状态信息,也就是说中间的路由设备没有什么连接的概念,只是将数据转发到目的地,只有数据的发送者和接受者两端真正的知道传输的数据代表着一条连接. 但是这就说明了一点,如果不…
从长链接说起 TCP是长链接的,也就是说连接建立后,及时数年没有通信连接仍然存在.这样做的好处是:免去了DNS解析的时间,连接建立等时间,大大加快了请求的速度,同时也有利于接受服务器的实时消息.但前提是连接可用. TCP的keepalive机制 服务器为了探测对端是否还活着,于是每隔两小时发送一个keepalive报文(携带一个字节的Data).个人觉得保活机制也就是在局域网中用用,路由器表项每个几分钟老化一次,连接早就不存在了. 保活机制的缺点 1.网关设备由于保活问题,导致其连接表满,无法新…