设为首页 收藏本站
查看: 510|回复: 0

[经验分享] TCP四次握手断开衔接(图解)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-30 09:16:30 | 显示全部楼层 |阅读模式
树立衔接十分主要,它是数据准确传输的前提;断开衔接异样主要,它让盘算机释放不再运用的资本。假如衔接不克不及正常断开,不只会形成数据传输毛病,还会招致套接字不克不及封闭,继续占用资本,假如并发量高,效劳器压力堪忧。
树立衔接需求三次握手,断开衔接需求四次握手,可以抽象的比方为下面的对话:
  • [Shake 1] 套接字A:“义务处置终了,我愿望断开衔接。”
  • [Shake 2] 套接字B:“哦,是吗?请稍等,我预备一下。”
  • 等候少焉后……
  • [Shake 3] 套接字B:“我预备好了,可以断开衔接了。”
  • [Shake 4] 套接字A:“好的,感谢协作。”


下图演示了客户端自动断开衔接的场景:
1-15102015224Wc.jpg
树立衔接后,客户端和效劳器都处于ESTABLISED形态。这时,客户端提议断开衔接的恳求:
1) 客户端挪用 close() 函数后,向效劳器发送 FIN 数据包,进入FIN_WAIT_1形态。FIN 是 Finish 的缩写,表现完成义务需求断开衔接。
2) 效劳器收到数据包后,检测到设置了 FIN 标记位,晓得要断开衔接,于是向客户端发送“确认包”,进入CLOSE_WAIT形态。
留意:效劳器收到恳求后并不是立刻断开衔接,而是先向客户端发送“确认包”,通知它我晓得了,我需求预备一下才干断开衔接。
3) 客户端收到“确认包”落后入FIN_WAIT_2形态,等候效劳器预备终了后再次发送数据包。
4) 等候少焉后,效劳器预备终了,可以断开衔接,于是再自动向客户端发送 FIN 包,通知它我预备好了,断开衔接吧。然落后入LAST_ACK形态。
5) 客户端收到效劳器的 FIN 包后,再向效劳器发送 ACK 包,通知它你断开衔接吧。然落后入TIME_WAIT形态。
6) 效劳器收到客户端的 ACK 包后,就断开衔接,封闭套接字,进入CLOSED形态。
关于 TIME_WAIT 形态的阐明客户端最初一次发送 ACK包落后入 TIME_WAIT 形态,而不是直接进入 CLOSED 形态封闭衔接,这是为什么呢?
TCP 是面向衔接的传输方法,必需包管数据可以准确抵达目的机械,不克不及丧失或失足,而收集是不波动的,随时能够会破坏数据,所以机械A每次向机械B发送数据包后,都请求机械B”确认“,回传ACK包,通知机械A我收到了,如许机械A才干晓得数据传送胜利了。假如机械B没有回传ACK包,机械A会从新发送,直到机械B回传ACK包。
客户端最初一次向效劳器回传ACK包时,有能够会由于收集成绩招致效劳器收不到,效劳器会再次发送 FIN 包,假如这时客户端完整封闭了衔接,那么效劳器无论若何也收不到ACK包了,所以客户端需求等候少焉、确认对方收到ACK包后才干进入CLOSED形态。那么,要等候多久呢?
数据包在收集中是有生活工夫的,超越这个工夫还未抵达目的主机就会被丢弃,并告诉源主机。这称为报文最大生活工夫(MSL,Maximum Segment Lifetime)。TIME_WAIT 要等候 2MSL 才会进入 CLOSED 形态。ACK 包抵达效劳器需求 MSL 工夫,效劳重视传 FIN 包也需求 MSL 工夫,2MSL 是数据包往复的最大工夫,假如 2MSL 后还未收到效劳重视传的 FIN 包,就阐明效劳器曾经收到了 ACK 包。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-264992-1-1.html 上篇帖子: Linux SSH无交互式访问配置 下篇帖子: 过滤/var/log/messages中的net-snmp日志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表