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

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

首先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端所经历的过程如下:

【注意】 在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报文。

简述tcp协议三报文握手过程_TCP协议中的三次握手和四次挥手(图解)相关推荐

  1. 简述tcp协议三报文握手过程_TCP协议的3次握手与4次挥手过程详解

    前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一个服 ...

  2. 三次握手和四次挥手图解_详解 TCP 连接的“三次握手”与“四次挥手”

    作者 | AhuntSun 责编 | Elle TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念 ...

  3. 三次握手和四次挥手图解_三次握手和四次挥手简单理解

    TCP三次握手 TCP标志位 TCP在其协议头中使用大量的标志位或者说1位(bit)布尔域来控制连接状态,一个包中有可以设置多个标志位. TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三 ...

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

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

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

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

  6. 三次握手和四次挥手图解_TCP三次握手和四次挥手详解

    作者:雨点的名字来源:https://www.cnblogs.com/qdhxhz/p/8470997.html TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) ...

  7. TCP三次握手四次挥手(图解)

    <TCP-IP协议栈概略图与TCP三次握手四次挥手> 目录 1 TCP过程详解 1.1 三次握手 1.2 四次挥手 2 使用tcpdump分析三次握手的过程 2.1 tcpdump抓包和t ...

  8. 【转】TCP协议中的三次握手和四次挥手(图解)

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  9. [转]TCP协议中的三次握手和四次挥手(图解)

    本文转自:http://blog.csdn.net/whuslei/article/details/6667471 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来 ...

最新文章

  1. 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)
  2. JVM调优总结(7):调优方法
  3. 脑电分析系列[MNE-Python-6]| Python读取.set文件和.locs文件
  4. java dateformat类_JAVA--常量池,Date类,SimpleDateFormat类与Calendar类
  5. Spark生态顶级项目汇总
  6. Java面试没过_Java面试中遇到的坑【填坑篇】
  7. 【Qt】数据库实战(一)
  8. 先来先服务算法、运行时间最短者优先算法和最高响应比优先调度算法_Linux进程调度:完全公平调度器CFS
  9. 关于Cortex-M3处理器内核中断异常处理机制你了解多少?
  10. LeetCode(476)——数字的补数(JavaScript)
  11. 如何在 macOS 中锁定文件和文件夹?
  12. matlab 报错 索引超出数组元素的数目(1)。
  13. 运筹学_大M法_week4
  14. cmd批处理命令~%dp0与~%dpn1的解析
  15. 槑!Vitas翻唱青藏高原
  16. 平分七筐鱼c语言y,平分七筐鱼 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
  17. MATLAB创建符号变量和符号表达式
  18. 抖音投放怎么收费?抖音投放展现方式有哪些
  19. Rap部署本地服务器
  20. Android开发:开源库集合

热门文章

  1. [转]mpvue中的小程序调用系统自带查看图片的功能
  2. Eclipse之Android项目名有红感叹号的解决办法
  3. 数据结构之线性查找和折半查找
  4. java.lang.IllegalStateException: attempt to re-open an already-closed object
  5. Android之mvp和mvc对比分析以及实际应用
  6. 《零基础看得懂的C语言入门教程 》——(十三)socket服务端编写
  7. postgresql select for update 多行加锁顺序_PostgreSQL和Mysql的MVCC实现机制的差异对比
  8. 两度破译“白宫密码”,让美国政府部门崩溃,却称自己是抱娃敲代码的普通妈妈
  9. 高一被清华姚班录取,高三委拒谷歌offer,一个重度网瘾少年到理论计算机科学家的蜕变...
  10. 史上超强的学科碰撞,有生之年必看系列!