[TCP/IP] TCP建立与终止
Posted immjc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[TCP/IP] TCP建立与终止相关的知识,希望对你有一定的参考价值。
三次握手与四次挥手
TCP提供一种可靠、面向连接、字节流、传输层的服务。TCP是一种面向连接的单播协议。
一个TCP连接由一个4元组构成,它们分别是源IP地址和源端口号,目的IP地址和目的端口号。更准确的说,一个TCP连接是由一对端点或套接字构成,其中通信的每一端都由一对(IP地址,端口号)所唯一标识。
一个TCP连接通常分为3个阶段:启动、数据传输和退出。
为了建立一个TCP连接,需要完成以下步骤:
1.客户端发送一个SYN报文段,并指明自己想要连接的端口号和它的客户端初始序列号(记为ISN(c))。通常客户端还会借此发送1个或多个选项。客户端发送的这个SYN报文段称作段1。
2.服务器也发送自己的SYN报文段作为响应,并包含了它的初始序列号(记为ISN(s)),该段称为段2。此外,为了确认客户端的SYN,服务器将包含的ISN(c)数值加1后作为返回的ACK数值。因此,每发送一个SYN,序列号都会自动加1。这样如果出现丢失的情况,该SYN段将会重传。
3.为了确认服务器的SYN,客户端将ISN(s)的值加1后作为返回的ACK数值。这称为段3。
通过发送上述3个报文段就能够完成一个TCP连接的建立。它们也常称作三次握手。
三次握手的目的不仅在于让通信双方了解一个连接正在建立,还在于利用数据包的选项来承载特殊的信息,交换初始序列号。
TCP协议规定通过发送一个FIN段来发起关闭操作。只有当连接双方都完成关闭操作后,才构成一个完整关闭:
1.连接的主动关闭者发送一个FIN段指明接收者希望看到的自己当前序列号(K)。FIN段还包含了一个ACK段用于确认对方最近一个发来的数据(L)。
2.连接的被动关闭者将K的数值加1作为响应的ACK值,以表面它以及成功接收到主动关闭者发送的FIN。此时,上层的应用程序会被告知连接的另一端已经提出了关闭的请求,通常,这将导致应用程序发起自己的关闭操作。接着,被动关闭者将身份变为主动关闭者,并发送自己的FIN。该报文段的序列号为L。
3.为了完成连续的关闭,最后发送的报文段还包含一个ACK用于确认上一个FIN。值得注意的是,如果出现FIN丢失的情况,那么发送方将重新传输直到接收到一个ACK确认为止。
综上所述,建立一个TCP连接需要3个报文段,而关闭一个TCP连接需要4个报文段。
以上是关于[TCP/IP] TCP建立与终止的主要内容,如果未能解决你的问题,请参考以下文章
TCP/IP传输层协议实现 - TCP连接的建立与终止(lwip)