Wireshark抓包实验之TCP连接
Wireshark抓包实验
TCP连接的三次握手机制
进入Wireshark筛选抓包
很明显,SYN标志位为1,那就是第一次A-B,第二次B-A就是B会发送请求建立连接和确认给A,第三次A再确认,连接建立
报文结构
从上往下分别对应TCP五层模型的物理层、数据链路层、网络层、传输层。
三次握手
我们主要观察传输层的报文结构,带[]的是Wireshark这个软件自己添加的解释,可以不用去管。
Source Port: 50408
:源端口50408
Destination Port: 7680
:目的端口7680
Sequence Number: 0 (relative sequence number)
:seq(字节编号)为0(这个是相对字节编号,是Wireshark为了方便我们观察弄的)
Sequence Number (raw): 483252459
:原始的字节编号就是一个随机数483252459
Acknowledgment Number: 0
:ack(确认号)为0(第一个还是相对确认号)
Acknowledgment number (raw): 0
:带raw
的才是数据原始的随机数,这个ack的随机数是上一个seq的随机数加一,就是期待值,当然这里为0,因为第一次连接是没有ACK确认位的。
1000 .... = Header Length: 32 bytes (8)
:TCP包头的长度,为32字节。
Flags
:标志位,这里第一次连接只有SYN置为1。
Window: 64240
:窗口大小。
Checksum: 0x9645 [unverified]
:校验和。
Urgent Pointer: 0
:紧急指针,置为0就是没有,相当于一个优先级。
我们来观察第二次连接:
和第一次的变化就是多了个ACK确认位,置为了1。从B-A的seq仍然是一个随机数,ack的值为A-B的seq加1,就是483252460。表示B希望A下一次发过来的字节编号为483252460。SYN和ACK位都置为1。
第三次:
这里的变化就是没有SYN了因为在第三次连接的时候只需要A向B确认连接就OK了,然后seq为第二次的ack字节编号,就是期待值。ack为B-A的seq+1,就是A希望B下一次发过来的seq为2270738566。标志位只有ACK为置为了1。
TCP断开连接的四次挥手机制
抓包:
还是一样的,主要观察传输层的结构:
一般来说,第一次挥手是没有ACK确认位,那为什么这里会有呢,其实就是对上一次连接的时候,就是还在传输数据的时候,对数据的确认,所以这里的ACK和挥手没有什么关系,可以不用去管它。
FIN位置为1,表示A向B请求断开连接,告诉B我要断开连接了,不会再发送数据了,但是我还可以接收数据,seq依然位为一个随机数。
第二次挥手:
ACK位置为1,ack=上一次的seq+1。
第三次挥手:
B再向A发送一个FIN置为1的包,告诉A我也准备断开连接了,不会再发送数据了。seq还是一个随机数。
第四次挥手:
A向B发送一个ACK置为1的确认包,ack为上一次的seq加1。