• 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区别

  • 相关阅读:
    【linux命令讲解大全】113.网络接口和系统设备监测工具ifstat和iostat的使用
    Django系列11-员工管理系统实战--代码模块化
    DES 加密算法的改进方案
    一篇五分生信临床模型预测文章代码复现——Figure 2. 生存分析,箱线图表达改变分析(一)
    【0118】PostgreSQL 14.4修复了索引损坏
    【React】 第十三部分 Hooks
    密码学--对称加密和非对称加密联合使用
    【华为OD题库-009】食堂供餐-Java
    对齐管理后台中的账户体系的四种方法
    Linux系统远程访问另一台Windows系统的解决方案
  • 原文地址:https://blog.csdn.net/qq_52328493/article/details/127423324