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

相关文章
|
3月前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
99 1
UDP 协议和 TCP 协议
|
5天前
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
|
20天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
47 3
|
5月前
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
295 2
|
1月前
|
网络协议 SEO
TCP连接管理与UDP协议IP协议与ethernet协议
TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
39 4
|
3月前
|
网络协议
UDP 协议
UDP 协议
137 58
|
2月前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
50 1
|
2月前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
157 3
|
2月前
|
存储 网络协议 算法
更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】
UDP和TCP各有所长,UDP以其低延迟、轻量级的特点适用于对实时性要求极高的应用,而TCP凭借其强大的错误检测、流量控制和拥塞控制机制,确保了数据的可靠传输,适用于文件传输、网页浏览等场景。理解它们的工作原理,特别是UDP的缓冲区管理和TCP的8种策略,对于优化网络应用的性能、确保数据的高效和可靠传输至关重要。开发者在选择传输层协议时,应根据实际需求权衡利弊,合理利用这两项关键技术。
84 5
|
2月前
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
80 1