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

三次握手

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

第一次握手

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来证明一下上面的分析过程。从下面的的输出就可以很容易看出来,必须要经过前面的三次tcp请求才会有起一次http请求。

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

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

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

四次挥手

以下面这张图为例,我们来分析一下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状态。

第三次握手为什么没有序列号_图解TCP三次握手与四次分手相关推荐

  1. 三次握手和四次挥手图解_图解 TCP 三次握手和四次挥手

    人到中年,难免长胖发福. 大家好,我是你们有点严肃的胖福(hu), 这里我们聊学习和工作. - 内容提要 - TCP 有 6 种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) ...

  2. 三次握手和四次挥手图解_图解TCP三次握手和四次挥手

    三次挥手 为什么建立连接需要三次握手? 三次握手的目的:为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误,保证在信道上传输可靠的数据 第一次握手:客户端发送syn包(syn=j)到服务器 ...

  3. Wireshark图解TCP三次握手与四次挥手

    Wireshark图解TCP三次握手与四次挥手 1. TCP 包头结构 2 三次握手 2.1 图解 2.2 使用 tcpdump 和 wireshark 解读三次握手过程 3 四次挥手 3.1 客户端 ...

  4. 三次握手的本质_关于TCP三次握手,这是我见过最好的解读了,通俗易懂

    文|洪生鹏 关于TCP协议三次握手的问题,在面试中是最为常见的知识点之一,得到了很多面试官的青睐,如果这个知识点没有掌握好,面试官要是问得深入一点,求职者往往会不知所措. 为什么建立连接需要三次握手? ...

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

    一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...

  6. 图解TCP三次握手和四次挥手!(简单易懂)

    哈喽:亲爱的小伙伴,首先祝大家五一快乐~ 本来打算节日 happy 一下就不发文了,但想到有些小伙伴可能因为疫情的原因没出去玩,或者劳逸结合偶尔刷刷公众号,所以今天就诈尸更新一篇干货,给大家解解闷~ ...

  7. 【协议森林】图解TCP三次握手四次挥手

    1.TCP为何物 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. 在因特网协议 ...

  8. 第三次握手为什么没有序列号_“三次握手,四次挥手”你真的懂吗?

    记得刚毕业找工作面试的时候,经常会被问到:你知道"3次握手,4次挥手"吗?这时候我会"胸有成竹"地"背诵"前期准备好的"答案&qu ...

  9. c++ tcp 封装_关于TCP三次握手和四次挥手问题,求你别再问了问了...

    少点代码,多点头发 三次握手建立链接,四次挥手断开链接.这个问题算非常经典的问题,也是面试官非常喜欢问的问题. 不夸张的说,龙叔在校招面试的时候每一家公司都问到过关于三次握手和四次挥手相关的问题,相信 ...

最新文章

  1. 5大洲,32个国家:剑桥分析公司的触角到底有多远?
  2. 我喜爱的FireFox插件
  3. Linux下Mysql的查询用法
  4. Java对象的序列化与反序列化
  5. java多线程:线程体往外抛出异常的处理机制实践
  6. 计算机网络之Web应用
  7. python全景图像拼接_Python+OpenCV实现图像的全景拼接
  8. ios sinaweibo 客户端(二)
  9. gamma软件linux安装图示,[转载]linux下安装GAMMA软件
  10. 浅谈python可视化编程之tkinter(一)
  11. 你看,那个人好像一条狗啊~30岁以上的程序员该何去何从?
  12. 大学毕业后拉开差距的真正原因--写给将要毕业的自己
  13. css 面包屑 30个字节,css3面包屑设计
  14. CKB-VM:连接硬件和软件的桥梁——Nervos@RISC-V Roadshow
  15. APS与ERP及MES的关系和接口
  16. 拉格朗日对偶问题的解释
  17. [数据结构][Python]python实现散列表
  18. 神策数据徐美玲:银行数字化运营建设路径与实践解读
  19. 三维扫描在建筑行业应用综述
  20. splint 错误。c99

热门文章

  1. filter执行先后问题_filter的执行顺序是怎样的?
  2. jupyternotebook运行python_怎么运行jupyter notebook?
  3. java实现简易聊天窗口先运行服务器还是客户端_一个简易聊天功能的服务器端和客户端源码...
  4. 安卓最新系统_安卓最新10.0系统,新增功能都在这了!
  5. iis创建php网站,iis怎么搭建php
  6. python大型项目经验_经验丰富程序员才知道的8种高级Python技巧
  7. 底层框架_你有必要了解一下Flink底层RPC使用的框架和原理
  8. LCD也可以模拟?这款模拟器别错过了!
  9. 100块钱买100只鸡php,使用JS计算买100只鸡问题
  10. java bitset 扩展_将java BitSet保存到DB