TCP协议

TCP协议是TCP/P协议族中另一个重要的协议。和IP协议相比,TCP 协议更靠近应用层,因此在应用程序中具有更强的可操作性。一些重要的socket选项都和TCP协议相关。

TCP头部信息。TCP头部信息出现在每个TCP报文段中,用于指定通信的源端端口号、目的端端口号,管理TCP连接,控制两个方向的数据流。

TCP状态转移过程。TCP 连接的任意一端都是一个状态机。在TCP连接从建立到断开的整个过程中,连接两端的状态机将经历不同的状态变迁。

TCP数据流。通过分析TCP数据流,我们就可以从网络应用程序外部来了解应用层协议和通信双方交换的应用程序数据。

TCP数据流的控制。为了保证可靠传输和提高网络通信质量,内核需要对TCP数据流进行控制。这部分讨论TCP数据流控制的两个方面:超时重传和拥塞控制。

 传输层协议主要有两个: TCP 协议和UDP协议。TCP 协议相对于UDP协议的特点是:面向连接、字节流和可靠传输。
使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源

 TCP协议的这种连接是一对一的,所以基于广播和多播( 目标是多个主机地址)的应用程序不能使用TCP服务。而无连接协议UDP则非常适合于广播和多播。

字节流服务:当发送端应用程序连续执行多次写操作时,TCP模块先将这些数据放入TCP发送缓冲区中,当TCP模块真正开始发送数据时,发送缓冲区中这些等待发送的数据可能被封装成一个或多个TCP报文段发出。因此,TCP模块发送出的TCP报文段的个数和应用程序执行的写操作次数之间没有固定的数量关系。

UDP发送端应用程序每执行一次写操作,UDP就将其封装成一个UDP数据报发送至,接收端必须及时针对每一个UDP数据报执行度操作,否则就会丢包(这经常发生在较慢的服务器上)并且,如果用户没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据将被截断。

TCP传输是可靠的。首先,TCP协议采用发送应答机制,即发送端发送的每个报文段都必须得到接收方的应答,才认为这个TCP报文段传输成功。其次TCP协议采用超时重传机制,发送端在发送出一个TCP报文段之后启动定时器,如果在定时时间内未收到应答,它将重发该报文段。最后,因为TCP报文最终是以IP数据报发送的,而IP数据报到达接收端可能乱序、重复,所以TCP协议还会对接收到的TCP报文段重排、整理,再交付给应用层。

TCP协议_第1张图片

16位端口号(port numbcr):告知主机该报文段是来自哪里(源端口)以及传给哪个上层协议或应用程序(目的端口)的。进行TCP通信时,客户端通常使用系统自动选择的临时端口号,而服务器则使用知名服务端口号。

 32位序号(sequence number):一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。假设主机A和主机B进行TCP通信,A发送给B的第一个TCP报文段中,序号值被系统初始化为某个随机值ISN (Initial SequenceNumber,初始序号值)。那么在该传输方向上(从A到B),后续的TCP报文段中序号值将被系统设置成ISN加上该报文段所携带数据的第--个字节在整个字节流中的偏移。

32位确认号(acknowledgement number〉:用作对另一方 友送来的TCP报文段的响应.其值是收到的TCP报文段的序号值加1。假没主机A和主机B迸行TCP通信.那么A发送出的TCP扱文段不仅携帯自己的序号,而且包含対B发送来的TCP报文段的确认号反之,B发送出的TCP报文段也同时携帯自己的序号和対A发送来的报文段的确认号.

4位头部长度:标识该TCP头部有多少个字(4字节)因为4位最大能表示15,所以TCP头部最长是60字节。

6位标志位包含如下几项:

URG标志:表示紧急指针是否有效。

ACK标志:表示确认好是否有效

PSH标志:提示接收端应用程序应该立即从TCP接受缓冲区中读走数据,为接受后续数据腾出空间

RAT标志:表示要求对方重新建立连接,我们称携带PST标志的TCP报文段为复位报文段。

SYN标志:表示请求建立一个连接。我们称携带SYN标志的TCP报文段为同步报文段。

FIN标志:表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP报文段为结束报文段。

16位窗口大小:是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。

16位校验和:由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意:这个校验不仅包括TCP头部,也包括数据部分。这是TCP可靠传输的一个重要保障。

16位紧急指针:是一个正的偏移量。

TCP的连接:

TCP把连接作为最基本的抽象。TCP的许多特性都与TCP是面向连接的这个基本特征有关。

每一个TCP有两个端点。不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字或插口。端口号拼接到IP地址即构成了套接字。因此套接字的表示方法是在点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开。每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。

TCP的可靠传输的实现:

1、以字节为单位的滑动窗口,TCP的滑动窗口是以字节为单位的。

TCP协议_第2张图片

       发送窗口表示:在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都不必须暂时保留,以便在超时重传时使用。

       发送窗口里的序号表示允许发送的序号。显然,窗口越大,发送方就可以在收到对方确认之前发送更多的数据,因而可能获得更高的传输效率。但接收方必须来得及处理这些收到的数据。

       发送窗口后沿的后面部分表示已经发送且已经收到了确认。这些数据显然不需要再保留了。而发送窗口前沿的前面部分表示不允许发送的。因为接收方都没有为这部分数据保留临时存放的缓存空间

       发送窗口的位置由前沿和后沿的位置共同确定。发送窗口后沿的变化情况有两种可能,即不动(没有收到新的确认)和前移(收到了新的确认)。发送窗口后沿不可能向后移动,因为不能撤销掉已收到的确认发送窗口通常是不断向前移动,但也有可能不动。这对应于两种情况:一是没有收到新的确认,对方通知的窗口大小也不变。二是收到了新的确认但对方通知的窗口缩小了,使得发送窗口前沿正好不动。发送窗口前沿也有可能向后收缩。这发生在对方通知的窗口缩小了,但TCP的标准强烈不赞成这样做。

2、超时重传:

       TCP的发送方在规定时间内没有收到确认就要重传已发送的报文段。这种重传的概念是很简单的,但重传时间却是TCP最复杂的问题之一。由于TCP的下层是互联网环境,发送的报文段可能只经过一个高速率的局域网,也可能经过多个低速率的网络,并且每个IP数据报所选择的路由还可能不同,如果把超时重传时间设置的太短,就会引起很多报文段的不必要的重传,使网络负荷增大。但若把超时重传时间设置得过长,则又使网络的空闲时间增大,降低了传输效率。

3、选择确认SACK:若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,那么能否值传送缺少的数据而不重传已经正确到达接收方的数据。选择确认就是一种可行的处理方法。

TCP的流量控制:利用滑动窗口实现流量控制

一般来说,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方可能来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

TCP的拥塞控制:在计算机网络中的链路容量(即带宽)、交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。

 


 

你可能感兴趣的:(Linux,网络)