• UDP 协议详解


    目录

    谈谈传输层:

    UDP协议

    首部说明

    回显服务器代码案例 echoServer

    TCP协议

    TCP和UDP区别


    UDP和TCP都是传输层的重要协议,也是学习网络的必备内容了,接下来这篇我们就详细分析一下这两者的内容,以及这两者的区别。

    谈谈传输层:

    传输层是TCP/IP协议五层模型中的第四层。它提供了应用程序间的通信,它负责数据能够从发送端传输到接收端。

    其功能包括:一、格式化信息流;二、提供可靠传输

    UDP协议

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

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

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

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

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

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

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

    首部说明

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

    • 源端口: 源端口号,需要对方回信时选用,不需要时全部置0.
    • 目的端口:目的端口号,在终点交付报文的时候需要用到。
    • 长度:UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部),由于长度只有16位,所有UDP一次能发送的数据最大就是 64K
    • 校验和:检测UDP数据报在传输中是否有错,有错则丢弃。

    回显服务器代码案例 echoServer

        UdpServer

    1. package echo;
    2. import java.net.*;
    3. import java.util.Arrays;
    4. import java.io.IOException;
    5. public class UdpServer {
    6. private static int PORT = 2222;
    7. private DatagramSocket socket;
    8. public UdpServer() throws SocketException {
    9. socket = new DatagramSocket(PORT);
    10. }
    11. public void start() throws IOException {
    12. byte[] bytes = new byte[2048];
    13. DatagramPacket receivePacket = new DatagramPacket(bytes, bytes.length);
    14. socket.receive(receivePacket);
    15. System.out.printf("ClientAddress: %s\nClientPort: %d\n",
    16. receivePacket.getAddress(),receivePacket.getPort());
    17. System.out.println("ClientData:"+ new String(receivePacket.getData(),"utf-8"));
    18. DatagramPacket sendPacket = process(receivePacket);
    19. socket.send(sendPacket);
    20. }
    21. public DatagramPacket process(DatagramPacket packet){
    22. DatagramPacket packet1 = new DatagramPacket(packet.getData(),packet.getLength(),
    23. packet.getSocketAddress());
    24. return packet1;
    25. }
    26. public static void main(String[] args) throws IOException {
    27. UdpServer server = new UdpServer();
    28. server.start();
    29. }
    30. }

     UdpClient

    1. package echo;
    2. import java.net.*;
    3. import java.io.IOException;
    4. import java.util.Scanner;
    5. public class UdpClient {
    6. public void start() throws IOException {
    7. DatagramSocket socket = new DatagramSocket();
    8. byte[] bytes = new byte[2048];
    9. System.out.println("请输入你想发送给服务器的信息:");
    10. Scanner scanner = new Scanner(System.in);
    11. String str =scanner.nextLine();
    12. bytes = str.getBytes();
    13. DatagramPacket sendPacket = new DatagramPacket(bytes,bytes.length,
    14. new InetSocketAddress("localhost",2222));
    15. socket.send(sendPacket);
    16. DatagramPacket receivePacket = new DatagramPacket(new byte[2048],2048);
    17. socket.receive(receivePacket);
    18. System.out.println(new String(receivePacket.getData(),"utf-8"));
    19. }
    20. public static void main(String[] args) throws IOException {
    21. UdpClient client = new UdpClient();
    22. client.start();
    23. }
    24. }

    TCP协议

    TCP :有连接、可靠传输、面向字节流、全双工

    保证可靠性:确认应答、超时重传、连接管理(三次挥手 四次握手)

    提高效率:滑动窗口、流量控制、拥塞控制

    TCP和UDP区别

  • 相关阅读:
    【python】读取.dat格式文件
    谷粒学院——day01【项目介绍和MyBatisPlus】
    PySpark数据分析基础:pyspark.SparkConf核心类详解+代码示例
    Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例
    PHP 车辆租赁系统mysql数据库web结构apache计算机软件工程网页wamp
    分布式概念:编码一个简单分布式系统
    基于SpringBoot的在线学生请假管理系统的设计与实现毕业设计源码060935
    Java基础浅聊Future带来的异步优点和缺点
    Roson的Qt之旅 #116 QTcpServer详细介绍
    软考-计算机网络与系统安全
  • 原文地址:https://blog.csdn.net/qq_52328493/article/details/127423324