TCP与UDP的联系与区别(以及网络字节序与主机字节序的转换函数实践)
TCP与UDP的联系
TCP:是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。
UDP:是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。
TCP与UDP的区别
(1)TCP保证数据正确性与数据的顺序,而UDP不保证并可能丢包。
(2)TCP面向连接,即打电话要先拨号建立连接,而UDP是无连接的,即发送数据之前不需要建立连接。因此TCP可以提供可靠的服务,而UDP不行。通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
(3)每一条TCP连接只能是点到点的,而UDP是支持一对一,一对多,多对一和多对多的交互通信。因此TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
(4)TCP是面向字节流的,实际上是TCP把数据看成一连串无结构的字节流。而UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。这对实时应用很有用,如IP电话,实时视频会议等。
网络字节序与主机字节序的转换函数实践
Linux socket网络编程中,经常会使用下面四个C标准库函数进行字节序间的转换,并需要头文件arpa/inet.h。
1 #include <arpa/inet.h> 2 3 uint32_t htonl(uint32_t hostlong); //把uint32_t类型从主机序转换到网络序 4 uint16_t htons(uint16_t hostshort); //把uint16_t类型从主机序转换到网络序 5 uint32_t ntohl(uint32_t netlong); //把uint32_t类型从网络序转换到主机序 6 uint16_t ntohs(uint16_t netshort); //把uint16_t类型从网络序转换到主机序
注:
1、在使用小端字节序的系统中,也就是主机字节序和网络字节序不同,所以这些函数会把字节序进行转换
2、在使用大端字节序的系统中,也就是主机字节序和网络字节序相同,不需要转换,这些函数会定义成空宏
代码参考:https://blog.csdn.net/K346K346/article/details/79053136
浙公网安备 33010602011771号