传输协议层协议之TCP

TCP协议的特点:面向连接,字节流,可靠传输。

使用TCP协议的双方必须先建立连接,然后才能开始数据的读写。TCP的链接是全双工的,即双方可以通过同意连接进行读写。完成数据交换以后,双方必须断开以释放系统资源。

TCP的链接是一对一的,所以不适用于广播和多播。

那么什么是字节流服务?我们在这里主要与数据报服务作区分。对应到实际编程中,体现为通信双方是否必须执行相同数据的读写操作。TCP有一个发送缓冲区,每次TCP发送数据的时候,都会先将数据发送到发送缓冲区里面,之后,发送缓冲区中的数据可能会被封装成一个或多个TCP报文段发出。因此,TCP发送数据的次数与应用程序执行写操作的次数不必一致。

如下图所示:(图片来自《Linux高性能服务器》)

 而UDP则不同,它的发送端每次执行一次写操作,UDP就将其封装成一个数据报发送出去,接收端必须及时对每个UDP数据报进行写操作,否则将会丢包。此外,如果客户没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据将会被截断。

以下是UDP数据报服务的示意图:

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

猜你喜欢

转载自blog.csdn.net/shang_12266029/article/details/88608718