http协议:关闭连接,四次握手的问题

在本机上
sudo vim /var/www/html/phplearn/send.php

<form action="http://vps_ip/phplearn/do.php" method="post">
用户名:  <input type="text" name="userName" size="12"/>
密码:    <input type="text" name="PS" size="12"/>
<input type="submit" value="登录">
</form>

sudo vim /var/www/html/phplearn/do.php

<?php
$userName = $_POST["userName"];
$PS = $_POST["PS"];
echo "the name is:  ".$userName;
echo "<br>key word is:  ".$PS;
?>

在本机上打开tcpdump进行抓包
tcpdump -i lo host 127.0.0.1 -w /tmp/dataDst.pcap

开另外一个console,输入
curl -d "userName=test&PS=test_pass" 127.0.0.1/phplearn/do.php
回车后得到
the name is: test
key word is: test_pass

然后关闭tcpdump (按下ctrl +c )
用wireshark打开 /tmp/dataDst.pcap

图片描述

我们可以分析整个过程

第一阶段:tcp链接的三次握手。
no1-no3 ,没有任何疑议。
和网上常见的三次握手图吻合。

图片描述

第二阶段:客户端发送请求,服务器响应
no4 客户端发送请求
no5 服务器应答
n06 服务器响应
没有疑议

第三阶段:关闭链接
no7-no10
no7: 客户端38219到服务器端80 ACK
no8: 客户端38219到服务器端80 FIN ACK
no9: 服务器端80到客户端38219 FIN ACK
no10: 客户端38219到服务器端80 ACK
这是我的抓包显示,和网上的关闭链接四个过程完全不符合。

图片描述

请解释??

阅读 3k
1 个回答

其实就是 no.9 上合并两个操作
正常的情况:
C ————> S,我要关闭(FIN)
S ————> C,好的我知道了(ACK)
S ————> C,没有数据传给你了,我要关闭(FIN)
C ————> S,我知道了,关吧(ACK)

现在你的情况
C ————> S,我要关闭(FIN)
S ————> C,好的我知道了(ACK),正好没有数据传给你了,我也要关闭(FIN),我就不多跑一趟了
C ————> S,好的我知道了(ACK),关吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题