tcp/ip-Wireshark抓包查看三次握手
我们以请求http://xxx.xxx.com首页为例,
1 捕获http
捕获选项-开始捕获
添加一个显示过滤器,只显示http请求
我们请求下面链接
http://xxx.xxx.com/
2 查看捕获结果
我们选中第一条GET / HTTP/1.1,右键-追踪流-tcp,查看tcp层
3 三次握手
上面除了标红的三个tcp请求外,还有一些深底的请求,说明如下:
TCP Out_of_Order的原因分析:
一般来说是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元,因为他们可能是由不同的路径到达你的电脑上面。
TCP Retransmission原因分析:
很明显是上面的超时引发的数据重传。
TCP dup ack XXX#X原因分析:
就是重复应答#前的表示报文到哪个序号丢失,#后面的是表示第几次丢失。
tcp previous segment not captured原因分析
意思就是报文没有捕捉到,出现报文的丢失。
3.1 第一次握手
客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接
3.2 第二次握手
服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的Sequence Number + 1
3.3 第三次握手
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来Sequence Number+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1
4 补充分析
首先需要说明,tcp协议传输的是类似这种01011010的序列,计算机中按照字节统计,每8位一个字节。而我们看到的类似7e b0等这种是16进制表示,人类只认识字符,所以下图右下部分显示的是ASCII码。
选中http协议,可以看到下面的http报文
我们单独查看请求行,可以看到请求行后面跟着一个0x0d 0xoa,对照ASCII码为CRLF回车换行健。也就是说请求行和请求头之间有一个空行。
我们再看http报文的最后面
有连续两个回车换行。说明请求报文结束,没有请求体
我们再选中tcp层,下面就显示tcp头,里面包含了源端口,目的端口等信息。由于部分二进制串比如SeqNumRaw超过了ASCII吗的范围,故有些字符显示不出来。也有些控制字符同样显示不出来。
Tcp报文最大长度65535字节
再往上看,我们可以看到ip协议头,在这里有源ip,目的ip等信息。
数据链路报文头
整个帧,
interface_id网卡的uuid
frame.number帧序列号
其中网卡id和我们系统查询到的一致
报文大小和帧大小
Tcp报文最大支持65535字节,
物理帧大小(MTU)由网络设备(比如网卡)决定,由于采用的标准不同,所以各个网络设备的MTU也不同,一般普遍1500字节
当tcp报文经过ip层、数据链路层到达物理层时,网卡发送之前会再次分隔成帧发送出去。到达目的网卡时又重新组装成tcp报文。