TCP链接的建立与终止

包含 connect、accept和close三个函数,并使用netstart程序调试TCP应用。

建立TCP连接:需要三个分节

1、服务器必须准备好接受外来的链接,可调用socket、bind和listen三个函数完成,被动打开;

2、客户调用connect发起主动打开。客户TCP发送一个SYN(同步)分节,告诉服务器客户将在连接中发送的数据的初始序列号。通常SYN分节不携带数据,该IP数据报只包含有一个IP首部、一个TCP首部及可能有的TCP选项。

3、服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,含有服务器将在同一个连接中发送的数据的初始序列号。服务器在单个分节中发送SYN和对客户的SYN的确认(ACK).

4、客户必须确认服务器的SYN。

每一个SYN可含有多个TCP选项,常用:

1、MSS选项。以太网上IPV4典型值1460。发送SYN的TCP一端告知对端他的最大分节大小即MSS,他在本链接的每个TCP分解中愿意接受的最大数据量。发送端TCP使用接收端的MSS值作为所发送分节的最大大小。TCP_MAXSEG套接字选项提取和设置该TCP选项。

2、窗口规模选项。使用SO_RCVBUF套接字选项影响该TCP选项。

3、时间戳选项。可防止由失而复得的分组可能造成的数据损坏。

TCP终止连接:需要4个分节。(橙色部分,总觉得书上说得太绕有歧义或是我自己理解得不好)

1、某应用进程首先调用close,该端主动关闭。该端TCP发送一FIN分节,表示数据发送完毕。

2、接受到该FIN的对端被动关闭。该FIN由TCP确认。它的接受也作为一个文件结束符(end-of-file)传递给应用进程(放在一排队等候该应用进程接受的任何其他数据之后),因为FIN的接受意味着接收端在相应链接上再无额外数据可接受。

3、一段时间后,接收到这个文件结束符的应用进程调用close关闭它的套接字。这将导致他的TCP也发送一个FIN。

4、接受该最终FIN的元发送端TCP确认该FIN。

通常四步,因为某些情形下,步骤一的FIN随数据一起发送;步骤二和步骤三发送的分解都出自执行被动反比的那一段,有可能合并成一个分节。

补充说明:

步骤2-3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,即半关闭。

当套接字关闭时,所在端TCP各自发送一个FIN,这是由应用进程调用close发生的。当一个Unix进程无论自愿(exit或main返回)还是非自愿(收到终止本进程信号)终止时,所有打开的描述符都被关闭,这也导致任然打开的任何TCP链接上发出一个FIN。

无论客户还是服务器,任何一段都可以执行主动关闭。通常情况是客户执行主动关闭。但某些协议,譬如HTTO/1.0由服务器执行主动关闭。

TCP状态转换图:tcp为一个链接定义了11种状态。

观察分组:

注意:服务器对客户请求的确认是伴随其应答发送的,该做法为捎带(piggybacking),他通常在服务器处理请求并产生应答的时间少于200ms时发生。如果耗时更长,经先确认再应答。

TIME_WAIT状态存在的两个理由:

1、可靠地实现TCP全双工连接的终止;假设最后一次ACK丢了来解释它,服务器将重新发送他的最终FIN,因此可恶必须维护状态信息,允许它重发最终ACK。客户端不得不准备好重传最终那个ACK。

2、允许老的重复分节在网络中消逝;两个IP和端口头一次建立连接后,下一次又建立了新的连接。后一个连接为前一个连接的化身,因为他们的IP地址和端口号都相同。TCP必须防止老的重复分组在该链接已终止后再出现被误解为属于同一连接的信息。所以,TCP将不给出于TIME_WAIT状态的链接发起新的化身。TIME_WAIT状态的持续时间是MSL的2倍,这足以让某个方向上的分组最多存活MSL秒后被丢弃,另一个方向上的应答最多存活MSL秒后也被丢弃。、

常见协议使用的协议情况:

时间: 2024-10-26 01:21:44

TCP链接的建立与终止的相关文章

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表示最大段尺寸,如果一个段

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/IP详解 卷一(第十八章 TCP连接的建立和终止)

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

TCP/IP详解学习笔记--TCP连接的建立与终止

1.基本概念 由于TCP是一个面向连接的协议,无论在哪一方发送数据之前,都必须先在双方之间建立连接,接下来我们就讨论建立连接的具体过程 2.建立TCP连接 如下图所示: 1.首先请求端发送一个序列号为1(表明该方的起始序列号为1)的SYN段,此时由于连接还未建立成功,所以携带的数据为0,并前发送端还告诉接收端它所能接收的最大报文段mss 2.接收端收到SYN段后,也给对方回一个SYN端,告知对方它的其实序列号为5并携带给对方回的ack,同时也告诉对方它所能接收的最大报文段mss 3.请求端在收到

【TCP/IP详解 卷1:协议】 第18章TCP连接的建立与终止

img { border: 1px solid black } T C P是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接. 发送第一个S Y N的一端将执行主动打开(active open),另一端执行被动打开( passive open), 建立连接超时,经测试为,1,2,4,8,16,32, 四次挥手的时候,两个方向的断开是独立的,每个方向发送一个FIN,对方回复一个ACK,但同时,TCP规定ACK可以捎带在其他数据包当中,所以你看到的主动断开连接一方本

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

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