网易首页 > 网易号 > 正文 申请入驻

互联网大厂面试系列-面试被问到TCP三次握手与四次挥手相关问题

0
分享至

我们知道在浏览器访问网站的时候,都是通过域名解析找到对应的IP,之后,与后端服务器建立对应的连接,然后服务器向浏览器传输数据。而其中TCP协议(Transmission Control Protocol,传输控制协议),起到了关键性的作用。TCP协议作为一种面向连接的、可靠的、基于字节流的通信协议,其特点就是要传输数据必须要建立连接,传输完毕之后必须要关闭连接。所以说每次的数据交互都是需要去进行通信的建立与应答检查操作。而我们下面要介绍的关于三次握手和四次挥手就是用来完成这个操作的。下面我们就来看看关于TCP通信连接建立的三次握手和通信连接断开的四次挥手操作。

TCP报文格式介绍

如下图所示,展示了TCP的报文格式,这里我们先来介绍关于TCP报文相关的内容。

如图所示,在TCP报文中有如下的一些内容需要我们注意。

  • 序号:Seq序号占用32位,用来标记客户端和服务端之间的发送的不同的数据包。
  • 确认号:Ack确认号占用32位,在客户端和服务端都有其值是Ack=Seq+1。
  • 标志位:占用了1BIT,有六个标记。

URG:紧急指针有效

ACK:确认号是否有效

PSH:是否将数据包快速给应用层

RST:重置连接

SYN:新建一个连接

FIN:断开连接

这里需要注意的是Ack与ACK是两个不一样的概念。

从上面的介绍中,看到了之前我们了解过的Ack、SYN等熟悉的内容。下面我们就来详细介绍一下TCP的三次握手机制以及,在操作过程中这些标记位的变化情况。

三次握手建立TCP连接

根据上面的分析,我们知道在TCP建立通信连接的时候需要一个确认通信连接的手段,而这个手段就是需要发送三个数据包。三个数据包分别表示的三次握手操作的三个过程。如下图所示。图片来源网络。

第一步、首先TCP请求连接是由客户端发起的,客户端向服务端发送一个数据包,其中SYN设置为1,并且随机产生了一个seq=j的值,并且将这个数据包发送到服务端,这个时候客户端进入到一个SYN_SENT的状态,并且等待Server的确认。

第二步、服务端收到请求的数据包之后,开始检查SYN的标记位,判断数据包是客户端用来建立TCP连接的数据包,并且设置SYN和ACK标记位,SYN表示用来建立TCP连接,ACK标识确认收到了客户端的数据包。服务端将标志位SYN和ACK都设置成1,ack = j+1,并且随机产生了一个seq的值。并且将数据包发送到客户端,并且服务端进入到SYN_RCVD状态。

第三步、客户端收到了服务端的SYN+ACK的数据包,并且向服务端发送确认包ACK的数据包,这个包发送完毕之后客户端和服务端都会进入到 ESTABLISHED 状态表示三次握手成功,连接建立。

这个时候会有人问?为什么第三次握手之后,服务端不需要再给客户端发送一个消息告诉客户收到消息了呢?这是因为在连接建立之后,当服务端和客户端都进入到ESTABLISHED状态之后,服务端的第四次确认就可以带着数据给客户端了,如果这个时候由于网络的原因或者是数据传输的原因客户端无法接收数据,那么就会出现超时的异常。而一旦超时,服务端会主动断开连接。

DDOS攻击

根据上面的分析,在三次握手建立的过程中,当服务端给客户端回应了SYN+ACK的数据包之后,这个时候服务端和客户端的连接还没有完全建立,只是处于即将建立连接的状态,这种状态我们称为是半连接状态。而我们所说的DDOS攻击就是在半连接状态下发生的。

当客户端在短时间内给客户端发送了大量的不存在的IP对应的SYN连接请求,这个时候服务端收到了请求,并状态也发生了变化,也对客户端进行了响应,但是由于IP等信息都是伪造的,所以说。服务端要不断的发送并且直至超时。

