建立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报文。

转自:

TCP协议中的三次握手和四次挥手(图解) - Simple life - 博客频道 - CSDN.NET
http://blog.csdn.net/whuslei/article/details/6667471/

转载于:https://www.cnblogs.com/paul8339/p/6273818.html

TCP协议中的三次握手和四次挥手(图解)【转】相关推荐

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

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

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

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

  3. Python常见面试题:TCP 协议中的三次握手与四次挥手相关概念详解

    今天来聊聊Python常见面试题中面试频率特别高的一个题目:TCP 协议中的三次握手与四次挥手. 涉及到的知识点有: 1.TCP.UDP 协议的区别 2.TCP 头部结构 3.三次握手与四次挥手过程详 ...

  4. 图解TCP协议中的三次握手和四次挥手

    最近在复习计算机网络,看到TCP这一章,总结一下. 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 1.jpg 先来看看如何建立连接的: 2.png 首先Client端 ...

  5. 简述tcp协议三报文握手过程_TCP协议中的三次握手和四次挥手(图解)

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

  6. Linux疑难杂症解决方案100篇(十九)-什么是TCP协议中的“三次握手,四次挥手”?带你深入探讨下

    前言 以下是博主精心整理的专栏,需要的小伙伴可自行订阅. 深度学习100例全系列详细教程  深度学习算法原理介绍及应用案例 tensorflow从入门到精通100讲 深度学习框架TensorFlow的 ...

  7. TCP协议中的三次握手和四次挥手(图…

    http://m.blog.csdn.net/article/details?id=51793861 http://m.blog.csdn.net/article/details?id=6667471

  8. tcp 协议中发送窗口的大小应该是_TCP 协议中的三次握手与四次挥手

    今天来聊聊面试频率特别高的一个题目:TCP 协议中的三次握手与四次挥手.涉及到的知识点有: 1.TCP.UDP 协议的区别 2.TCP 头部结构 3.三次握手与四次挥手过程详解 4.什么是 TIME_ ...

  9. tcp协议报文和三次握手与四次挥手

    tcp协议: tcp是面向连接.可靠的进程到进程之间的协议.tcp提供全双工服务:即:数据可在同一时间双向传输. tcp报文段首部格式: 各字段含义: 源端口号:16位字段,为发送端进程对应的端口号 ...

  10. 【转载】万字详文彻底弄懂TCP协议:从三次握手和四次挥手说起

    今日头条 腾讯技术工程 作者:morganhuang,腾讯 IEG 后台开发工程师 说到 TCP 协议,相信大家都比较熟悉了,对于 TCP 协议总能说个一二三来,但是 TCP 协议又是一个非常复杂的协 ...

最新文章

  1. Power Law and Exponential Decay of Inter Contac...
  2. 网络营销方案之巧用电子书营销
  3. 如何查linux系统安装时间查询,Linux系统怎样查询当前的系统时间
  4. 设计新Xlator扩展GlusterFS[转]
  5. docker部署resin应用
  6. java的for循环
  7. 这个时代会残酷惩罚不肯改变的人
  8. java提示框easyui风格_[Java教程]jQuery EasyUI 提示框(Messager)用法
  9. linux上进行base64编码解码
  10. 大气颗粒物 PMF 源解析
  11. JTS Java空间几何计算、距离、最近点、subLine等 稳健的一比,持续更新中
  12. Mixly第三方库开发
  13. Android 开发小技巧(2)
  14. 发那科pmc地址分配_FANUC IO模块地址分配详解
  15. Linux常用指令(详解)
  16. 北大邹磊:图数据库中的子图匹配算法
  17. kubernetes中的PV、PVC
  18. psid mysql_使用Python对MySQL数据库插入二十万条数据
  19. wish跨境电商平台的运营技巧有哪些?
  20. 使用-cifs自动挂载

热门文章

  1. 承认吧,你就是不行!
  2. 说说年度补税退税的问题
  3. c语言指针 r,C语言指针的高级操作
  4. OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 3.安装配置OpenStack认证服务(keystone)...
  5. laravel 模型中的一对一,一对多,多对多的关联
  6. Dalsa线扫相机SDK下载和安装
  7. Elasticsearch 健康状态处理
  8. Android开发-无法新建Activity及新建后编译错误
  9. 爪哇国新游记之二十----将数字转换成中国汉字大写形式
  10. 2019南昌网络赛H The Nth Item(二阶线性数列递推 + 广义斐波那契循环节 + 分段打表)题解...