仅用于做笔记,转载自https://blog.csdn.net/whuslei/article/details/6667471

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


假设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连接就这样关闭了!

【问题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三次握手建立连接四次挥手断开连接相关推荐

  1. TCP网络编程-三次握手建立连接-四次挥手断开连接

    客户端与服务器进行TCP通信连接时,要进行三次握手建立连接. 客户端与服务器进行TCP断开连接时,要进行四次挥手断开连接.

  2. TCP三次握手建立连接的过程

    来源:TCP三次握手建立连接的过程 TCP 是面向连接的协议,所以每次发出的请求都需要对方进行确认.TCP 客户端与 TCP 服务器在通信之前需要完成三次握手才能建立连接. 下面详细讲解三次握手的过程 ...

  3. TCP的三次握手过程与四次挥手

    TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...

  4. 《TCP三次捂手、四次挥手和状态转换详解》

    前言: 本文将讲解TCP三次捂手建立连接,到四次挥手断开连接的过程,并且配合TCP状态转换图解释.解释SYN .seq .ack.FIN的含义和关系.建议读者先理解三捂和四挥后在结合状态转换图看,网络 ...

  5. TCP三次握手建立连接和四次挥手关闭连接

    TCP三次握手 是指建立TCP连接协议时,需要在客户端和服务器之间发送三个包,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据. 第一次握手:客户端发送第一个包,其中S ...

  6. Wireshark抓包示范:TCP三次握手建立连接和四次握手断开连接

    转载请标注: 披萨大叔的博客 http://blog.csdn.net/qq_27258799/article/details/51379508 如果您觉得这篇文章对您有帮助,请点下文章最下面的赞~ ...

  7. TCP三次握手建立连接

    一.三次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程.最开始的时候两端的TCP进程都处于ClOSED(关闭)状态. 这 ...

  8. 43.TCP三次握手建立连接的过程

    TCP 是面向连接的协议,所以每次发出的请求都需要对方进行确认.TCP 客户端与 TCP 服务器在通信之前需要完成三次握手才能建立连接. 下面详细讲解三次握手的过程. 第 1 次握手 第 1 次握手建 ...

  9. TCP四次挥手断开连接

    四次挥手的流程 1.主动关闭方发送FIN连接释放报文段 客户端调用 close 方法,告诉服务器自己要主动关闭连接,会发送一个 FIN 报文给服务端,客户端进入FIN-WAIT-1状态. 2.被动关闭 ...

最新文章

  1. redis 缓存过期默认时间_缓存的必知必会:一文搞懂Redis持久化和过期机制
  2. SAP QM启用了Physical Sample Management后检验批有哪些特殊地方?
  3. 8.Vue 事件处理
  4. 交换机选用要点及订货主要技术条件
  5. 画直线_在鸡面前画一条直线,为什么它会晕?西瓜视频这知识好冷告诉答案
  6. 【转】Python学习路线
  7. python最大公约数计算。从键盘接收两个整数_python如何求解两数的最大公约数
  8. 排序算法之——快速排序分析
  9. 星环大数据平台 TDH inceptor 问题排查
  10. 统计通话次数和时间的软件_通话时间统计app下载-通话时间统计下载v2.3-西西软件下载...
  11. iOS YYKit理解
  12. ARM体系结构与编程模型总结
  13. ZZULIOJ/python1006: 求等差数列的和
  14. DVP 接口时钟配置错误导致的高温出图异常
  15. 数据归档方案(带流程图)
  16. QQ能上网页打不开解决办法
  17. 淘宝校招鸡蛋篮子算法题标准答案
  18. 关于学习的三个认知升级
  19. BIOS 并口设置选项SPP, EPP, ECP区别
  20. Day 40 多表查询以及pymysql相关操作

热门文章

  1. 比较两个文件夹图像相似度
  2. 使用Java泛型实现快速排序(快排,Quicksort)
  3. undefined reference to cv::_InputArray::_InputArray(cv::Mat const)
  4. 服务器 声音文件 nginx,docker nginx搭建视频音频服务器
  5. php smtp 超时,SMTP错误:无法连接到服务器:连接超时(110)与PHPMailer和Outlook SMTP
  6. android udp 收发例子_如何利用光衰减器来测试光纤收发器的灵敏度?
  7. http方式调用第三方接口
  8. 手机连接投影机的步骤_投影机和电视机怎么选?看这一篇就够了!
  9. python天气查询小程序加背景图_微信小程序开发背景图显示功能
  10. oracle对查询结果求和_某国企Oracle数据库误truncate table恢复案例