深入浅出TCP与UDP:三次握手、四次挥手及面试通关指南

devtools/2025/3/17 10:55:17/

深入浅出TCP与UDP:三次握手、四次挥手及面试通关指南


一、TCP三次握手:像租房签约的严谨流程 🏠

情景模拟‌:客户端(租客)与服务器(房东)建立信任关系
抓包关键字段‌:SYN(同步请求)、ACK(确认应答)、Seq(序列号)
握手照片

三次握手流程

  1. 第一次握手 - 租客询价
   客户端发送:SYN=1, Seq=J状态变化:客户端进入 SYN_SENT
  1. 第二次握手 - 房东报价‌
服务端回复:SYN=1, ACK=J+1, Seq=K
状态变化:服务端进入 SYN_RCVD
  1. 第三次握手 - 租客确认‌
客户端发送:ACK=K+1, Seq=J+1
状态变化:双方进入 ESTABLISHED

❓高频面试题‌

Q:为什么不能两次握手?‌

A:防止历史连接干扰(想象网络延迟导致旧SYN包突然到达,服务端误开新连接)

二、TCP四次挥手:像分手告别的双向确认 💔

情景模拟‌: 客户端(提出分手)与服务端(回应分手)终止连接
关键字段‌: FIN(终止连接)、ACK(确认应答)

四次挥手流程

1. 客户端发送 FIN=1, Seq=U          → 客户端进入 FIN_WAIT_1
2. 服务端回复 ACK=U+1, Seq=V        → 服务端进入 CLOSE_WAIT
3. 服务端发送 FIN=1, ACK=U+1, Seq=W → 服务端进入 LAST_ACK
4. 客户端回复 ACK=W+1, Seq=U+1      → 客户端进入 TIME_WAIT(2MSL后关闭)

🔥 必考知识点‌

TIME_WAIT 的三大使命‌:

  1. 确保服务端收到最终ACK(否则重传FIN)
  2. 让网络中残留数据包失效(防止新旧连接混淆)
  3. 等待时间:2倍MSL(默认60秒,可通过sysctl调整)

三、UDP:像群发通知的极简主义 ✉️

核心特点速记‌:

  • 无连接‌:无需握手,直接发送数据
  • 无保障‌:不保证顺序、不重传丢失包
  • 低延迟‌:头部仅8字节(TCP至少20字节)

协议格式‌:

+--------+--------+--------+--------+
| 源端口 | 目的端口 | 长度   | 校验和 |
+--------+--------+--------+--------+
|         数据(最大65507字节)        |

典型应用场景‌:

  1. 实时视频通话(Zoom/Skype)
  2. DNS域名解析查询
  3. IoT传感器数据上报

四、TCP vs UDP 对比宝典 📚

特性‌TCPUDP
连接方式面向连接(三次握手)无连接
可靠性可靠传输(自动重传)尽力而为
流量控制滑动窗口机制
拥塞控制慢启动/快重传/快恢复
头部开销最小20字节8字节
传输顺序保证顺序不保证
适用场景文件传输/网页加载直播流媒体/在线游戏

💡 记忆口诀‌:

"TCP如挂号信,UDP似群发短信;前者重安全,后者拼速度"‌

五、8大必刷面试题 🚀

  • TCP为什么需要流量控制?如何实现?‌

答:防止接收方缓冲区溢出,通过滑动窗口动态调整发送速率。

  • 如果第三次握手丢失会发生什么?‌

答:服务端未收到ACK会重传SYN+ACK,客户端在超时后重新发送ACK。

  • UDP如何实现可靠传输?‌

答:需应用层自己实现确认机制(如QUIC协议),参考TCP的重传策略。

  • CLOSE_WAIT状态过多怎么排查?‌

答:检查服务端代码是否未正确关闭socket(如忘记调用close())。

  • TCP快速打开(TFO)的原理是什么?‌

答:在SYN包中携带数据,减少一次RTT时间,需客户端和服务端同时支持。

  • TCP的Keep-Alive和HTTP的Keep-Alive有什么区别?‌

答:TCP层的Keep-Alive用于检测连接存活,HTTP层的用于复用连接传输多个请求。

  • 为什么DNS主要使用UDP协议?‌

