TCP协议是传输层中使用最为广泛的一协议,它可以向上层提供面向连接的协议,使上层启动应用程序,以确保网络上所发送的数据报被完整接收。就这种作用而言,TCP 的作用是提供可靠通信的有效报文协议。一旦数据报被破坏或丢失,通常是TCP 将其重新传输,而不是应用程序或IP协议。
TCP 必须与低层的 IP(使用IP定义好的方法)和高层的应用程序(使用TCP-ULP元语)进行通信。TCP还必须通过网络与其他TCP软件进行通信。为此,它使用了协议数据单元(PDU),在TCP用语中称为分段。
TCP PDU (通常称为TCP报头)的分布如图12.5 所示:
图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所示:
图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层传输数据。