TCP包格式 暨 TCP首部各字段含义

如果不计任选字段,TCP首部通常是20字节,封装在IP数据报中。

image

 

image

 

32位序号

序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。序号是32bit的无符号数,序号到达2^32-1后又从0开始。

 

32位确认序号

确认序号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加1。只有ACK标志(下面介绍)为1时确认序号字段才有效。

 

4位首部长度

首部长度给出首部中32bit字的数目。需要这个值是因为任选字段的长度是可变的。

例如首部长度4位比特是0011,则表示该TCP首部长度为3*8=24字节。

 

 

6个标志比特

URG紧急指针(urgentpointer)有效

ACK确认序号有效。

PSH接收方应该尽快将这个报文段交给应用层。

RST重建连接。

SYN同步序号用来发起一个连接。这个标志和下一个标志将在第18章介绍。

FIN发端完成发送任务。

 

 

16位窗口大小

TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16bit字段,因而窗口大小最大为65535字节。在24.4节我们将看到新的窗口刻度选项,它允许这个值按比例变化以提供更大的窗口。

 

16位检验和

接收端根据此检验和再计算判断该TCP包是否正确(传输过程中是否出错)。

 

16位紧急指针

 

image

 
0000   00 00 03 04 00 06 00 00 00 00 00 00 00 00 08 00
0010   45 00 00 3a 3f 0b 40 00 40 06 6e 5b c0 a8 4d ae
0020   7f 00 00 01 27 0f 22 b8 89 21 72 b2 88 60 63 e4
0030   80 18 02 01 8d 84 00 00 01 01 08 0a 00 55 56 22
0040   00 55 4d b8 68 65 6c 6c 6f 0a  

00 00 03 04 00 06 00 00 00 00 00 00 00 00 08 00			【MAC帧头】
45 00 00 3a 3f 0b 40 00 40 06 6e 5b c0 a8 4d ae 7f 00 00 01 	【IP首部,20字节】
27 0f 							        【源端口,9999】
22 b8 								【目的端口,8888】
89 21 72 b2 							【序号】
88 60 63 e4 							【确认号】
80 								【TCP首部长度,8*4=32字节】 
18 								【01 1000,ACK和PUSH位置1】
02 01								【窗口长度】
8d 84								【检验和】
00 00								【紧急指针】
01 								【NOP】
01								【NOP】
08 0a 00 55 56 22 00 55 4d b8 				        【Timestamps】
68 65 6c 6c 6f 0a						【DATA,68即h,hello\n】

posted @ 2012-11-08 19:56  helloweworld  阅读(3663)  评论(0编辑  收藏  举报