一 TCP三次握手和四次挥手
说明: 本文'三次握手和四次挥手' 无异常情况下的'分析'目标: 通过'抓取和分析' HTTP 协议网络包,理解 TCP '三次'握手和'四次'挥手的工作'原理'
① 抓包和测试准备
1、 服务端'事先'执行 'tcpdump' 抓包 --> '172.25.2.100'tcpdump -i br0 tcp and host 172.25.2.157 and port 80 -w http.pcap注意: 待'curl 请求'后,按下 'Ctrl+C' 停止 tcpdump 才能生成'http.pcap'文件2、 客户端执行'curl'抓包 --> '172.25.2.157'curl nginx.wzj.com/ok备注: 'curl'和'tcpdump'用不同主机'分析'
3、使用 Wireshark 打开'http.pcap'后,你就可以在 Wireshark 中,看到'如下'的界面:
遗留: 留下一个'悬念',为什么是'三次'挥手,而不是'四次挥手'呢?
② 用时序图的方式显示数据包交互的过程
1、从最上面'菜单栏'中 --> 点击 '统计 Statistics' -> '流量图 Flow Graph'2、然后,在弹出的界面中的'流量类型' 选择 'TCP Flows',可以看到整个过程中'TCP 流'的执行过程建议: 最好'不要'使用同一个机器'否则'看不到具体的'现象'
③ 思考:为什么三次握手连接过程的 Seq 是 0 ?
细节: 在任意一个'数据包'右击协议首选项: 'Protocol Preferences'
取消'后',Seq 显示的就是'真实'值了:
tcpdump -S : 使用'绝对'序列号,而'不是'相对序列号备注:前面说过 ack '有时' 就会是'相对'序列号,可以使用'-S'来使用'绝对'序列号
④ 回顾 TCP 三次握手和四次挥手的流程
备注: 本文并'没有'对每个'TCP'包的字段信息进行'拆解'讲解个人建议: 对'tcp'包拆解了解每个'字段'的含义
⑤ 思考:为什么抓到的 TCP 挥手是三次,而不是书上说的四次?
TCP 延迟确认机制