访问一个网站,wireshark抓包 ,结果如下:
分析:
(1)由于访问过此页面,重新访问时发送RST请求重新置位;
(2)client发送SYN帧初始化seq=0进行第一次握手;
(3)server发送SYN、ACK帧seq=0,ACK=1,进行第二次握手;
(4)client发送SYN、ACK帧seq=1,ACK=1,进行第三次握手;
(5)client发送携带数据的ACK帧,进行HTTPget操作,提交request,长度为1100B;
(6)server发送不带数据的ACK帧,表示收到消息,此时ACK为1101,收到请求的长度1100+1,表示已收到1100B;
(7)server发送携带数据的ACK帧,由于上一个不携带数据不消耗seq,所以这次seq与上次一样,此次携带315B,携带数据820B;
(8)client发送seq=1101的帧,与收到的ACK一样,自己的ACK=316,表示收到了315B数据;
(9)server发送seq=316的帧,ACK =1921,为收到的1100+820B数据再+1,携带数据1400B;
(10)server发送seq=1716的帧,为已发送的315+1400+1,ACK与上一次相同;
(11)client发送seq=1921的帧,因为已经发送了1100+820数据,ACK=2240,为315+1400+524+1,表示收到之前的数据;
(12)server发送seq=2240的帧,表示发送过315+1400+524B,ACK=1921,表示收到1100+820B,此帧为FIN帧,表示数据收发完成;
(13)中间client发了一次帧没有回应是点击跳转到了其他网站,IP过滤时其他网站相应数据被过滤掉了;
(14)后来关闭了浏览器,client发送FIN帧请求解除连接,进行第一次挥手;
(15)由于此时server端没有还需要发送的信息,第二次第三次挥手合并发送一个FIN帧,与之前发送过FIN帧有关;
(16)client端收到消息,发送ACK进行第四次挥手,等待2个生存周期后关闭。
注意点:
(1)SYN和FIN帧不携带数据也要消耗seq,中间发送的不携带数据的话不消耗seq;
(2)挥手在例子中表现为只有3个包,这个主观理解。