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

posted @ 2022-10-09 16:15  Lsiqi  阅读(69)  评论(0)    收藏  举报