TCP三次握手简析

来源:互联网 发布:.us域名查询 编辑:程序博客网 时间:2024/06/04 23:31

tcp三次握手简介

tcp握手需要用到标识位里面的两种标识:SYN和ACK,以及报文中的seq序列号和ack确认号;
上面的ack确认号和ACK标识位是不同两种数据,下面小写的ack代表ack确认号,大写的ACK代表ACK标识位;

简单流程如下:
1. client随机产生一个seq数字,发送SYN请求到server;
2. server收到SYN请求,将ack置为收到的seq+1,并且随机产生一个seq,响应SYN+ACK;
3. client收到SYN+ACK请求,验证收到的ack是否为发出去的seq序列号+1,将ack置为收到的seq+1,响应ACK;
握手完成,开始传输数据;

tcpdump报文分析

下面是一段通过tcpdump命令监控到的tcp三次握手的报文;

# tcpdump -i eth1 -XSnnvv host 111.111.111.111 and port 80tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes18:55:12.923498 IP (tos 0x14, ttl 53, id 31105, offset 0, flags [DF], proto TCP (6), length 64)    111.111.111.111.50217 > 222.222.222.222.80: Flags [S], cksum 0x80e2 (correct), seq 277050658, win 65535, options [mss 1440,nop,wscale 5,nop,nop,TS val 784552069 ecr 0,sackOK,eol], length 0    0x0000:  4514 0040 7981 4000 3506 df5b b781 a72c  E..@y.@.5..[...,    0x0010:  7929 14f0 c429 0050 1083 7522 0000 0000  y)...).P..u"....    0x0020:  b002 ffff 80e2 0000 0204 05a0 0103 0305  ................    0x0030:  0101 080a 2ec3 5085 0000 0000 0402 0000  ......P.........18:55:12.923538 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)    222.222.222.222.80 > 111.111.111.111.50217: Flags [S.], cksum 0x2a16 (correct), seq 1517913223, ack 277050659, win 14480, options [mss 1460,sackOK,TS val 1268712571 ecr 784552069,nop,wscale 6], length 0    0x0000:  4500 003c 0000 4000 4006 4df5 7929 14f0  E..<..@.@.M.y)..    0x0010:  b781 a72c 0050 c429 5a79 8487 1083 7523  ...,.P.)Zy....u#    0x0020:  a012 3890 2a16 0000 0204 05b4 0402 080a  ..8.*...........    0x0030:  4b9f 047b 2ec3 5085 0103 0306            K..{..P.....18:55:12.936229 IP (tos 0x14, ttl 53, id 57168, offset 0, flags [DF], proto TCP (6), length 52)    111.111.111.111.50217 > 222.222.222.222.80: Flags [.], cksum 0x815d (correct), seq 277050659, ack 1517913224, win 4105, options [nop,nop,TS val 784552080 ecr 1268712571], length 0    0x0000:  4514 0034 df50 4000 3506 7998 b781 a72c  E..4.P@.5.y....,    0x0010:  7929 14f0 c429 0050 1083 7523 5a79 8488  y)...).P..u#Zy..    0x0020:  8010 1009 815d 0000 0101 080a 2ec3 5090  .....]........P.    0x0030:  4b9f 047b                                K..{......

SYN:

这里写图片描述
黄色:数据包来源ip端口和目标ip端口;
红色:标识位 [S] = SYN;
蓝色:seq序列号,以及seq在16进制数据包中的位置;0x 1083 7522 = 277050658;

SYN+ACK:

这里写图片描述
黄色:数据包来源ip端口和目标ip端口;
红色:标识位 [S.] = SYN+ACK;
蓝色:seq序列号,以及seq在16进制数据包中的位置;随机产生:1517913223;
绿色:ack确认号,以及ack在16进制数据包中的位置;为SYN请求的 seq+1 = 277050658 + 1 = 277050659;

ACK:

这里写图片描述
黄色:数据包来源ip端口和目标ip端口;
红色:标识位 [.] = ACK;
蓝色:seq序列号,以及seq在16进制数据包中的位置;为SYN+ACK中的 ack = 277050659;
绿色:ack确认号,以及ack在16进制数据包中的位置;为SYN+ACK中的 seq+1 = 1517913223 + 1 = 1517913224;

wireshark的报文更加详细,可以更方便分析检测;

原创粉丝点击