计算机网络:TCP同时打开和同时关闭

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络:TCP同时打开和同时关闭相关的知识,希望对你有一定的参考价值。

参考技术A

两个应用程序同时彼此执行主动打开的情况是可能的,但是发生的可能性极小。每一方必须发送一个SYN,且这些SYN必须传递给对方。这需要每一方使用一个对方熟知的端口作为本地端口。这又称为同时打开( simultaneous open)。两端必须几乎在同时启动,以便收到彼此的SYN。只要两端有较长的往返时间就能保证这一点。

TCP是特意设计为了可以处理同时打开,对于同时打开它 仅建立一条连接而不是两条连接 (其他的协议族,最突出的是OSI运输层,在这种情况下将建立两条连接而不是一条连接)出现同时打开的情况时,两端几乎在同时发送SYN,并进入 SYN_SENT状态。当每一端收到SYN时,状态变为SYN_RCVD,同时它们都再发SYN并对收到的SYN进行确认。当双方都收到SYN及相应的ACK时,状态都变迁为ESTABLISHED。

个同时打开的连接需要交换4个报文段,比正常的三次握手多一个。此外,要注意的是我们没有将任何一端称为客户或服务器,因为每一端既是客户又是服务器。

我们在以前讨论过一方(通常但不总是客户方)发送第一个 FIN执行主动关闭。双方都执行主动关闭也是可能的,TCP协议也允许这样的同时关闭( simultaneous close)。

当应用层发出关闭命令时,两端均从ESTABLISHED变为FIN _ WAIT_1。
这将导致双方各发送一个 FIN,两个FI N经过网络传送后分别到达另一端。收到FIN后,状态由F I N_WAIT_1变迁到 C L O S I N G,并发送最后的ACK。当收到最后的 ACK时,状态变化为TIME _ WAIT。

同时关闭与正常关闭使用的段交换数目相同。

以上是关于计算机网络:TCP同时打开和同时关闭的主要内容,如果未能解决你的问题,请参考以下文章

为啥可以同时在 TCP 和 UDP 上使用相同的端口?

如何以编程方式同时使用 WiFi 和 3G 网络 [关闭]

Linux下高并发网络编程

Rust 中同时使用 UDP 和 TCP 协议 [关闭]

使用网络面板进行分析时强制 Chrome 关闭/重新打开所有 TCP/TLS 连接

TCP的三次握手