`

TCP三次握手/四次挥手

 
阅读更多

TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

2)第二次握手:服务器B收到SYN包,必须确认客户ASYNACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

3)第三次握手:客户端A收到服务器BSYNACK包,向服务器B发送确认包ACKACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

                               图1 TCP三次握手建立连接

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

TCP采用四次挥手关闭连接如图2所示。

                               图2  TCP四次挥手关闭连接

1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACKSYNACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

 

本文摘自:

TCP连接的状态转换图深度剖析》

http://www.diybl.com/course/6_system/linux/Linuxjs/2007104/76065.html

参考:

《TCP/IP详解-卷1》第18章《TCP连接的建立与终止》

http://course.ccniit.com/CSTD/Linux/reference/files/018.PDF

分享到:
评论

相关推荐

    wireshark抓包分析tcp三次握手四次挥手详解及网络命令

    ### Wireshark抓包分析TCP三次握手四次挥手详解及网络命令 #### 一、OSI与TCP/IP体系结构模型 在深入理解Wireshark抓包分析TCP三次握手及四次挥手之前,我们首先需要了解OSI七层模型与TCP/IP四层/五层模型的基础...

    TCP三次握手与四次挥手.pdf

    首先,来详细介绍TCP三次握手的过程: 1. 第一次握手:客户端发送一个带有SYN(同步序列编号)标志的数据包给服务器端,进入SYN_SEND状态,表示客户端希望与服务器建立连接。这个包中同时也会包含客户端的初始...

    wireshark抓包分析tcp三次握手四次挥手

    在TCP/IP通信中,TCP连接的建立和关闭过程分别称为三次握手和四次挥手,这两个过程对于理解TCP连接的工作原理至关重要。 首先,我们来详细讲解TCP的三次握手过程: 1. **第一次握手**:客户端(Client)发送一个...

    Wireshark抓包分析TCP“三次握手,四次挥手”.doc

    Wireshark 抓包分析 TCP“三次握手,四次挥手” Wireshark 是一个功能强大的网络抓包工具,通过它我们可以抓包并分析 TCP/IP 传输过程。在本文中,我们将通过 Wireshark 来抓包和分析 TCP“三次握手,四次挥手”...

    TCP三次握手和四次挥手面试题详解.pdf

    TCP三次握手和四次挥手是互联网中最重要的基础知识点之一,尤其在面试中,它们是检验应聘者是否具备扎实网络基础知识的常用问题。面试官通常会考察应聘者对这些过程的理解程度,以及能否准确描述其细节。以下是关于...

    TCP三次握手与四次挥手

    TCP 三次握手与四次挥手 TCP/IP 协议中,建立连接协议是三次握手,而关闭连接是四次挥手。下面我们详细地解释这两种握手机制的知识点。 三次握手 在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手...

    TCP三次握手和四次挥手

    ### TCP三次握手与四次挥手详解 #### 一、TCP简介 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它是Internet中最核心的协议之一,几乎所有的网络...

    TCP 三次握手和四次挥手

    ### TCP 三次握手详解 #### 一、三次握手的基本概念 TCP(Transmission Control Protocol,传输控制协议...以上就是TCP三次握手、四次挥手及其11种状态的详细介绍。这些基础知识对于理解和分析网络通信问题至关重要。

    TCP三次握手,四次挥手的过程

    描述TCP三次握手,四次挥手的过程的图片

    TCP报文分析--三次握手 四次挥手

    TCP 报文分析--三次握手四次挥手 TCP 报文分析是计算机网络中的重要内容, TCP(Transmission Control Protocol)是一种面向连接的传输控制协议,它提供了可靠的数据传输服务。在这个过程中,三次握手和四次挥手是 ...

    三次握手于四次挥手.docx

    在HTTP通信过程中,TCP的三次握手和四次挥手起着至关重要的作用,确保了连接的建立和终止的正确性。下面将详细解释这两个过程。 ### 三次握手 三次握手是为了在客户端和服务器之间建立一个可靠的连接。具体步骤...

    tcp三次握手与四次握手及SOCKE函数对应

    首先,我们来看“TCP三次握手”。当两个设备想要建立一个TCP连接时,它们必须经过以下三个步骤: 1. 第一次握手:客户端发送一个带有SYN(同步序列号)标志的数据段,请求建立连接。这个数据段中包含了客户端选择的...

    TCP三次握手四次挥手详解

    ### TCP三次握手详解 #### 一、三次握手过程解析 **TCP**(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了确保连接的可靠性,在TCP建立连接时,采用...

    TCP三次握手四次挥手

    ### TCP三次握手与四次挥手详解 #### 一、TCP协议简介 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在计算机网络中,TCP用于在应用程序之间提供...

    TCP三次握手及四次挥手详细图解.docx

    TCP 三次握手及四次挥手详细图解 TCP 三次握手是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号并交换 TCP 窗口...

    案例测试TCP的三次握手和四次挥手过程

    如本案例所示,可以通过编写C语言的服务器端程序和C#的客户端程序来模拟TCP的连接和断开过程,同时使用Wireshark这样的网络抓包工具,可以直观地观察到三次握手和四次挥手的网络交互细节,这对于理解TCP协议的工作...

    tcp三次握手四次挥手

    ### TCP三次握手与四次挥手详解 #### 一、TCP协议概述 TCP(Transmission Control Protocol,传输控制协议)是互联网中最关键的协议之一,属于OSI模型中的第四层——传输层。TCP是一种面向连接的、可靠的、基于...

    TCP三次握手四次挥手的过程详解.md

    TCP三次握手四次挥手的过程详解.mdTCP三次握手四次挥手的过程详解.mdTCP三次握手四次挥手的过程详解.md

Global site tag (gtag.js) - Google Analytics