Tcpdump会让你在网络方面自由飞翔( 三 )


step4. 主机B向A发出断开连接请求 , 然后进入LAST-ACK状态;
step5. 主机A接收到请求后发送确认 , 进入TIME-WAIT状态 , 等待2MSL之后进入CLOSED状态 , 而主机B则在接受到确认后进入CLOSED状态;
为何主机A在发送了最后的确认后没有进入CLOSED状态 , 反而进入了一个等待2MSL的TIME-WAIT主要作用有两个:
第一 , 确保主机A最后发送的确认能够到达主机B 。如果处于LAST-ACK状态的主机B一直收不到来自主机A的确认 , 它会重传断开连接请求 , 然后主机A就可以有足够的时间去再次发送确认 。但是这也只能尽最大力量来确保能够正常断开 , 如果主机A的确认总是在网络中滞留失效 , 从而超过了2MSL , 最后也无法正常断开;
第二 , 如果主机A在发送了确认之后立即进入CLOSED状态 。假设之后主机A再次向主机B发送一条连接请求 , 而这条连接请求比之前的确认报文更早地到达主机B , 则会使得主机B以为这条连接请求是在旧的连接中A发出的报文 , 并不看成是一条新的连接请求了 , 即使得这个连接请求失效了 , 增加2MSL的时间可以使得这个失效的连接请求报文作废 , 这样才不影响下次新的连接请求中出现失效的连接请求 。
为什么断开连接请求报文只有三个 , 而不是四个因为在TCP连接过程中 , 确认的发送有一个延时(即经受延时的确认) , 一端在发送确认的时候将等待一段时间 , 如果自己在这段事件内也有数据要发送 , 就跟确认一起发送 , 如果没有 , 则确认单独发送 。而我们的抓包实验中 , 由服务器端先断开连接 , 之后客户端在确认的延迟时间内 , 也有请求断开连接需要发送 , 于是就与上次确认一起发送 , 因此就只有三个数据报了 。
三、 Wireshark分析tcpdump抓包结果
1、启动8080端口 , tcpdump抓包命令如下:
tcpdump-ilo0-s0-n-Shost10.37.63.3andport8080-w./Desktop/tcpdump_10.37.63.3_8080_20160525.cap
# 然后再执行curl
curlhttp://10.37.63.3:8080/atbg/doc
2、使用Wireshark打开tcpdump_10.37.63.3_8080_20160525.cap文件

Tcpdump会让你在网络方面自由飞翔

文章插图
 
No. 1-4 行:TCP三次握手环节;
No. 5-8 行:TCP传输数据环节;
No. 9-13 行:TCP四次挥手环节;




推荐阅读