tcp与udp的区别

来源:互联网 发布:关于程序员的电影 编辑:程序博客网 时间:2024/06/05 05:42

摘抄<<linux高性能服务器编程>>

传输层主要有两个协议:tcp协议和udp协议。
tcp协议的主要特点:面向连接的流式可靠地服务。
udp协议的主要特点:无连接不可靠的数据报服务。
使用tcp协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须位该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。tcp连接是全双工的,
即双方的数据读写可以通过一个连接进行。完成数据交换后,通信双方都必须断开连接以释放系统资源。
tcp协议的这种连接是一对一的,所以基于广播和多播(目标是多个主机的地址)的应用程序不能使用tcp服务,而无连接的udp则非常适合于广播和多播。
当发送端应用程序连续执行多次写操作时,tcp模块先将这些数据放入tcp发送缓冲区中。当tcp模块真正开始发送数据时,发送缓冲区中这些等待发送的数据可能被封装成一个或多个tcp报文段发出。因此,tcp模块发送出的tcp保温断奶的个数和应用程序执行的写操作次数之间没有数量关系。
当接收端收到一个或多个tp报文段后,tcp模块将他们携带的应用程序数据按照tcp报文段的序号一次放入tcp接收缓冲区中,并通知应用程序读取数据。接收端应用程序可以一次性把tcp接收缓冲区中的数据全部读出,也可以分多次读取,这取决于用户指定的应用程序缓冲区的大小。
综上所述,发送端执行写操作的次数与接收端执行读操作的次数没有任何数量关系,这就是字节流的概念:应用程序对数据的发送和接收是没有边界限制的。
udp则不然,发送端应用程序每执行一次写操作,udp模块就将其封装成一个udp数据报发送,接收端必须及时针对每一个udp数据报执行读操作(通过recvfrom系统调用),否则就会丢包(经常发生在较慢的服务器上)。并且,如果用户没有指定足够的应用程序缓冲区来读取udp数据,则udp数据将被截断。





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

原创粉丝点击