答:查询响应数据量小,UDP无连接特性更高效,失败时可降级使用TCP。

  • 列举三个TCP首部字段并说明作用‌

答:
序列号(Seq):标识数据包顺序
确认号(Ack):期望收到的下一个字节编号
窗口大小(Window):接收方可用缓冲区空间

六、实战工具推荐 🔧

  1. Wireshark抓包分析‌
tcp.port == 80 && tcp.flags.syn == 1  # 过滤TCP握手包
  1. netcat模拟TCP/UDP通信‌
# TCP服务端
nc -l 8080
# UDP客户端
nc -u 192.168.1.100 8080
  1. TCP状态查询(Linux)‌
ss -tunap | grep 'TIME-WAIT'  # 查看TIME_WAIT连接数

掌握TCP/IP的核心原理,就像获得打开网络世界的万能钥匙。下次面试官问"为什么是三次握手",你可以微笑着反问:“您想听技术解析还是生活比喻?” 💪

参考文章:https://www.cnblogs.com/renyz/p/11233858.html


http://www.ppmy.cn/devtools/167799.html

相关文章

【USTC 计算机网络】第一章:计算机网络概述 - Internet、网络边缘、网络核心、接入网与物理媒体

本文开坑中科大计算机网络课程的学习记录,所用教材为《计算机网络:自顶向下方法》。第一章概述计算机网络,内容非常重要,介绍了很多计算机网络中的概念与定义。本文介绍了什么是互联网(Internet)&#xff0…

软件测试之单元测试unittest库使用、参数化、unittestteport

文章目录 前言什么是单元测试什么是单元测试框架Unittest 测试框架Unittest核心要素TestCaseFixtureTestSuiteTextTestRunnerreport Unittest 断言 Unittest 框架使用编写TestCase(测试用例)在测试用例中添加Fixture(测试夹具)将测…

浅谈AVL树插入的平衡调节

文章目录 1. AVL树介绍1.1 什么是AVL树1.2 AVL树结构代码展示 2. AVL树插入的平衡调节2.1 插入后节点的平衡因子为02.2 插入后节点的平衡因子为1或-12.2 插入后节点的平衡因子为2或-22.2.1 左单旋2.2.2 右单旋2.2.3 左右双旋2.2.4 右左双旋 3. AVL树插入的具体代码3.1 插入接口…

【华为OD-E卷 -121 消消乐游戏 100分(python、java、c++、js、c)】

【华为OD-E卷 - 消消乐游戏 100分(python、java、c++、js、c)】 题目 游戏规则:输入一个只包含英文字母的字符串,字符串中的两个字母如果相邻且相同,就可以消除。 在字符串上反复执行消除的动作,直到无法继续消除为止,此时游戏结束。 输出最终得到的字符串长度 输入描…

TCP和UDP的区别

一:连接性 TCP是面向连接的协议,传输时序先三次握手建立连接,确保双方都准备好通信。 UDP是无连接的协议,发送数据前不需要建立连接,直接把数据发给对方,不管对面收不收到。 二:可靠性 TCP提供可…

Cursor的使用感受,帮你使用好自动化编程工具,整理笔记

使用感受 说实话,我觉得cursor还是好用的,可能我刚开始使用,没有使用的非常的熟练,运用也没有非常的透彻,总体体验还是不错的,在使用它时,我优先考虑,前端页面功能复用的时候&#…

coze ai assistant Task 3

这是我第一次尝试Coze工作流,以前在工作中一直使用RPA,偶然听说了AI工作流就想来尝试一下,同时也想探究RPA与Coze的不同之处,是替代还是可以融合,目前还在尝试中,等整体结束后会写一篇感想。 Coze工作流支持…

AI战略家:AI政务应用思考——AI与区块链融合对政府权力结构的重构:从“技术赋能”到“制度革命”

一、AI区块链的治理模式:技术特性与权力挑战 去中心化与透明性:对权威的“解构” 独立决策逻辑:当AI结合区块链技术,其决策过程将基于算法预设规则与实时数据分析,形成不可篡改的决策链。例如,美国白宫提出…