网络面试-0x11 TCP为什么需要三次握手和四次挥手?

本文详细解析了TCP协议中建立连接所需的三次握手过程和终止连接的四次挥手过程,包括每次握手的作用、为何需要这些步骤,以及在挥手过程中可能出现的问题及其解决方案,如CLOSE-WAIT和TIME-WAIT状态的含义。通过对TCP关键状态的理解,有助于深入掌握TCP连接管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络面试-0x11 TCP为什么需要三次握手和四次挥手?

alt

一、三次握手

三次握手[three-way-handshake]:客户端和服务器总共发送3个包,以建立TCP连接。

什么是连接了?主要作用是什么?

连接:
主要作用:为了确认双方的接收能力发送能力是否正常,指定自己的初始化序列号为后面的可靠性传送做准备。

alt 过程如下:
1)第一次握手:客户端发送搞一个SYN报文给服务端,并且报文中指明了客户端的初始化系列seq=ISN(c),此时,客户端处于SYN_SENT状态
2)第二次握手:服务器收到客户端的SYN包,处理之后,发送自己的SYN+ACK包,将客户端的ISN+1作为ack的值,此时,服务器处于SYN_RCVD的状态。
3)第三次握手

Wireshark 是一款强大的网络协议分析工具,可以捕获显示网络流量。如果你希望观察 TCP三次握手 (TCP Three-Way Handshake) 四次挥手 (TCP Four-Way Waveoff),你可以使用适当的过滤条件来进行抓包筛选。 --- ### **步骤:** #### 1. 抓取 TCP 数据流 首先需要启动 Wireshark 并选择正确的网卡开始抓包。然后可以根据以下过滤条件来专门关注 TCP 流量: **基础过滤条件:** ```plaintext tcp ``` 这个会显示所有的 TCP 流量。 --- #### 2. 观察 TCP 三次握手过程 TCP三次握手包括以下三个关键阶段: - 客户端发送 SYN 包给服务器。 - 服务器响应 SYN+ACK 给客户端。 - 客户端再次确认 ACK 回复到服务器。 为了只查看这三个相关的数据包,可以用以下过滤条件组合: ```plaintext tcp.flags.syn == 1 || tcp.flags.ack == 1 ``` 解释: - `tcp.flags.syn == 1` 表示包含 SYN 标志位的报文(用于建立连接的第一步第二步)。 - `tcp.flags.ack == 1` 表示包含 ACK 标志位的报文(用于第三步及后续通信)。 或者可以直接输入更精简版本: ```plaintext tcp.flags & 0x12 > 0 ``` 这里的 `0x12` 对应的是二进制标志位 `(SYN + ACK)`。 --- #### 3. 观察 TCP 四次挥手过程 TCP 断开连接的过程分为四个步骤: - 主动关闭方发送 FIN 包通知对方准备断开。 - 被动关闭方回应 ACK 包表示收到消息。 - 被动关闭方随后也发出自己的 FIN 包。 - 最终主动关闭方回复 ACK 来结束整个流程。 为此可以使用类似下面的过滤条件: ```plaintext tcp(flags.fin == 1 || tcp.flags.ack == 1) ``` 说明: - `tcp.flags.fin == 1` 捕捉到了携带 FIN 标志的报文(表示发起或接受终止请求)。 - 同样结合上一步提到的 `tcp.flags.ack == 1` 可以完整追踪此场景下的所有交互动作。 另外一种高级写法也可以实现同样目的: ```plaintext (tcp.flags & 0x11) > 0 ``` 其中 `0x11` 就等于十进制数 "17" (`FIN|ACK`) ,即同时匹配这两种情况的数据帧都会被保留下来供研究之用。 --- #### 4. 结合 IP 地址端口缩小范围 如果你想专注于某个特定主机之间的通讯记录,则可以在上述基础上加入更多限制项,比如指定源地址、目标地址以及服务端口号等信息作为附加约束参数。例如: ```plaintext (ip.addr == <IP Address>) && (tcp.port == <Port Number>) ``` 将 `<IP Address>` 替换为实际参与测试机器对应的 IPv4 或者 IPv6 数值形式;把 `<Port Number>` 改成对应应用程序所监听的标准端点即可完成定制化搜索任务。 --- ### 总结提示: 利用好以上提供的各种布尔运算符(`||`, `&&`)与掩码技巧能够大大提高效率并准确找到所需的通信片段。记得实验完毕之后别忘了停止捕捉以免浪费资源! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值