TCP三次握手与四次分手傻傻分不清?看大神图解五分钟讲明白

引言

TCP三次握手和四次挥手不管是在开发还是面试中都是一个非常重要的知识点,它是我们优化web程序性能的基础。但是大部分教材都对这部分解释的比较抽象,本文我们就利用wireshark来抓包以真正体会整个流程的细节。

三次握手

根据下面这幅图我们来看一下TCP三次握手。p.s: 每个箭头代表一次握手。

tcp三次握手

第一次握手

client发送一个SYN(J)包给server,然后等待server的ACK回复,进入SYN-SENT状态。p.s: SYN为synchronize的缩写,ACK为acknowledgment的缩写。

第二次握手

server接收到SYN(seq=J)包后就返回一个ACK(J+1)包以及一个自己的SYN(K)包,然后等待client的ACK回复,server进入SYN-RECIVED状态。

第三次握手

client接收到server发回的ACK(J+1)包后,进入ESTABLISHED状态。然后根据server发来的SYN(K)包,返回给等待中的server一个ACK(K+1)包。等待中的server收到ACK回复,也把自己的状态设置为ESTABLISHED。到此TCP三次握手完成,client与server可以正常进行通信了。

为什么要进行三次握手

我们来看一下为什么需要进行三次握手,两次握手难道不行么?这里我们用一个生活中的具体例子来解释就很好理解了。我们可以将三次握手中的客户端和服务器之间的握手过程比喻成A和B通信的过程:

  • 在第一次通信过程中,A向B发送信息之后,B收到信息后可以确认自己的收信能力和A的发信能力没有问题。
  • 在第二次通信中,B向A发送信息之后,A可以确认自己的发信能力和B的收信能力没有问题,但是B不知道自己的发信能力到底如何,所以就需要第三次通信。
  • 在第三次通信中,A向B发送信息之后,B就可以确认自己的发信能力没有问题。

wireshark

上面分析还不够形象,很容易忘记,下面我们利用wireshark来证明一下上面的分析过程。从下面的的输出就可以很容易看出来,必须要经过前面的三次tcp请求才会有起一次http请求。

第一次请求客户端发送一个SYN包,序列号是0。

wireshark-tcp-01

第二次请求服务器会发送一个SYN和一个ACK包,序列号是0,ack号是1。

wireshark-tcp-02

第三次本地客户端请求会发送一个ACK包,序列号是1,ack号是1来回复服务器。

wireshark-tcp-03

四次挥手

以下面这张图为例,我们来分析一下TCP四次挥手的过程。

tcp四次挥手

第一次挥手

client发送一个FIN(M)包,此时client进入FIN-WAIT-1状态,这表明client已经没有数据要发送了。

第二次挥手

server收到了client发来的FIN(M)包后,向client发回一个ACK(M+1)包,此时server进入CLOSE-WAIT状态,client进入FIN-WAIT-2状态。

第三次挥手

server向client发送FIN(N)包,请求关闭连接,同时server进入LAST-ACK状态。

第四次挥手

client收到server发送的FIN(N)包,进入TIME-WAIT状态。向server发送ACK(N+1)包,server收到client的ACK(N+1)包以后,进入CLOSE状态;client等待一段时间还没有得到回复后判断server已正式关闭,进入CLOSE状态。

作者:ziwenxie 来源:https://juejin.im/post/59648ccef265da6c244302d8


原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴老师移动开发

TCP/IP协议

1615
来自专栏mathor

计算机网络基础知识总结

 为了使不同计算机厂家生产的计算机能相互通信,在更大范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/R...

5072
来自专栏小筱月

TCP、UDP 的区别,三次握手、四次挥手

|TCP 面向连接(如打电话要先拨号建立连接)|UDP 是无连接的,即发送数据之前不需要建立连接|

3085
来自专栏java初学

TCP/IP三次握手与四次挥手

2937
来自专栏土豆专栏

计算机网络基础知识整理--数据链路层

小编最近在复习计算机网络基础,整理出来一些我认为比较重要的知识。希望能帮到大家哈,后续会更新~

80612
来自专栏七夜安全博客

Python3实现ICMP远控后门(上)

2113
来自专栏同步博客

TCP/IP参考模型

  TCP/IP模型是网络通信模型的一种。网络通信模型还包括OSI,旨在使各种计算机在世界范围内互连为网络。其中有OSI为七层模型、TCP/IP为四层模型,现在...

1383
来自专栏zhisheng

那些不能遗忘的知识点回顾——计算机网络系列(笔试面试高频题)

前两天发表了“那些不能遗忘的知识点回顾——操作系统系列(笔试面试高频题)”和“那些不能遗忘的知识点回顾——C/C++系列(笔试面试高频题)”文章,没看的赶紧在公...

3966
来自专栏零基础使用Django2.0.1打造在线教育网站

TCP/IP 七层网络模型 三次握手

TCP/IP(TransmissionControlProtocol/Internet Protocol),中文名为传输控制协议/因特网互联协议,又名网络通讯协...

1151
来自专栏小筱月

三次握手和四次挥手

OSI参考模型中的网络层,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。(TCP在运输层,IP在网络层)

1031

扫码关注云+社区

领取腾讯云代金券