TCP报文段:TCP传送的数据单元称为报文段。一个TCP报文段可分为TCP首部和TCP数据两部分,整个TCP段作为IP数据报的数据部分封装在IP数据报中,如下图所示。其首部的前20个字节是固定的。TCP报文段的首部最短为20字节,后面有4N字节是根据需要而增加的选项,通常长度为4字节的整数倍。
TCP报文段既可以用于运载数据,也可以用来建立、释放连接和应答。
各个字段意义如下:
(1) 源端口和目的端口字段 各占2个字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
(2) 序号字段 占4个字节。TCP是面向字节流的,就是说TCP传输时按照一个一个字节来传送的,所以TCP的连接传输的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
例如一个报文段的序号字段值是301,而携带的数据共有100个字节,这就表明本报文段的数据最后一个字段序号是400,故下一个报文段的数据序号应从401开始。
(3) 确认号字段 占四个字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号==N,则表明收到N-1为止的所有数据都已经正确收到。
(4) 数据偏移(即首部长度) 占4位,这里不是IP数据分片的那个数据偏移,而是表示首部,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。
“数据偏移”的单位是32位(以4个字节为单位)。因此当此字段值为15时,达到TCP首部最大长度60字节。
(5) 保留字段:占6位,保留今后使用,但当前应置为0,该字段可忽略不计
(6) 紧急位URG 当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送。但是URG需要和紧急指针配套使用,也就是说数据从第一个字节到紧急指针所指字节就是紧急数据。
(7) 确认位ACK 只有当ACK=1时确认号字段才有效。当ACK=0时确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1.
(8) 推送位PSH接收TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都满后再向上交付。
(9) 复位位RST当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。
(10) 同步位SYN 同步SYN=1表示这是一个连接请求或连接接收报文。
当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。即,SYN=1就表示这是一个连接请求或连接接收报文。