TCP之连接的建立和终止

1. 连接的建立

TCP 连接建立的三次握手

如上图所示,TCP 连接的建立会发生如下述情形:

  1. 服务器必须准备好接受外来的连接。这通常通过调用 socket、bind 和 listen 这 3 个函数来完成,我们称之为被动打开(passive open)。
  2. 客户通过调用 connect 发起主动打开(active open)。这导致客户 TCP 发送一个 SYN(同步)分节,它告诉服务器客户端将在(待建立的)连接中发送的数据的初始序列号。通常 SYN 分节不携带数据,其所在的 IP 数据报只含有一个 IP 首部、一个 TCP 首部及可能有的 TCP 选项。
  3. 服务器必须确认(ACK)客户的 SYN,同时自己也得发送一个 SYN 分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器在单个分节中发送 SYN 和对客户 SYN 的 ACK(确认)。
  4. 客户必须确认服务器的 SYN。

TCP 连接的建立至少需要 3 个分组,因此称之为 TCP 的三次握手(threee-way handshake)。

1.1 TCP 选项

TCP 选项即 TCP 首部中的可选字段。每一个 SYN 可以含有多个 TCP 选项。下面是常用的 TCP 选项。

MSS 选项

发送 SYN 的 TCP 一端使用本选项通告对端它的最大分节大小(Maximum Segment Size)即 MSS,也就是它在本连接的每个 TCP 分节中愿意接受的最大数据量。发送端 TCP 使用接收端的 MSS 值作为所发送分节的最大大小。TCP_MAXSEG 套接字选项可以提取和设置这个 TCP 选项。

窗口规模选项

TCP 连接任何一端能够通告对端的最大窗口大小是 65535,因为在 TCP 首部中 窗口大小 的字段占 16bit。然而当今因特网上业已普及的高速网络连接或长延迟路径(卫星链路)要求有更大的窗口以获得尽可能大的吞吐量。这个新选项指定 TCP 首部中的通告窗口必须扩大(即左移)的位数(0~14),因此所提供的最大窗口接近 1GB(65535 * 2^14)。在一个 TCP 连接上使用窗口规模的前提是它的两个端系统必须都支持这个选项。可以使用 SO_RCVBUF 套接字选项影响这个 TCP 选项。

注:客户端的 TCP 可以作为主动打开的部分内容随它的 SYN 发送该选项,但是只在对端也随它的 SYN 发送该选项的前提下,它才能扩大自己窗口的规模。类似的,服务器的 TCP 只有接收到随客户端的 SYN 到达的该选项时,才能发送该选项。

时间戳选项

这个选项对于高速网络连接是必要的,它可以防止由失而复现的分组可能造成的数据损坏。它是一个较新的选项,也以类似于窗口规模选项的方式协商处理。作为网络编程人员,无需考虑这个选项。

1.2 三次握手抓包图示

C: SYN J

S: SYN K, ACK J+1

C: ACK K+1

2. 连接的终止

TCP 连接终止的四次挥手

  1. 某个应用进程首先调用 close,称该端执行主动关闭(active close)。该端的 TCP 于是发送一个 FIN 分节,表示数据发送完毕。
  2. 接收到这个 FIN 的对端执行被动关闭(passive close)。这个 FIN 由 TCP 确认。它的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程(放在已排队等候该应用进程接收的任何其他数据之后),因为 FIN 的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
  3. 一段时间后,接收到这个文件结束符的应用进程将调用 close 关闭它的套接字。这导致它的 TCP 也发送一个 FIN。
  4. 接收这个最终 FIN 的原始发送端 TCP(即执行主动关闭的那一端)确认这个 FIN。

2.1 四次挥手抓包图示

假设是服务器先执行 close,抓到的包如下所示。

S:FIN M

C: ACK M + 1

C: FIN N

S: ACK N + 1

原文地址:https://www.cnblogs.com/jimodetiantang/p/9092500.html

时间: 2024-10-01 00:52:27

TCP之连接的建立和终止的相关文章

20160402_TCP连接的建立、终止和状态转换

