TCP协议是传输层中使用最为广泛的一协议,它可以向上层提供面向连接的协议,使上层启动应用程序,以确保网络上所发送的数据报被完整接收。就这种作用而言,TCP 的作用是提供可靠通信的有效报文协议。一旦数据报被破坏或丢失,通常是TCP 将其重新传输,而不是应用程序或IP协议。               

     TCP 必须与低层的 IP(使用IP定义好的方法)和高层的应用程序(使用TCP-ULP元语)进行通信。TCP还必须通过网络与其他TCP软件进行通信。为此,它使用了协议数据单元(PDU),在TCP用语中称为分段。                          

     TCP PDU (通常称为TCP报头)的分布如图12.5 所示:

Linux-TCP协议_linux

 

图12.5 TCP 协议数据单元

 

部分域含义如下:

·本机端口:标识本机TCP用户(通常为上层应用程序)的16位域 

·远端端口:标识远程计算机TCP用户的16位域 

·序号:指明当前时钟在全文中位置的序号。也可用在两个TCP之间以提供初始发送            序号(ISS)。

·确认号:指明下一个预计序列的序号。反过来,它还可以表示最后接受数据的序               号,表示最后接受的序号加1。

·数据偏移:用于标识数据段的开始。

·URG:如果打开(值为1),则指明紧急指针域有效。

·ACK:如果打开,则指明确认域有效。

·RST:如果打开,则指明要重复连接。

·SYN:如果打开,则指明要同步的序号。

·FI N:如果打开,则指明发送双方不再发送数据。这与传输结束标志是相同的。

这些域在TCP连接和传输数据时会用到。

 

TCP 对如何通信有许多规则。这些规则以及TCP连接、传输要遵循的过程,通常都体现在状态数据报中(因为TCP是一个状态驱动协议,其行为取决于状态标志或类似结构)。要完全避免复杂的状态数据报是很困难的,所以流程图对理解TCP是一种很有效的方法。下面我们就以TCP连接的流程图为例,介绍TCP的工作原理。如图12.6所示:

Linux-TCP协议_linux_02

 

图12.6 TCP连接示意图

此过程以计算机A的TCP开始,TCP可从它的ULP接收连接请求,通过它向计算机B 发送一个主动打开原语,所构成的分段应设置SYN标志(值为1),并分配一个序列号M。上图用SYN 50所示,SYN标志打开,序号M用50表示,可任意选择。

计算机B上的应用程序将向它的TCP发送一个被动打开指令,当接受到SYN M分段时,计算机B上的TCP 将序号M+1 发回一个确认给计算机A,上图用ACK 51表示。计算机B 也为自己设置一个初始发送序号N,上图用SYN 200表示。

计算机A根据接收到的内容,通过将序号设置为N+1 ,发回他自己的确认报文,上图用ACK 201表示。然后,打开并确认此次连接,计算机A和计算机B通过ULP将连接打开报文发送到请求的应用程序。

至此两台计算机建立了连接,可以在TCP层传输数据。