主页 > 创业  > 

UDP协议(20250303)

UDP协议(20250303)
1. UDP

UDP:用户数据报协议(User Datagram Protocol),传输层协议之一(UDP,TCP)

2. 特性          发送数据时不需要建立链接,节省资源开销不安全不可靠的协议        //一般用在实时性比较高的广播,组播//VNC面向报文。资源开销小 3.框架 3.1 C/S模式

有一个专用的客户端  client----server

传输方式:用户主机1--->服务器---->用户主机2

框架设计

server:socket() ===>bind()===>recvfrom()===>close()client:socket() ===>(bind())===>sendto() ===>close() 3.2 B/S模式

有一个通用的客户端浏览器

browser----server

client:socket() ===>sendto() ===>close()

4. API接口

4.1 socket函数

套接字:通信对象的抽象, 网络通信的端口,一个通信链的句柄。         int socket(int domain, int type, int protocol); 功能:         创建一个用来通信的接口(文件描述符) 参数:         domain:通信的协议族(AF_INET:IPv4协议族) type:         SOCK_DGRAM:数据报套接字    (UDP使用此类型)         SOCK_STEAM:流式套接字    (TCP使用此类型)         SOCK_RAW:原始套接字 protocol:         默认传0 按照协议的默认属性创建 返回值:         成功返回用来进行通信的文件描述符         失败返回-1

IPv4地址形式:         struct sockaddr_in {            sa_family_t    sin_family; /* AF_INET */            in_port_t      sin_port;   /* 端口 */            struct in_addr sin_addr;   /* IP地址 */        };

       /* Internet address. */        struct in_addr {            uint32_t       s_addr;     /* address in network byte order */        };

端口转换:htons函数

地址转换:inet_addr函数

4.2 sendto函数       ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,                       const struct sockaddr *dest_addr, socklen_t addrlen); 功能:         向一个IP地址和端口发送数据信息         端口号:区分一台主机不同的应用程序(0 - 65535) 参数:         sockfd:套接字文件描述符         buf:发送数据空间首地址         len:发送数据的长度         flags:发送数据属性(默认为0)         dest_addr:目的IP地址和端口         addrlen:目的IP地址和端口的长度 返回值:         成功返回实际发送字节数         失败返回-1 

 4.3 htons函数

        主机转网络字节序

主机:小端   host网络:大端   network

四种不同的转化函数

uint32_t htonl(uint32_t hostlong);          主机转网络uint16_t htons(uint16_t hostshort);         主机转网络uint32_t ntohl(uint32_t netlong);           网络转主机uint16_t ntohs(uint16_t netshort);          网络转主机

        h:host        n:net         l:long         s:short 

4.4 inet_addr函数

        in_addr_t inet_addr(const char *cp); 功能:         将字符串IP地址转换成二进制IP地址形式

        char *inet_ntoa(struct in_addr in); 功能:         将二进制ip转换成字符串

4.5 bind         int bind(int sockfd, const struct sockaddr *addr,                 socklen_t addrlen); 功能:将一个套接字与IP地址和端口号绑定(只能绑定自己的IP地址) 参数:         sockfd:套接字文件描述符          addr:IP地址和端口号结构体首地址         addrlen:长度 返回值:         成功返回0         失败返回-1 

4.6 recvfrom

      ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,                         struct sockaddr *src_addr, socklen_t *addrlen); 功能:         接收网络发送的数据信息 参数:         sockfd:套接字文件描述符         buf:存放数据空间首地址         len:最大能够接收的数据个数         flags:属性默认为0         src_addr:存放发送端IP地址信息的空间首地址         addrlen:想要接收的数据长度的空间首地址 返回值:         成功返回实际接收字节数         失败返回-1 

具有阻塞功能(直到接收到数据,才会继续向下执行)

 5. UDP报文头

        UDP首部有8个字节,由4个字段构成,每个字段都是两个字节

源端口: 源主机的应用程序使用的端口号目的端口:目的主机的应用程序使用的端口号 长度:是指UDP头部和UDP数据的字节长度。因为UDP头 部长度为8字节,所以该字段的最小值为8差错检测,检测UDP数据报在传输中是否有错,有错则丢弃  总结 无连接尽最大努力交付(不安全,不可靠(丢包、乱序))面向数据报机制简单,传输效率高

应用场景:要求实时性高,但是允许数据丢失的场合(直播,VNC) 

标签:

UDP协议(20250303)由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“UDP协议(20250303)