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 80
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
18: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..<..@[email protected])..
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 [email protected]....,
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的報文更加詳細,可以更方便分析檢測;