• [网络工程师]-传输层协议-UDP协议


            用户数据协议(User Datagram Protocol,UDP)是一种不可靠的、无连接的数据报服务。源主机在传送数据前不需要和目标主机建立连接。数据附加了源端口号和目标端口号等UDP报头字段后,直接发往目的主机。这时,每个数据报的可靠性依靠上层协议来保证。在传送数据较少且较小的情况下,UDP比TCP更加高效。

    1、UDP报文

            源端口字段:该字段长度为16位。作用与TCP数据段中的端口号字段相同,用来标识源端的应用进程。在需要对方回信时用,不需要时可用全0;

            目标端口字段:该字段长度为16位。作用与TCP数据段中的端口号字段相同,用来标识目标端的应用进程。在目标交付报文时必须用到;

            长度字段:该字段长为16位。标明UDP头部和UDP数据的总长度字节;

            校验和字段:该字段长为16 。用来对UDP头部和UDP数据进行校验,有错就丢弃。与TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的一项。

    2、UDP校验

            虽然UDP协议没有提供任何差错控制机制,但UDP通过使用校验和来确保UDP报文被传送到正确的目的端。

            UDP校验和计算有一个与众不同的特点:校验和除覆盖UDP报文外,还覆盖一个附加头部,称为伪头部(Pseudo Header)。伪头部有来自IP报文的4个字段(协议、源IP地址、目的IP地址、UDP长度)和填充字段,伪头部格式如下所示:

         

            其中填充字段为全0,其目的是使伪头部的长度为32位的整数倍;协议字段就是IP报头格式中的协议字段,为17(在IP报文格式的协议字段中17表示UDP协议);UDP长度字段表示UDP报文长度。

            UDP计算校验和加上伪头部的目的就是为了验证UDP报文是否在两个端点之间正确传输。因为UDP报文包含源端口和目的端口,而伪头部包含源IP地址和目的IP地址。假如UDP报文在通过因特网传输时,有人恶意篡改了源IP地址(IP源地址欺骗),则这种情况可以通过UDP的校验和查询出来。

            需要注意的是,UDP计算校验和的伪头部信息中部分内容来源于IP报头信息,也就是说,UDP在计算校验和是,UDP必须从IP层获取相关信息,否则无法形成伪头部,也就计算不出UDP的校验和。这一过程实际上违背了网络体系中的分层原则,但这种违背是出于实际的需求而不得不做的折中。事实上,UDP(包括TCP)与IP 的联系是非常紧密的,而且它们一般都在操作系统内核实现,因此无论是UDP还是TCP要获取IP的相关信息都是非常容易和方便的。

    3、UDP端口

            协议端口号是标识目标主机进程的方法。TCP/IP使用16位的端口号来标识端口,所以端口的取值范围为[0,65535]。端口可以分为系统端口、等级端口、客户端使用端口。

    3.1 系统端口

            系统短开口的取值范围是[0,1023],常见的如下表所示:

    协议号名称功能
    20FTP-DATAFTP数据传输
    21FTPFTP控制
    22SSH

    SSH登录

    23TELNET远程登录
    25SNMP简单邮件传输协议
    53DNS域名解析
    67DHCPDHCP服务器开启,用来监听和接收客户请求消息
    68DHCP客户端开启,用来接收DHCP服务器的消息回复
    69TFTP简单FTP
    80HTTP超文本传输
    110POP3邮局协议
    143IMAP交互式邮件存取协议
    161SNMP简单网管协议
    162SNMP(Trap)SNMP Trap报文

    3.2 登记端口

            登记端口是为没有熟知端口号的应用程序所用的,端口范围为[1024,49151]。这些端口必须在IANA(互联网数字分配机构)上登记以避免重复。

    3.3 客户端使用端口

            客户端使用端口仅在客户进程运行时动态使用,使用完毕后,进程会释放端口。该端口范围为[49152,65535]。

  • 相关阅读:
    Kotlin:runBlocking导致App应用出现ANR问题实例
    Git(涵盖GitHub\Gitee码云\GitLab)
    Docker系列---【mysql容器手动停止后,重启服务器,mysql容器被删掉了,如何恢复mysql数据?】...
    Win11如何删除升级包?Win11删除升级包的方法
    day13【代码随想录】环形链表II、环形链表、快乐数、各位相加、丑数、丑数||
    go 环境安装
    数据结构学习笔记 5-1 单调队列(Monotone-Queue)与 LeetCode真题(Java)
    26岁开始学iT晚吗?
    第三章互联网
    lua profile 性能分析工具都有哪些
  • 原文地址:https://blog.csdn.net/m0_58983558/article/details/127934825