由于这些伪造的SYN包在一段时间内会占用连接队列,这样就会导致正常的客户端连接由于连接队列爆满而无法连接,从而导致网络拥堵甚至是网络瘫痪。而解决DDOS攻击的有效方式就是当服务端出现大量的半连接的时候并且IP地址都是随机的时候。可以果断执行如下的命令。并且快速断开相关的连接请求。

netstat -nap | grep SYN_RECV

四次挥手断开TCP连接

对于三次握手来讲,我们应该不陌生了,但是为什么断开TCP连接不采用三次挥手而采用四次挥手呢?这个也是接下来我们要去讨论的问题,也是在面试中被经常问及的问题。

所谓的四次挥手,就是在TCP连接断开的时候,客户端和服务端发送4次数据包以保证连接是正常断开的。在开发中可以由任意一方来发起关闭操作。如下图以客户端主动断开为例,在实际开发中这个也是一个正常的逻辑。

由于TCP连接的传输是全双工的,所以,对于客户端与服务端来讲都必须要单独的关闭。也就是说当一方完成了数据发送任务之后,发送了一个FIN的包来终止连接请求。另一方收到了FIN数据包之后就说明数据传输已经完成了,并且不会再有后续的数据进行发送了。但是在这个TCP连接上还是可以发送其他数据的,直到另一方也回应了FIN,表示没有响应的数据来响应了,这个时候它就会主动关闭连接,而另一方则是被动关闭了连接。具体步骤如下

第一步、Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二步、Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三步、Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四步、Client收到FIN后,Client进入TIME_WAIT_2状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

面试题

1、为什么建立连接的时候是三次握手,而关闭连接的时候是四次挥手呢?

因为在服务端为LISTEN的状态下的时候,收到建立连接的SYN请求后,把SYN与ACK放在同一个数据包中发送到了客户端。而在关闭连接的时候,当收到了对方的FIN数据包的时候,只表示对方不再发送数据了,并不是说TCP连接上不能在发送数据了。所以自己可以立刻关闭,也可以在等待接收到对方的FIN报文之后在进行关闭,所以一般情况下来讲ACK包和FIN都会分开进行发送,既然要分开,就会出现分别的发送FIN和ACK的操作。也就是四次挥手操作。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
再不收手麻烦了!美导弹刚运往菲,中方仅用1招,直接让美破防了

再不收手麻烦了!美导弹刚运往菲,中方仅用1招,直接让美破防了

诉人世间
2024-04-28 09:24:22
五一调休被央媒怒批后,官媒也忍不住发声了,霍启刚的担心恐成真

五一调休被央媒怒批后,官媒也忍不住发声了,霍启刚的担心恐成真

娱乐八卦木木子
2024-04-29 14:35:24
裁判中途收到小纸条,是不是拿到指令就要广东输?全国球迷都想知

裁判中途收到小纸条,是不是拿到指令就要广东输?全国球迷都想知

邮轮摄影师阿嗵
2024-04-29 20:56:28
中国南方航空:与中国商飞订立协议购买100架C919系列飞机

中国南方航空:与中国商飞订立协议购买100架C919系列飞机

界面新闻
2024-04-29 20:09:07
茅台集团换帅:张德芹出任党委书记,丁雄军履新贵州省市场监督管理局局长

茅台集团换帅:张德芹出任党委书记,丁雄军履新贵州省市场监督管理局局长

澎湃新闻
2024-04-29 23:28:28
CCTV5直播!中国女排VS塞尔维亚生死战,朱婷缺席,蔡斌获神助攻

CCTV5直播!中国女排VS塞尔维亚生死战,朱婷缺席,蔡斌获神助攻

开心体育站
2024-04-29 14:59:22
岛国片fc2中那些惊艳众人的女主,高贵御姐大长腿,人美有气质

岛国片fc2中那些惊艳众人的女主,高贵御姐大长腿,人美有气质

不二砖家
2024-04-29 18:13:37
周星驰多次用代号“9527”,翻译成粤语,原来是这个意思

