How to analyze UDP protocol
一、套接字(socket)
套接字socket: ip地址 + port端口号。在TCP/IP协议中,它唯一标识网络通讯中的一个进程。套接字用来描述网络连接的 一对一关系。
TCP/IP协议规定,网络数据流应采用 大端字节序,即 (内存)低地址高字节(数据)。
二、UDP_SOCKET 相关
UDP 协议 ---- 用户数据报协议(面向非连接) --- SOCK_DGRAM
h表示host,n表示network,l表示32位长整数,s表示16位短整数。
IPv4地址格式定义在netinet/in.h中,IPv4地址: sockaddr_in结构体,包括16位端口号和32位IP地址
struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; };
三、UDP socket 实例:
//udp_server.c
#include <stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<netinet/in.h> #include<unistd.h> #include<string.h> #include<errno.h> void usage(const char *proc) { printf("%s:[ip][port]\n",proc); } int main(int argc,char *argv[]) { if(argc != 3) { usage(argv[0]); return 1; } char *_ip=argv[1]; int _port=atoi(argv[2]); int sock=socket(AF_INET,SOCK_DGRAM,0); if(sock < 0) { perror("socket"); exit(1); } struct sockaddr_in local; local.sin_family=AF_INET; local.sin_port=htons(_port); local.sin_addr.s_addr=inet_addr(_ip); if(bind(sock,(struct sockaddr*)&local,sizeof(local)) < 0) { perror("bind"); exit(2); } int done=0; char buf[1024]; struct sockaddr_in client; socklen_t len=sizeof(client); while(!done) { ssize_t _size=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,&len); if(_size > 0) { buf[_size]='\0'; printf("[%s : %d]: %s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf); } else if(_size == 0) { printf("client close...\n"); } else {} } return 0; }
//udp_client.c
#include <stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<netinet/in.h> #include<unistd.h> #include<string.h> #include<errno.h> void usage(const char *proc) { printf("%s:[ip][port]\n",proc); } int main(int argc,char *argv[]) { if(argc != 3) { usage(argv[0]); return 1; } char *_ip=argv[1]; int _port=atoi(argv[2]); int sock=socket(AF_INET,SOCK_DGRAM,0); if(sock < 0) { perror("socket"); exit(1); } struct sockaddr_in local; local.sin_family=AF_INET; local.sin_port=htons(_port); local.sin_addr.s_addr=inet_addr(_ip); if(bind(sock,(struct sockaddr*)&local,sizeof(local)) < 0) { perror("bind"); exit(2); } int done=0; char buf[1024]; struct sockaddr_in client; socklen_t len=sizeof(client); while(!done) { ssize_t _size=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,&len); if(_size > 0) { buf[_size]='\0'; printf("[%s : %d]: %s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf); } else if(_size == 0) { printf("client close...\n"); } else {} } return 0; }
运行结果:
The above is the detailed content of How to analyze UDP protocol. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



How to use PHP and UDP protocols to implement asynchronous communication In modern Internet applications, asynchronous communication has become a very important method. By using asynchronous communication, user requests can be processed concurrently without blocking the main thread, improving system performance and response speed. As a popular back-end programming language, PHP how to use UDP protocol to achieve asynchronous communication? This article will introduce how to use the UDP protocol in PHP to implement simple asynchronous communication, and attach specific code examples. 1. Introduction to UDP protocolU

Common UDP port numbers are 53, 69, 161, 2049, 68, and 520. UDP uses port numbers to reserve their own data transmission channels for different applications: 1. Network File System (NFS), the port number is 2049; 2. Simple Network Management Protocol (SNMP), the port number is 161; 3. Domain Name System (DNS) , the port number is 53; 4. Simple File Transfer System (TFTP), the port number is 69; 5. Dynamic Host Configuration Protocol (DHCP), the port number is 68; 6. Routing Information Protocol, the port number is 520, etc.

UDP (User Datagram Protocol) is a lightweight connectionless network protocol commonly used in time-sensitive applications. It allows applications to send and receive data without establishing a TCP connection. Sample Java code can be used to create a UDP server and client, with the server listening for incoming datagrams and responding, and the client sending messages and receiving responses. This code can be used to build real-world use cases such as chat applications or data collection systems.

1. Socket: socket: ip address + port number. In the TCP/IP protocol, it uniquely identifies a process in network communication. Sockets are used to describe a one-to-one relationship between network connections. The TCP/IP protocol stipulates that network data flow should use big-endian byte order, that is, (memory) low address high byte (data). 2. UDP_SOCKET related UDP protocol----User Datagram Protocol (non-connection oriented)---SOCK_DGRAMh represents host, n represents network, l represents 32-bit long integer, and s represents 16-bit short integer. The IPv4 address format is defined in netinet/in.h, IPv4 address: sockadd

UDP provides "connectionless" transport services. The Chinese name of UDP is User Datagram Protocol. It is a connectionless transport layer protocol in the OSI reference model. It provides simple and unreliable transaction-oriented information transmission services; UDP provides applications with a way to send encapsulated data without establishing a connection. IP packet method.

Basic introduction to UDP programming communication classes DatagramSocket and DatagramPacket [data packet/datagram] implement network programs based on the UDP protocol. UDP datagrams are sent and received through the datagram socket DatagramSocket. The system does not guarantee that the UDP datagram will be safely delivered to the destination, nor is it sure when it will arrive. The DatagramPacket object encapsulates a UDP datagram, which contains the IP address and port number of the sender and the IP address and port number of the receiver. Each datagram in the UDP protocol gives complete address information, so there is no need to establish a connection between the sender and the receiver. The two classes/objects at the core of the basic process Da

UDP is a connectionless transport layer protocol that provides a way to send data packets to the network, but does not guarantee the reliability, sequence and integrity of data packets, nor does it provide congestion control and flow control, etc. Function. Characteristics of UDP: 1. No connectivity, no need to establish a connection before sending data, data packets can be sent directly to the target host; 2. High efficiency, the header overhead is small, only 8 bytes; 3. Unreliability, It does not provide the reliability of data packets. After the data packet is sent, it will not be resent even if it is lost, nor does it guarantee the order of the data packets, etc.

The main reason why DNS (DomainNameSystem) uses UDP (UserDatagramProtocol) instead of TCP (TransmissionControlProtocol) is for performance and efficiency considerations. The following explains in detail why DNS chooses to use the UDP protocol: Small requests and fast responses: DNS queries are usually small requests, requiring only a few bytes of data transfer. UDP is a connectionless protocol that does not require establishing a connection before communicating, but instead sends packets to the destination address and waits for a response. This makes UDP more suitable for fast response scenarios than TCP. Low latency: DNS queries generally require low latency to provide fast domain name resolution services.
