当前位置: 首页 > article >正文

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

深入浅出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.kler.cn/a/588897.html

相关文章:

  • 哈尔滨算力服务器托管推荐-青蛙云
  • 运行Clip多模态模型报错:OSError: Can‘t load tokenizer for ‘bert-base-chinese‘
  • Spring Cloud Eureka - 高可用服务注册与发现解决方案
  • 在使用element-ui时表单的表头在切换页面时第一次进入页面容易是白色字体解决方法
  • springboot+vue如何前后端联调,手搓前后端分离项目
  • 三角函数:从宇宙法则到AI革命的数学密钥
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(51)混沌钟定排列 - 全排列(回溯与剪枝)
  • 安全测试数据的分析、报告及业务应用
  • Java EE 进阶:Spring Boot 日志
  • 获取pytdx行情服务器ip和port
  • Golang倒腾一款简配的具有请求排队功能的并发受限服务器
  • 如何在Linux中切换用户?
  • 从零到精通文本指令:打造个人AI助理的完整指令库(Prompt 指令实操)
  • HTML 列表:构建清晰结构的网页内容
  • 如何通过数据分析提升美容院顾客复购率
  • 设计模式之组合模式:原理、实现与应用
  • 构建智能汽车地图标准体系:自动驾驶技术的基石
  • 51单片机的工作过程
  • 有多少小于当前数字的数字 力扣1365
  • Kotlin语言基础笔记