周星驰多次用代号“9527”,翻译成粤语,原来是这个意思

娱乐圈酸柠檬
2024-04-30 07:30:21
阿根廷代表团启动访华行程,但在国家层面停止与中国的联系

阿根廷代表团启动访华行程,但在国家层面停止与中国的联系

侦姐有料
2024-04-29 07:34:56
乌军总司令:“前线困难重重,局势有恶化趋势”

乌军总司令:“前线困难重重,局势有恶化趋势”

参考消息
2024-04-28 20:12:13
赫尔松部队收复中心岛屿 乌克兰武装部队司令西尔斯基;只是开始

赫尔松部队收复中心岛屿 乌克兰武装部队司令西尔斯基;只是开始

三界见闻
2024-04-29 09:54:53
两天被歼10个师,3万士兵临阵叛变,还顺走了800辆坦克

两天被歼10个师,3万士兵临阵叛变,还顺走了800辆坦克

旺旺探秘史
2024-04-30 07:20:20
离婚一年后,汪峰高调现身北京车展!女伴不输章子怡,心情大好!

离婚一年后,汪峰高调现身北京车展!女伴不输章子怡,心情大好!

八卦爱侃娱
2024-04-30 10:12:07
比尔-西蒙斯:没人能在7场系列赛赢掘金 约基奇现在和魔鸟同一档

比尔-西蒙斯:没人能在7场系列赛赢掘金 约基奇现在和魔鸟同一档

直播吧
2024-04-29 21:03:12
住房限购政策逐步退出市场,仅北上广深、杭州天津西安海南等地还在执行限购

住房限购政策逐步退出市场,仅北上广深、杭州天津西安海南等地还在执行限购

澎湃新闻
2024-04-29 07:50:30
曾说后悔性爱成瘾…肯伊威斯特宣布进军AV界! 成立色情片工作室

曾说后悔性爱成瘾…肯伊威斯特宣布进军AV界! 成立色情片工作室

ETtoday星光云
2024-04-29 12:32:09
电动车要凉了?院士称:现在新能源一地鸡毛!网友:还是院士有学问

电动车要凉了?院士称:现在新能源一地鸡毛!网友:还是院士有学问

户外小阿隋
2024-04-30 01:05:41
胡锡进犀利点评华为问界车祸起火,新能源汽车安全引热议

胡锡进犀利点评华为问界车祸起火,新能源汽车安全引热议

户外小阿隋
2024-04-29 13:51:20
神舟十八号仍采用20年前技术,为什么不启用新一代载人飞船?

神舟十八号仍采用20年前技术,为什么不启用新一代载人飞船?

胖福的小木屋
2024-04-28 11:31:38
新冠疫苗之父杨晓明被抓,背后原因令人害怕,网友:我打了三针!

新冠疫苗之父杨晓明被抓,背后原因令人害怕,网友:我打了三针!

苗苗情感说
2024-04-29 22:14:35
2024-04-30 10:58:44
富滋游戏解说
富滋游戏解说
富滋游戏解说
1064文章数 36297关注度
往期回顾 全部

科技要闻

特斯拉股价飙涨15% 马斯克中国行大获成功

头条要闻

中纪委节前打虎:司法部原副部长刘志强被查

头条要闻

中纪委节前打虎:司法部原副部长刘志强被查

体育要闻

上海男篮:年轻人,学费总是要交的

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

建信人寿巨亏40亿 部分产品退保率93%

汽车要闻

越野老炮最爱 哈弗新H9新增2.4T柴油机

态度原创

健康
艺术
手机
房产
公开课

春天野菜不知不识莫乱吃

艺术要闻

共度北京108小时 北京当代2024“凝聚”全球36座城市100余家艺术机构

手机要闻

曝小米14系列激活量达470万左右 高端手机战略成了?

房产要闻

拆迁致富成过去式?广州旧改探索新出路

公开课

父亲年龄越大孩子越不聪明?

无障碍浏览 进入关怀版