什么是TCP中三次握手和四次挥手

简述

该题主要是考察网络基础,属于很常规的题目,而且问到的频率很高哦。

答案

三次握手:

  • 第一次: 客户端向服务器发送连接请求,这时候会发送一个sync(i)包,同时客户单进入到sync_send状态
  • 第二次:服务端收到了客户端的sync请求,回复一个sync包,包中携带ack(i+1)和服务端的sync(j)信息,服务端进入sync_recv状态
  • 第三次:客户端收到服务端的sync包,向服务端发送ack(j+1)包,该包发送完毕后,并且服务端收到ack包后,则双方进入establish状态,即连接建立

如图所示:

TCP中三次握手和四次挥手

有个形象的例子, A和B打电话:

A:  喂,你那边可以听见么?
B:  可以听到,你可以听见么?
A:  可以听见。

四次挥手:

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。

这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。

首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

注意:中断连接端可以是客户端,也可以是服务端,这里以客户端主动断开为例来说明:

  • 第一次: TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
  • 第二次:服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  • 第三次:服务器关闭客户端的连接,发送一个FIN给客户端。
  • 第四次:客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

如图所示:

TCP中三次握手和四次挥手

有个形象的例子, A和B挂电话为例子:

A:  喂,我这边说完了,你说完了吧?
B:  是的
B:我挂了啊?
A:  收到。(B挂电话进入close状态)
A由于不确定B是否已经挂了电话,要等两个最大报文段生存时间关闭

相关问题

问题1. 为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

问题2. 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。另一方面是为了保证在2MSL期间,该连接的本地端点地址(IP+PORT)不被再次使用,避免可能的较早连接请求到达,被误认为时新连接请求。


相关主题:
相关推荐
  1. 双流县九江幼儿园 - 成都市幼儿园黄页
  2. 武汉推出越王勾践剑交通卡
  3. SEO干货 - 文章如何进行伪原创
  4. 八百老虎闹东京
  5. 沈阳市沈河区华识教育幼儿园 - 沈阳幼儿园黄页
  6. 小猫刮胡子
  7. 启动TOGAF之前的10个步骤 - TOGAF系列教程(2)
  8. 解决Python json.dumps中文字符乱码问题
  9. 祥福镇中心幼儿园 - 成都市幼儿园黄页
  10. 如何为Ubuntu Server安装图形化界面
  11. 股票列表
  12. 桂林市叠彩区浩翔早教园 - 桂林幼儿园黄页
  13. 伤心的花朵
  14. 奥迪客户不满加价,被武汉4S店销售群殴
  15. 重庆市黔江区爱心幼儿园 - 重庆幼儿园黄页
  16. 武汉女子网上做兼职被骗六十五万
  17. 车队管理及解决方案 - 附SkyBitz & Omnitracs成立车队管理合作伙伴
  18. 警方通报:武汉男子持刀至五死一伤,嫌犯已跳桥
  19. 易中天给英雄武汉的一首诗 - 武汉新鲜事
  20. 新生儿一个小时吃一次母乳正常吗 - 育儿经验
  21. 成都市邛崃市小精灵幼儿园(治权路) - 成都市幼儿园黄页
  22. 唐山市迁安市永宏幼儿园 - 唐山幼儿园黄页
  23. 武汉一女子七天被骗220万
  24. 天津的由来
  25. 海边的朋友
  26. Vim - 基础教程
  27. Python基础 - 详解django.utils.dateparse
  28. 猫 喇 嘛 讲
  29. Python公开课 - 爬虫之代理
  30. 湖北将发放消费券 - 武汉新鲜事
  31. 广州市南沙区榄核镇榄核中心(镇泰)幼儿园 - 广州幼儿园黄页
  32. 九尾月光
  33. 央媒聚焦!国庆假期173.78万人次打卡大美黄陂
  34. 小蜗牛找菜叶
  35. 快乐王子和卖火柴的小女孩
  36. 事发武汉农夫山泉矿泉水内惊现大量虫卵
  37. 大连市庄河市红岩小学附属幼儿园 - 大连幼儿园黄页
  38. 约翰不再吹牛了
  39. 车企数字化转型(上)
  40. 武汉00后大二学妹拍视频月入七十万