TCP建立链接的三次握手

来源:互联网 发布:中国芯片产业 知乎 编辑:程序博客网 时间:2024/05/18 20:46
TCP建立链接的三次握手
 
TCP是面向链接的协议,该协议主要是为应用层服务的,比如说FTP,HTTP等。
 

而TCP建立链接使用了三次握手。


TCP报文段的头部格式如下:
  www.2cto.com  

 
下面使用tcpdump抓去FTP使用TCP建立链接的过程分析。
 
linux@linux:~$ sudo tcpdump -X tcp port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:06:16.599278 IP 192.168.1.104.64601 > linux.ftp: Flags [S], seq 1586176627, win 8192, options [mss 1460,nop,nop,sackOK], length 0
 
    0x0000: 4500 0030 38a2 4000 4006 7e08 c0a8 0168 E..08.@.@.~....h
    0x0010: c0a8 0165 fc59 0015 5e8b 2273 0000 0000 ...e.Y..^.
执行如上命令后,在另外一个机子上向该FTP服务器发送一个FTP连接。就会出现TCP建立链接的三次
握手。上面是主机192.168.1.104向FTP服务器发送一个TCP请求的报文段(第一次握手)。
 
解析该报文段如下:
 
4500 0030 38a2 4000 4006 7e08 c0a8 0168 c0a8 0165 IP数据报的报头20个字节。
fc59 0015 5e8b 2273 0000 0000 7002 2000 6194 0000 TCP报文端的首部20字节。
源端口:fc59  www.2cto.com  
目的端口:21
seq:5e8b 2273
ack:0000 0000
SYN=1
ACK=0
该解析过程要对照TCP首部格式一一对照。
--------------------------------------------------------------------------------
 
FTP服务器作出应答:(第二次握手)
 
21:06:16.599311 IP linux.ftp > 192.168.1.104.64601: Flags [S.], seq 2037040717, ack 1586176628, win 14600, options [mss 1460,nop,nop,sackOK], length 0
    0x0000: 4500 0030 0000 4000 4006 b6aa c0a8 0165 E..0..@.@......e
    0x0010: c0a8 0168 0015 fc59 796a c64d 5e8b 2274 ...h...Yyj.M^.
该TCP报文段的解析如下:  www.2cto.com  
 
4500 0030 0000 4000 4006 b6aa c0a8 0165 c0a8 0168 IP数据报的报头20个字节。
0015 fc59 796a c64d 5e8b 2274 7012 3908 8440 0000 TCP报文端的首部20字节。
0204 05b4 0101 0402 FTP发送的数据。
 
源端口:21
目的端口:fc59
seq:796a c64d
ack:5e8b 2274 确认号=前一个序列号 1
SYN=1
ACK=1
--------------------------------------------------------------------------
第三次握手:
 
21:06:16.601230 IP 192.168.1.104.64601 > linux.ftp: Flags [.], ack 1, win 8192, length 0  www.2cto.com  
0x0000:  4500 0028 38a3 4000 4006 7e0f c0a8 0168  E..(8.@.@.~....h
0x0010:  c0a8 0165 fc59 0015 5e8b 2274 796a c64e  ...e.Y..^."tyj.N
0x0020:  5010 2000 4e8f 0000 0000 0000 0000       P...N.........
4500 0028 38a3 4000 4006 7e0f c0a8 0168 c0a8 0165 IP数据报的报头20个字节。
 
fc59 0015 5e8b 2274 796a c64e 5010 2000 4e8f 0000 TCP报文端的首部20字节。
源端口:fc59
目的端口:21
seq:5e8b 2274
ack:796a c64e 确认号=上一个序列号 1
SYN=0
ACK=1