TCP协议是TCP/IP协议族中另一个重要的协议。和IP协议相比TCP协议更靠近利用层,因此在利用程序中具有更强的可操作性。一些重要的 socket选项都和TCP协议相干。
TCP服务的特点
传输层协议重要有两个:TCP协议和UDP协议。TCP协议相对于UDP协议的特点是:面向连接、字节流和可靠传输。
应用TCP协议通信的双方一定要先建立连接,然后才干开端数据的读写。双方都一定要为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都一定要断开连接以释放系统资源。
TCP协议的这种连接是一对一的,所以基于广播和多播(目标是多个主机地址)的利用程序不能应用TCP服务。而无连接协议UDP则非常合适于广播和多播。
节流服务和数据报服务的差别。这种差别对应到实际编程中,则体现为通信双方是不是一定要履行雷同次数的读、写操作(当然,这只是表现情势)。当发送端利用程序持续履行多次写操作时,TCP模块先将这些数据放入TCP发送缓冲区中。当TCP模块真正开端发送数据时,发送缓冲区中这些等候发送的数据可能被封装成一个或多个TCP报文段发出。因此,TCP模块发送出的TCP报文段的个数和利用程序履行的写操作次数之间没有固定的数量关系。
当吸收端收到一个或多个TCP报文段后,TCP模块将它们携带的利用程序数据按照TCP报文段的序号(见后文)依次放入TCP吸收缓冲区中,并通知利用程序读取数据。吸收端利用程序可以一次性将TCP吸收缓冲区中的数据全部读出,也可以分多次读取,这取决于用户指定的利用程序读缓冲区的大小。因此,利用程序履行的读操作次数和TCP模块吸收到的TCP报文段个数之间也没有固定的数量关系。
综上所述,发送端履行的写操作次数和吸收端履行的读操作次数之间没有任何数量关系,这就是字节流的概念:利用程序对数据的发送和吸收是没有边界限制的。UDP则不然。发送端利用程序每履行一次写操作UDP模块就将其封装成一个UDP数据报并发送之。吸收端一定要及时针对每一个UDP数据报履行读操作(通过 recvfrom系统调用),否则就会丢包(这经常产生在较慢的服务器上)。并且,如果用户没有指定足够的利用程序缓冲区来读取UDP数据,则UDP数据将被截断。
图1-1和图1-2显示了TCP字节流服务和UDP数据报服务的上述差别。两图中省略了传输层以下的通信细节。
TCP传输是可靠的。首先,TCP协议采用发送应答机制,即发送端发送的每个TCP报文段都一定要得到吸收方的应答,才认为这个TCP报文段传输成功。其次,TCP协议采用超时重传机制,发送端在发送出一个TCP报文段之后启动定时器,如果在定时时间内未收到应答,它将重发该报文段。最后,因为TCP报文段最终是以IP数据报发送的,而P数据报达到吸收端可能乱序、重复,所以TCP协议还会对吸收到的TCP报文段重排、收拾,再交付给利用层。
UDP协议则和IP协议一样,供给不可靠服务。它们都需要上层协议来处理数据确认和超时重传。
TikTok千粉号购买平台:https://tiktokusername.com/
TOP