原题: 以下不属于tcp连接断开的状态是? TIME_WAIT FIN_WAIT_1 SYNC_SENT FIN_WAIT_2 答案:SYNC_SENT -------------------------------------------------------------------------------- 本题知识点:计算机网络 TCP连接的建立:     下述步骤建立一个TCP连接:    1.服务器必须准备好接受外来的连接.这通过调用socket.bind和listen函数来完成,称

10.TCP连接的建立与终止

1.建立连接协议 (1)请求端发送一个SYN段指明客户打算连接的服务器的端口,移机初始序号ISN.这个SYN段为报文段1. (2)服务器发回包含服务器的初始序号的SYN报文段作为应答.同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认.一个SYN将占用一个序号. (3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认. 这三个报文段完成连接的建立,这个过程也称为3次握手. 2.连接终止协议 终止一个连接需要进行4次握手,这是由TCP的半关闭造成的. 当

TCP连接的建立和终止

一.TCP连接建立(正常情况) 三次握手 (three-way handshake) 请求端发送一个SYN段指明客户端打算建立连接的服务器端口,以及初始序号 (ISN) 服务器发回包含服务器的初始序号的SYN报文段作为应答.同时,将确认序号设置为客户端的ISN加1以对客户的SYN报文段加以确认.一个SYN将占用一个序号. 客户端将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认. 发送第一个SYN字段的一端执行主动打开 (active open).接收SYN并发送下一个SYN的一

TCP连接的建立和终止。

为帮助大家理解connect,accept和close函数并使用netstat 调试TCP应用程序,我们必须了解如何建立和终止TCP连接以及TCP的状态转换图.这是一个通过加深了解底层网络协议以帮助我们编写网络程序的例子. 模拟三路握手: 下述步骤建立一个TCP连接 1.服务器必须准备好接受外来的连接.通过调用socket,bind 和 listen函数来完成,称为被动打开(passive open). 2.客户通过调用connect进行主动打开(active open).这引起客户TCP发送一

TCP 连接的建立和终止

三路握手 建立一个TCP连接时会发生下述情形. (1)服务器必须准备好接受外来的连接.这通常通过调用socket.bind和listen这3个函数来完成的,我们称之为被动打开. (2)客户通过调用connect发起主动打开.这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号.通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部.一个TCP首部及可能有的TCP选项. (3)服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN

TCP连接的建立与终止

我们通过一个例子来说说TCP连接的建立与断开: 在这个例子中,客户端发起连接,发送请求,服务端响应请求,然后客户端主动关闭连接. 建立连接的过程: 1.客户端发出段1,SYN表示连接请求,如图中所示,序号是1000,每发送一个数据字节,这个序号就要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,SYN和FIN位也要占一个序号,从第一段可以看出,这次发送的数据是0(即没有发送数据),但是由于SYN要占一位,因此下次发送数据要从1001开始.mss表示最大段尺寸,如果一个段

TCP/IP连接的建立

1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续请求,如有,作出响应.设客户进程运行在主机A中,他先向自己的TCP发出主动打开的命令,表明要向某个IP地址的某个端口建立运输连接,过程如下: 1)主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步比特SYN应置1,同时选择一个序号x,表明在后面传送数据时的第一个数据字节的序号是x. 2)主机B的TCP收到连

【网络基础】03、TCP传输连接的建立与释放

一.TCP的传输连接管理的三个阶段  IP协议的作用范围:提供主机之间的逻辑通信 TCP和UDP协议的作用范围:提供进程之间的逻辑通信 TCP (Transmission Control Protocol)   传输控制协议 UDP (User Datagram Protocol )      用户数据报协议 当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道. 当运输层采用无连接的UDP协议时,这种逻辑通信信道是

TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)

建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送数据的初始序列号. 3.客户确认服务器的SYN. 终止连接 TCP终止一个连接需要4个分节 1.某个应用进程首先调用close,我们称该端执行主动关闭.该端的TCP于是发送一个FIN分节,表示数据发送完毕. 2.接受到这个FIN的对端执行被动关闭.这个F