**基于连接
基于连接有几个层面的意思:
TCP是全双工的。
连接是一对一的,所以基于广播和多播(目标是多个主机地址)的应用程序不能使用TCP服务。而无连接协议UDP则非常适合于广播和多播。
基于流
TCP基于流,UDP基于数据报;这种区别对应到实际编程操作中,体现为通信双方是否必须执行相同次数的读写操作。
TCP基于流,流没有写入数据大小的限制,我们分好几次写入数据到发送缓冲区,当TCP模块真正开始发数据,可能一个TCP报文段就发完了,所以TCP模块发出TCP报文段的个数和应用程序执行的写操作次数没有固定的数量关系。
收到一个或多个TCP报文段后,TCP模块将他们携带的应用程序数据按照TCP报文段的序号依次放入TCP接收缓冲区中,并通知应用程序读取数据。接收端应用程序可以一次性将TCP接收缓冲区中的数据全部读出,也可以分多次读,这取决于用户指定的应用程序读缓冲区的大小。
而UDP,发送端应用程序每执行一次写操作,UDP模块就把它封装为一个UDP数据报并发送之。接收端必须及时针对每一个UDP数据报执行读操作,否则就会丢包。并且,如果用户分配的应用程序缓冲区空间不足,UDP数据将被截断。
可靠的
TCP通过发送应答、超时重传、窗口控制,排序整理实现可靠交付。
UDP则是发完就不管了。数据确认和超时重传都需要上层协议来处理。