TCP/IP 技术原理及其F5 TCP Profile参数说明
神州数码全及应用增值事业本部售前工程师:江毅
目录
前言 (2)
TCP传输控制协议 (2)
TCP概念 (2)
tcp ip协议规定TCP的连接和终止 (3)
TCP的半关闭 (5)
复位报文段 (6)
异常终止一个连接 (6)
最大报文段长度(MSS) (7)
TCP状态迁移 (8)
open过程中的状态: (9)
断开连接时状态: (10)
TIME_WAIT状态详述 (10)
TCP 服务器的设计 (10)
呼入连接请求队列 (11)
TCP的交互数据流 (13)
交互式输入 (14)
经受时延的确认(delay ack) (14)
Nagle算法 (15)
TCP的成块数据流 (16)
滑动窗口 (16)
慢启动(Slow Start) (17)
PUSH标志 (18)
TCP拥塞控制机制 (18)
慢启动 (20)
拥塞避免算法 (20)
快速重传 (22)
快速恢复 (23)
Selective Acks (24)
TCP拥塞控制的其他算法 (24)
TCP的几个常用定时器 (24)
坚持( p e r s i s t )定时器 (25)
保活( k e e p a l i v e )定时器 (26)
TCP的一些性能 (27)
1、路径MTU发现: (27)
2、长肥管道 (27)
3、窗口扩大选项: (27)
4、时间戳选项: (27)
TCP Profile参数描述 (28)
参考文献 (34)
前言
本文档从TCP的原理及其实现讲起(配合图例),该文档会重点介绍TCP的一些重要的机制,从而让大
家了解TCP Profile里面的选项的含义。本文档主要参考TCP/IP卷一里TCP的内容,如果大家不想局限于只知道TCP三次握手的机制,有兴趣可以仔细研究一下,必定会受益匪浅。
在此感谢迷总,一次和迷总聊天的过程中说起来TCP这个协议,于是乎metoo同学建议我认真学习TCP然后总结一下F5 TCP Profile的参数。鉴于metoo的权威性,心里有点小压力,不能马虎对待啊。如果metoo不建议我写,那么我估计我也会写,但是就不知什么时候能写完了。哈哈,非常感谢迷总。
其实这里面的内容大多来自TCP/IP卷一里TCP的内容,我把TCP的内容整理提炼了一下,把我自认为值得了解的知识点整理出来了,可能大家看的时侯有些知识点会迷惑,那么赶紧翻看书认真读一下吧:)
TCP传输控制协议
TCP概念
这个是老生常谈的概念了,相信大家都很了解了,但是作为一个完成的文档而言还是很有必要在介绍一下的。TCP是面向连接的协议,保证数据的有效传输。T C P将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据;T C P提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。由T C P传递给I P的信息单位称为报文段或段(s e g m e n t)。
• 当T C P发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
• 当T C P收到发自T C P连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒,这就是我们常说的Delay Ack。
• T C P将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,T C P将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。
• 既然T C P报文段作为I P数据报来传输,而I P数据报的到达可能会失序,因此T C P报
文段的到达也可能会失序。如果必要,T C P将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
• 既然I P数据报会发生重复,T C P的接收端必须丢弃重复的数据。
• T C P还能提供流量控制。T C P连接的每一方都有固定大小的缓冲空间。T C P的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
TCP的连接和终止
T C P是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。即我们所说的三次握手。如下示例,我们使用telnet来和服务器建立连接,然后在关闭这个连接。注意下图的4标志比特,对前三个相信大家已经了解了,后文会介绍PUSH这个标志的用途。
对于T C P段,每个输出行开始按如下格式显示:源> 目的: 标志。1,2,3是建立一个连接的3次握手,4,5,6,7是关闭连接的4此握手。在这个例子中没有数据的传输。
每个T C P段都包含源端和目的端的端口号,用于寻发端和收端应用进程。这两个值加上I P首部中的源端I P地址和目的端I P地址唯一确定一个T C P连接。一个I P地址和一个端口号也称为一个插口(s o c k e t),插口对(s o c k e t p a i r)(包含客户I P地址、客户端口号、服务器I P地址和服务器端口号的四元组)可唯一确定互联网络中每个T C P连接的双方。
1.当建立一个新的连接时,S Y N标志变1。如报文1所示
2.既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。注意这里是ack序号的值是确认下一个所期望收到的数据包。因此,确认序号应当是上次已成功收到数据字节序号加1。
NOTE:在收到数据的一端在对发送端进行确认时,如果是确认对方的SYN包(这个包不包含任何数据即收到的数据时0字节),那么回复的ACK是当前收到的序号+1;如果是确认对方发送的数据包(包含数据的包),那么回复的ACK则是当前收到的数据字节+下一个数据包字节(即MSS)
第二个数据包返回的是自己到对端的SYN和给对发送方的ack=1415531521+1=1415531522,即希望下次收到的数据。第三个数据包返回的是对第二个数据包的确认ack=1823083521+1=182308522,即希望下次收到的数据。
建立一个连接需要三次握手,而终止一个连接要经过4次握手。这由T C P的半关闭(h a l f -c l o s e)
造成的。既然一个T C P连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个F I N来终止这个方向连接。当一端收到一个F I N,它必须通知应用层另一端几经终止了那个方向的数据传送。发送F I N通常是应用层进行关闭的结果。
连接通常是由客户端发起的,这样第一个S Y N从客户传到服务器。每一端都能主动关闭这个连接(即首先发送F I N)。然而,一般由客户端决定何时终止连接,因为客户进程通常由用户交互控制,用户会键入诸如“q u i t”一样的命令来终止进程
连接建立的超时
有很多情况导致无法建立连接。一种情况是服务器主机没有处于正常状态。为了模拟这种情况,我们断开服务器主机的电缆线,然后向它发出t e l n e t命令。
TCP的半关闭
T C P提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓的半闭。正如我们早些时候提到的只有很少的应用程序使用它。为了使用这个特性,编程接口必须为应用程序提供一
种方式来说明“我已经完成了数据传送,因此发送一个文件结束(F I N)给另一端,但我还想接收另一端发来的数据,直到它给我发来文件结束(F I N)”。图例显示了一个半关闭的典型例子。让左方的客户端开始半关闭,当然也可以由另一端开始。初始端发出的F I N,接着是另一端对这个F I N的A C K报文段。因为接收半关闭的一方仍能发送数据。我们只显示一个数据报文段和一个A C K报文段。当收到半关闭的一端在完成它的数据传送后,将发送一个F I N关闭这个方向的连接,这将传送一个文件结束符给发起这个半关闭的应用进程。当对第二个F I N进行确认后,这个连接便彻底关闭了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论