Bagaimana untuk menganalisis protokol UDP
一、套接字(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; }
运行结果:
Atas ialah kandungan terperinci Bagaimana untuk menganalisis protokol UDP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menggunakan protokol PHP dan UDP untuk melaksanakan komunikasi tak segerak Dalam aplikasi Internet moden, komunikasi tak segerak telah menjadi kaedah yang sangat penting. Dengan menggunakan komunikasi tak segerak, permintaan pengguna boleh diproses secara serentak tanpa menyekat utas utama, meningkatkan prestasi sistem dan kelajuan tindak balas. Sebagai bahasa pengaturcaraan back-end yang popular, PHP bagaimana menggunakan protokol UDP untuk mencapai komunikasi tak segerak? Artikel ini akan memperkenalkan cara menggunakan protokol UDP untuk melaksanakan komunikasi tak segerak yang mudah dalam PHP dan melampirkan contoh kod tertentu. 1. Pengenalan kepada UDP protocolU

Nombor port UDP biasa ialah 53, 69, 161, 2049, 68, dan 520. UDP menggunakan nombor port untuk menempah saluran penghantaran data mereka sendiri untuk aplikasi yang berbeza: 1. Sistem Fail Rangkaian (NFS), nombor port ialah 2049. Protokol Pengurusan Rangkaian Mudah (SNMP), nombor port ialah 161 Sistem (DNS), nombor port ialah 53; 4. Sistem Pemindahan Fail Mudah (TFTP), nombor port ialah 69. Protokol Konfigurasi Hos Dinamik (DHCP), nombor port ialah 68 nombor port ialah 520, dsb.

UDP (User Datagram Protocol) ialah protokol rangkaian tanpa sambungan ringan yang biasa digunakan dalam aplikasi sensitif masa. Ia membenarkan aplikasi menghantar dan menerima data tanpa membuat sambungan TCP. Contoh kod Java boleh digunakan untuk mencipta pelayan dan klien UDP, dengan pelayan mendengar datagram masuk dan bertindak balas, dan klien menghantar mesej dan menerima respons. Kod ini boleh digunakan untuk membina kes penggunaan dunia sebenar seperti aplikasi sembang atau sistem pengumpulan data.

1. Soket: soket: alamat ip + nombor port. Dalam protokol TCP/IP, ia secara unik mengenal pasti proses dalam komunikasi rangkaian. Soket digunakan untuk menerangkan hubungan satu dengan satu antara sambungan rangkaian. Protokol TCP/IP menetapkan bahawa aliran data rangkaian harus menggunakan susunan byte big-endian, iaitu, (memori) alamat rendah bait tinggi (data). 2. Protokol UDP berkaitan UDP_SOCKET----Protokol Datagram Pengguna (bukan berorientasikan sambungan)---SOCK_DGRAMh mewakili hos, n mewakili rangkaian, l mewakili integer panjang 32-bit, dan s mewakili integer pendek 16-bit. Format alamat IPv4 ditakrifkan dalam netinet/in.h, alamat IPv4: sockadd

UDP menyediakan perkhidmatan pengangkutan "tanpa sambungan". Nama Cina UDP ialah User Datagram Protocol Ia adalah protokol lapisan pengangkutan tanpa sambungan dalam model rujukan OSI Ia menyediakan perkhidmatan penghantaran maklumat berorientasikan transaksi yang mudah dan tidak boleh dipercayai. kaedah paket IP.

Pengenalan asas kepada kelas komunikasi pengaturcaraan UDP DatagramSocket dan DatagramPacket [paket data/datagram] melaksanakan program rangkaian berdasarkan protokol UDP. Datagram UDP dihantar dan diterima melalui soket datagram DatagramSocket Sistem tidak menjamin bahawa datagram UDP akan selamat dihantar ke destinasi, dan tidak pasti bila ia akan tiba. Objek DatagramPacket merangkum datagram UDP, yang mengandungi alamat IP dan nombor port penghantar dan alamat IP dan nombor port penerima. Setiap datagram dalam protokol UDP memberikan maklumat alamat lengkap, jadi tidak perlu mewujudkan sambungan antara pengirim dan penerima. Dua kelas/objek pada teras proses asas Da

UDP ialah protokol lapisan pengangkutan tanpa sambungan yang menyediakan cara untuk menghantar paket data ke rangkaian, tetapi tidak menjamin kebolehpercayaan, urutan dan integriti paket data, dan juga tidak menyediakan kawalan kesesakan dan kawalan aliran, dsb. Fungsi. Ciri-ciri UDP: 1. Tiada sambungan, tidak perlu membuat sambungan sebelum menghantar data, paket data boleh dihantar terus ke hos sasaran 2. Kecekapan, overhed pengepala adalah kecil, hanya 8 bait 3. Tidak boleh dipercayai; tidak memberikan kebolehpercayaan paket data Selepas paket data dihantar, ia tidak akan dihantar semula walaupun ia hilang, dan juga tidak menjamin susunan paket data, dsb.

Sebab utama mengapa DNS (DomainNameSystem) menggunakan UDP (UserDatagramProtocol) dan bukannya TCP (TransmissionControlProtocol) adalah untuk pertimbangan prestasi dan kecekapan. Perkara berikut menerangkan secara terperinci mengapa DNS memilih untuk menggunakan protokol UDP: Permintaan kecil dan respons pantas: Pertanyaan DNS biasanya permintaan kecil, hanya memerlukan beberapa bait pemindahan data. UDP ialah protokol tanpa sambungan yang tidak memerlukan sambungan sebelum berkomunikasi, sebaliknya menghantar paket data ke alamat destinasi dan menunggu respons. Ini menjadikan UDP lebih sesuai untuk senario respons pantas daripada TCP. Kependaman rendah: Pertanyaan DNS biasanya memerlukan kependaman rendah untuk menyediakan perkhidmatan resolusi nama domain yang pantas.
