`

TCP协议中的三次握手和四次挥手(图解)

 
阅读更多

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:

先来看看如何建立连接的。

 

【更新于2017.01.04 】该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好。这么久才来更新,抱歉!!

 

错误配图如下:

首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

那如何断开连接呢?简单的过程如下:

【注意】中断连接端可以是Client端,也可以是Server端。

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

整个过程Client端所经历的状态如下:

而Server端所经历的过程如下:转载请注明:blog.csdn.net/whuslei

【注意】 在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

教程出处:http://blog.csdn.net/whuslei/article/details/6667471/

分享到:
评论

相关推荐

    TCP协议中的三次握手和四次挥手(图解)

    本文将深入解析TCP协议中的三次握手和四次挥手过程,以帮助理解其工作原理。 **三次握手** 三次握手是TCP建立连接时必须遵循的过程,确保双方都能正确地发送和接收数据。具体步骤如下: 1. **SYN (Synchronize ...

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

    #### 二、Wireshark抓包图解(TCP三次握手四次挥手详解) ##### (一)前导 Wireshark是一款非常强大的网络协议分析工具,它可以捕捉网络中传输的数据包,并对这些数据包进行详细的解析和分析。通过对Wireshark捕获...

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

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

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

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

    我终于搞懂了TCP的三次握手和四次挥手(图片案例详解)

    TCP三次握手和四次挥手不管是在开发还是面试中都是一个非常重要的知识点,它是我们优化web程序性能的基础。欢迎学习,一起进步 文章目录一.TCP简介二.TCP数据报结构三.TCP的三次握手四.TCP的四次挥手 一.TCP简介 TCP...

    wireshark抓包图解TCP三次握手四次挥手详解

    wireshark抓包图解TCP三次握手四次挥手详解

    TCP三次握手四次挥手详解

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

    图解三次握手,四次挥手.doc

    在学习三次握手和四次挥手的过程中,我们需要了解 TCP 报文首部的格式,相关控制位非常重要。TCP 报文首部的格式包括: 1. 源端口和目的端口各占 2 字节,分别写入源端口号、目的端口号。 2. 序号字段占 4 字节,...

    TCP/IP协议中三次握手四次挥手的原理及流程分析

    TCP/IP协议中三次握手四次挥手的原理及流程分析 TCP/IP协议中三次握手四次挥手的原理及流程分析是计算机网络中非常重要的概念。它主要介绍了TCP/IP协议中三次握手四次挥手的原理及流程分析,具有一定参考价值。 ...

    6-第六次实验-wireshark抓包图解TCP三次握手四次挥手详解.docx

    "TCP/IP 协议族详解 wireshark 抓包图解 TCP 三次握手四次挥手详解" TCP/IP 协议族是指由 TCP 和 IP 两个主要协议组成的协议簇,负责管理计算机之间的通信。该协议族分为四个层次:链路层、网络层、运输层和应用层...

    TCP的三次握手和四次挥手

    TCP协议在进行通信之前,需要通过三次握手过程来建立一个连接,在通信结束后需要通过四次挥手过程来断开连接。 三次握手过程包括: 1. 第一次握手:客户端发送一个带有同步序列编号(SYN)的包到服务器,表明客户端...

    图解TCP/IP协议

    建立TCP连接通道的过程涉及三次握手(three-way handshake)。第一次握手是客户端发送一个SYN(synchronize sequence numbers)包到服务器,以表达建立连接的请求,然后客户端进入SYN_SEND状态。第二次握手是服务器...

    图解tcp ip协议

    通过三次握手建立连接,然后在连接上进行数据传输,最后通过四次挥手释放连接。TCP使用滑动窗口机制来控制流量,防止拥塞,并且有重传机制以确保数据可靠性。 另一方面,IP协议主要负责寻址和路由,每个设备都有一...

    网络协议 TCP三次握手与四次断开的详细观察

    主要为大家介绍了网络协议之tcp协议,TCP三次握手与四次断开是怎么的一种情况呢,下面我们来看看观察TCP三次握手与四次断开,需要的朋友可以参考下

    图解TCP_IP_第5版[高清pdf]

    在《图解TCP/IP 第5版》中,作者详细讲解了每一层的功能和相关协议,包括TCP连接的建立与释放(三次握手和四次挥手)、IP地址与子网掩码的计算、DNS域名解析过程、以及TCP拥塞控制算法等关键概念。此外,书中还介绍...

    TCP IP 详解三宗卷,tcp,ip详解(三卷全)pdf,C,C++

    卷3《TCP/IP详解:TCP事务协议》聚焦于TCP的事务处理,如TCP的三次握手和四次挥手过程,这是建立和断开TCP连接的关键步骤。同时,这本书也探讨了TCP的性能优化和异常情况处理,以及TCP与其他应用层协议的交互。 ...

    网络相关协议 图解

    TCP的三次握手和四次挥手过程也可以通过图形生动展现。 通过这份图解资料,读者可以更深入地了解网络协议的基础知识,对于网络从业者或者对网络技术感兴趣的人来说,是一份极好的学习资源。掌握这些基础协议的理解...

    TCP IP协议(PDF版)

    TCP/IP协议的运作涉及到诸如三次握手、四次挥手这样的连接建立和终止过程,以及TCP的滑动窗口机制来实现流量控制和拥塞控制。IP地址和MAC地址在通信中的角色,以及NAT(网络地址转换)在解决IP地址短缺问题上的应用...

    图解TCP-IP

    书中详细解释了TCP的工作机制,包括三次握手和四次挥手建立和关闭连接的过程,以及TCP的流量控制、拥塞控制策略,如滑动窗口协议。同时,IP分片与重组、端口号的作用、DNS(域名系统)的工作原理等也会有详尽的阐述...

Global site tag (gtag.js) - Google Analytics