`
zhangyafei_kimi
  • 浏览: 265297 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

TCP协议里的时间

阅读更多
一、建立连接

在发送SYN报文段后,如果在75秒没有收到相应相应,连接建立将中止。这个时间也就是阻塞connect系统调用的超时时间。

二、保活

SO_KEEPALIVE选项保持连接检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。设置该选项后,如果2小时内在此套接口的任一方向都没有数据交换,TCP就自动给对方 发一个保持存活探测分节(keepalive probe)。这是一个对方必须响应的TCP分节.它会导致以下三种情况:对方接收一切正常:以期望的ACK响应。2小时后,TCP将发出另一个探测分节。对方已崩溃且已重新启动:以RST响应。套接口的待处理错误被置为ECONNRESET,套接口本身则被关闭。对方无任何响应:源自berkeley 的TCP发送另外8个探测分节,相隔75秒一个,试图得到一个响应。在发出第一个探测分节11分钟 15秒后若仍无响应就放弃。套接口的待处理错误被置为ETIMEOUT,套接口本身则被关闭。如ICMP错误是“host unreachable(主机不可达)”,说明对方主机并没有崩溃,但是不可达,这种情况下待处理错误被置为 EHOSTUNREACH。

注意这里面有三个数字:

1.开始首次KeepAlive探测前的TCP空闭时间,2小时

2.两次KeepAlive探测间的时间间隔,75秒

3.判定断开前的KeepAlive探测次数,10次

也就是说,总共需要2小时+75秒*10次 = 7950秒

三、重传

重传定时器在发送数据时设定,超时值是计算出来的,取决于RTT和报文已被重传次数(并没有包括在以下公式内,但是BSD的实现确实用到了这个数据)。

RTT估计其,R是RTT,M是测量到的RTT,a推荐值为0.9

R = a * R + (1-a) * M

重传超时时间RTO, b推荐值为2

RTO = R * b

例外:快速重传,收到3个重复的ACK会立即重传

四、延时确认,捎带确认

TCP协议栈收到数据后并不立即发送ACK,而是等待200ms(推荐值,但是这个值不能高于500ms),如果在这段时间有用户数据需要发送则一同随着这个ACK发送。

五、FIN_WAIT_2定时器

某个连接准备关闭连接时,调用close函数,发送FIN报文,状态从SYN_RCVD迁移到FIN_WAIT_1,收到这个FIN的ACK后,迁移到FIN_WAIT_2状态。

为了防止对端一直不发送FIN,在等待10分钟后再等待75秒(定时器确实被设置了两次,所以分开说),超时,连接关闭。

六、2MSL定时器

MSL是最大报文段生存时间,RFC1122建议是2分钟,但BSD传统实现采用了30秒。当连接转移到TIME_WAIT状态时,即连接主动关闭时,定时器启动,为两倍的MSL。定时器超时,这时才能重新使用之前连接使用的端口号。这也是为了避免一些意想不到的边界情况,TCPIP详解第一卷的18.6.1给出了一个极端的例子。

七、平静时间

对于来自某个连接的较早替身的迟到报文段, 2 M S L等待可防止将它解释成使用相同插口对的新连接的一部分。但这只有在处于2 M S L等待连接中的主机处于正常工作状态时才有效。

如果使用处于2 M S L等待端口的主机出现故障,它会在M S L秒内重新启动,并立即使用故障前仍处于2 M S L的插口对来建立一个新的连接吗?如果是这样,在故障前从这个连接发出而迟到的报文段会被错误地当作属于重启后新连接的报文段。无论如何选择重启后新连接的初始序号,都会发生这种情况。

为了防止这种情况,RFC 793指出TCP在重启动后的MSL秒内不能建立任何连接。这就称为平静时间(quiet time)。

八、SO_LINGER的时间

这个选项会影响close的行为。如果linger结构中的l_onoff域设为非零,并设置了零超时间隔,则close不被阻塞立即执行,不论是否有排队数据未发送或未被确认。这种关闭方式会发送RST报文段,且丢失了未发送的数据。在远端的读调用将以ECONNRESET出错。

若设置了SO_LINGER并确定了非零的超时间隔,则closes调用阻塞进程,直到所剩数据发送完毕或超时。这种关闭称为“优雅的”关闭。如果套接口置为非阻塞且SO_LINGER设为非零超时,则close调用将以EWOULDBLOCK错误返回。

若在一个流类套接口上设置了SO_DONTLINGER(等效于SO_LINGER中将linger结构的l_onoff域设为零),则close调用立即返回。但是,如果可能,排队的数据将在套接口关闭前发送。
分享到:
评论

相关推荐

    TCP协议分析网络实验报告

    ### TCP协议分析网络实验报告知识点总结 #### 一、实验背景及目的 本实验报告针对TCP协议进行深入分析,旨在帮助学生理解TCP协议的工作原理及其在网络通信中的作用。实验通过实际操作的方式,让学生掌握如何使用...

    TCP协议优化思路

    例如,在相同的网络环境下,TCP协议优化能够减少23%的访问时间,这极大地改善了用户体验。 - **流媒体传输**:TCP协议优化还可以提高流媒体服务的质量。根据统计数据显示,在不同的时间段内,TCP协议优化后,流媒体...

    TCP协议实验1

    【TCP协议实验1】实验旨在帮助学生深入理解TCP协议的工作原理,掌握其连接状态控制、可靠传输机制,并涉及拥塞控制算法。实验的核心是实现TCP协议的状态机,特别是客户端的“停-等”模式,以及Socket接口的编程。TCP...

    TCP协议详解及实战解析.pdf

    TCP协议确保了数据的完整性和有序性,是面向连接的,意味着在数据交换前需要先建立连接,而在数据传输完成后需要断开连接。 TCP连接的建立过程称为三次握手(Three-Way Handshake)。首先,客户端发送一个带有SYN...

    TCP自定义通讯协议参考

    TCP自定义通讯协议是一种基于TCP协议的通信框架,它利用非阻塞异步通信机制,实现了客户端和服务端之间的双向信息交换。以下是对该协议的详细解释: 1. 机制: - TCP协议基础:TCP(Transmission Control Protocol...

    15. 传输层协议之TCP思维导图

    TCP/IP 传输层协议详解 TCP(Transmission Control Protocol)是 TCP/IP 协议族中的一员,负责确保数据的可靠传输。下面是对 TCP 协议的详细解释和思维导图: TCP 协议的基本概念 * 连接建立:客户端和服务器端...

    tcp协议的视频软件

    在本案例中,"tcp协议的视频软件"指的是使用TCP协议进行数据传输的视频软件。 1. **TCP协议基础** - **面向连接**:在数据传输前,TCP会建立连接,通过三次握手(SYN, SYN+ACK, ACK)确保双方都有能力接收和发送...

    TCPIP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议

    第2章 T/TCP协议 第3章 T/TCP使用举例 …… 第二部分 TCP的其他应用 第13章 HTTP;超文本传送协议 第14章 在HTTP服务器上找到的分组 第15章 NNTP:网络新闻传送协议 第三部分 Unix 域协议 第16章 Unix域协议:概述 ...

    TCP——实现时间协议实验三

    通过这个实验,我们不仅掌握了TCP协议的基本用法,还学习了如何构建客户端-服务器通信模型,以及如何设计和实现一个实时更新的图形用户界面。此外,还能了解到网络延迟和同步问题,以及如何优化时间同步的精度。这是...

    用Java实现对IP/TCP协议数据包的拦截和分析

    在IT领域,网络通信是核心部分之一,而IP/TCP协议是互联网协议栈中的关键层次。本文将深入探讨如何利用Java编程语言实现对IP和TCP协议数据包的拦截与分析,以便获取IP地址的详细信息。 首先,我们需要理解IP...

    loadrunner测试TCP协议服务器性能

    【TCP协议与LoadRunner简介】 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,是互联网上应用最广泛的一种网络协议。它为两台机器之间的数据通信提供了规则和标准,...

    TCP协议基础知识及图示

    TCP 协议基础知识及图示 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它是 Internet 协议族中的一个核心协议,用于保证数据的可靠传输。 TCP 协议基础...

    TCP协议解码详解

    * TCP 重传:在 TCP 的传输过程中,如果在重传超时时间内没有收到接收方主机对某数据包的确认回复,发送方主机就认为此数据包丢失,并再次发送这个数据包给接收方。 * TCP 延迟确认:TCP 并不总是在接收到数据后立即...

    C++实现的简化版的TCP协议

    简化版的TCP协议虽然不包括一些高级特性,如流量控制和拥塞控制,但依然能够展示TCP的基本工作原理和关键机制。 首先,TCP协议的核心概念之一是**报文段**。在我们的简化版中,报文段的格式与标准TCP保持一致,包含...

Global site tag (gtag.js) - Google Analytics