UDP 协议详解

简介: UDP 协议详解

1、简介


UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议


UDP 是无连接的,知道对方的IP和端口号直接进行传输就行,不需要建立连接


UDP 不可靠,没有任何可靠机制,即便发送失败也不会返回任何错误信息


UDP 面向数据报,发多少就收多少,原样发送,交给UDP的报文,UDP不会拆分或合并


UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。


UDP 支持一对一、一对多、多对一和多对多的交互通信


缓冲区:只有接收缓冲区,没有发送缓冲区,接收缓冲区满了,多的直接丢弃


2. 首部说明:

首部由四个字段构成,每个字段都是 2byte

1fe837c796e940d889391bd40b097f4f.png


源端口: 源端口号,需要对方回信时选用,不需要时全部置0.

目的端口:目的端口号,在终点交付报文的时候需要用到。

长度:UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部),由于长度只有16位,所有UDP一次能发送的数据最大就是 64K

校验和:检测UDP数据报在传输中是否有错,有错则丢弃。


3. 回显服务器代码案例 echoServer

UdpServer


package echo;
import java.net.*;
import java.util.Arrays;
import java.io.IOException;
public class UdpServer {
    private static int PORT = 2222;
    private DatagramSocket socket;
    public UdpServer() throws SocketException {
        socket = new DatagramSocket(PORT);
    }
    public void start() throws IOException {
        byte[] bytes = new byte[2048];
        DatagramPacket receivePacket = new DatagramPacket(bytes, bytes.length);
        socket.receive(receivePacket);
        System.out.printf("ClientAddress: %s\nClientPort: %d\n",
                receivePacket.getAddress(),receivePacket.getPort());
        System.out.println("ClientData:"+ new String(receivePacket.getData(),"utf-8"));
        DatagramPacket sendPacket = process(receivePacket);
        socket.send(sendPacket);
    }
    public DatagramPacket process(DatagramPacket packet){
        DatagramPacket packet1 = new DatagramPacket(packet.getData(),packet.getLength(),
                packet.getSocketAddress());
        return packet1;
    }
    public static void main(String[] args) throws IOException {
        UdpServer server = new UdpServer();
        server.start();
    }
}

UdpClient

package echo;
import java.net.*;
import java.io.IOException;
import java.util.Scanner;
public class UdpClient {
    public void start() throws IOException {
        DatagramSocket socket = new DatagramSocket();
        byte[] bytes = new byte[2048];
        System.out.println("请输入你想发送给服务器的信息:");
        Scanner scanner = new Scanner(System.in);
        String str  =scanner.nextLine();
        bytes = str.getBytes();
        DatagramPacket sendPacket = new DatagramPacket(bytes,bytes.length,
                new InetSocketAddress("localhost",2222));
        socket.send(sendPacket);
        DatagramPacket receivePacket = new DatagramPacket(new byte[2048],2048);
        socket.receive(receivePacket);
        System.out.println(new String(receivePacket.getData(),"utf-8"));
    }
    public static void main(String[] args) throws IOException {
        UdpClient client = new UdpClient();
        client.start();
    }
}

5f9fdfb6220945678e5cd7bc365ef43e.png

相关文章
|
1月前
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
113 2
|
5天前
|
网络协议 视频直播 SDN
计算机网络:TCP协议的三次握手和四次挥手与UDP协议区别.
计算机网络:TCP协议的三次握手和四次挥手与UDP协议区别.
16 1
|
4天前
|
存储 缓存 网络协议
用户态协议栈01-udp收发
用户态协议栈01-udp收发
|
19天前
|
网络协议 网络性能优化
用udp协议传输文件
【7月更文挑战第18天】使用 UDP 协议传输文件 UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输协议。尽管它不像 TCP 那样提供可靠的传输和拥塞控制,但在某些特定场景下,例如对实时性要求较高、能容忍一定数据丢失的情况,也可以用于文件传输。
|
20天前
|
网络协议 Java 数据处理
(一)Java网络编程之计网基础、TCP-IP协议簇、TCP、UDP协议及腾讯QQ通信原理综述
就目前而言,多数网络编程的系列的文章都在围绕着计算机网络体系进行阐述,但其中太多理论概念,对于大部分开发者而言,用途甚微。因此,在本系列中则会以实际开发者的工作为核心,从Java程序员的角度出发,详细解读Java的网络编程核心内容。
|
2月前
|
缓存 网络协议 网络性能优化
运输层---UDP协议
运输层---UDP协议
25 3
|
3月前
|
域名解析 缓存 网络协议
|
2月前
|
缓存 网络协议 算法
TCP传输协议与UDP传输协议的特点与分析
网络协议如同人与人之间相互交流是需要遵循一定的规则(如语言)一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。 OSI参考模型和TCP/IP模型在不同的层次中有许多不同的网络协议,如图所示: 我们今天主要讨论的是传输层的协议,即考虑应用程序之间的逻辑通信。简单来说就是数据该如何发送给其他机器;
|
1月前
|
缓存 网络协议 网络性能优化
计算机网络—传输层-tcp、udp协议详解
计算机网络—传输层-tcp、udp协议详解
|
2月前
|
网络协议 应用服务中间件 网络性能优化
解析TCP /UDP协议的 socket 调用的过程
【6月更文挑战第2天】该文介绍了传输层的两种主要协议TCP和UDP的区别。TCP是面向连接、可靠的,提供顺序无错的数据传输,而UDP则是无连接、不可靠的,不保证数据顺序或不丢失。