Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30869
  • 博文数量: 7
  • 博客积分: 67
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-22 14:53
文章分类
文章存档

2012年(7)

分类: LINUX

2012-09-06 22:31:53

TCP是面向链接的协议,该协议主要是为应用层服务的,比如说FTP,HTTP等。

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

TCP报文段的头部格式如下:

下面使用tcpdump抓去FTP使用TCP建立链接的过程分析。

  1. linux@linux:~$ sudo tcpdump -X tcp port 21
  2. tcpdump: verbose output suppressed, use -or -vv for full protocol decode
  3. listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
  4. 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
  5.     0x0000: 4500 0030 38a2 4000 4006 7e08 c0a8 0168 E..08.@.@.~....h
  6.     0x0010: c0a8 0165 fc59 0015 5e8b 2273 0000 0000 ...e.Y..^.

执行如上命令后,在另外一个机子上向该FTP服务器发送一个FTP连接。就会出现TCP建立链接的三次
握手。上面是主机192.168.1.104向FTP服务器发送一个TCP请求的报文段(第一次握手)。
解析该报文段如下:

  1. 4500 0030 38a2 4000 4006 7e08 c0a8 0168 c0a8 0165 IP数据报的报头20个字节。
  2. fc59 0015 5e8b 2273 0000 0000 7002 2000 6194 0000 TCP报文端的首部20字节。
  3. 源端口:fc59
  4. 目的端口:21
  5. seq:5e8b 2273
  6. ack:0000 0000
  7. SYN=1
  8. ACK=0
该解析过程要对照TCP首部格式一一对照。
--------------------------------------------------------------------------------
FTP服务器作出应答:(第二次握手)

  1. 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
  2.     0x0000: 4500 0030 0000 4000 4006 b6aa c0a8 0165 E..0..@.@......e
  3.     0x0010: c0a8 0168 0015 fc59 796a c64d 5e8b 2274 ...h...Yyj.M^.
该TCP报文段的解析如下:

  1. 4500 0030 0000 4000 4006 b6aa c0a8 0165 c0a8 0168 IP数据报的报头20个字节。
  2. 0015 fc59 796a c64d 5e8b 2274 7012 3908 8440 0000 TCP报文端的首部20字节。
  3. 0204 05b4 0101 0402 FTP发送的数据。

  4. 源端口:21
  5. 目的端口:fc59
  6. seq:796a c64d
  7. ack:5e8b 2274 确认号=前一个序列号 1
  8. SYN=1
  9. ACK=1
--------------------------------------------------------------------------
第三次握手:

  1. 21:06:16.601230 IP 192.168.1.104.64601 > linux.ftp: Flags [.], ack 1, win 8192, length 0
  2. 0x0000:  4500 0028 38a3 4000 4006 7e0f c0a8 0168  E..(8.@.@.~....h
  3. 0x0010:  c0a8 0165 fc59 0015 5e8b 2274 796a c64e  ...e.Y..^."tyj.N
  4. 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

阅读(1467) | 评论(0) | 转发(0) |
0

上一篇:C函数调用机制及栈帧指针

下一篇:没有了

给主人留下些什么吧!~~