在本机上
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
这是我的抓包显示,和网上的关闭链接四个过程完全不符合。
请解释??
其实就是 no.9 上合并两个操作
正常的情况:
C ————> S,我要关闭(FIN)
S ————> C,好的我知道了(ACK)
S ————> C,没有数据传给你了,我要关闭(FIN)
C ————> S,我知道了,关吧(ACK)
现在你的情况
C ————> S,我要关闭(FIN)
S ————> C,好的我知道了(ACK),正好没有数据传给你了,我也要关闭(FIN),我就不多跑一趟了
C ————> S,好的我知道了(ACK),关吧