【读】这一次,让我们再深入一点 - UDP协议

上篇我们了解了关于 IP 协议的相关知识,这里我们继续讨论运输层的 UDP 协议.希望你有所收获.

运输层,你需要知道的基础

运输层提供了什么服务

UDP 及 后来讲到的 TCP 都属于运输层协议.运输层向它上层的应用层提供通信服务.网际层的 IP 协议可以通过 IP 数据报首部的目的地址,将数据报交付到目的地, 为什么还需要运输层呢? 其实,”两台主机间的通信”的描述是不够清晰的,需要通信的实体应该是主机中的进程.可以看到,网际层是提供点到点的通信(也就是两台主机之间能够找到彼此), 而运输层提供了端到端的通信(也就是各个进程之间的交流).

端口

运输层的一个很重要的功能是复用和分用:

  • 复用, 发送方不同的应用都可以使用用一个运输层协议传递数据(加上合适的首部加以区分)
  • 分用, 接收方的运输层在剥去报文的首部后能够把数据正确的交付到目的应用.

为了解决复用和分用过程中数据不混淆的问题, 运输层采用协议端口号(或端口)来区分.在 TCP/IP 体系中, 运输层采用 16 位(共 65535 个)的端口号来标识一个端口. 端口只是具有本地意义, 表示了应用程序和运输层交互时使用的标识.

不同计算机的两个应用程序通信时,需要获取对方的 IP 地址(知道对方在哪),和对方程序的端口(找到对方的程序入口).就像我们寄信时,要写上地址(IP 地址)和收件人(端口)一样.

读到这里你是否明白了为什么 HTTP 服务的端口默认 80,HTTPS 默认端口 443,本地启动的服务问啥建议使用 8888 了吧?

端口的分类

  • 服务端使用的端口号

    • 熟知端口(0~1023), 指派该比较重要的,大家熟知的应用使用,便于大家和他通信, 下面是常用的熟知端口

      应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP HTTPS
      端口号 21 23 25 53 69 80 161 443
    • 登记端口(1024~49151).使用该类端口需要登记,避免重复.

  • 客户端使用的端口号

    客户端的端口号为(1024~65535),随着客户端的运行而确定,短暂存在.

UDP 协议

接下来就来了解下运输层的 UDP 协议(User Datagram Protocol), 后序文章会讲述 TCP 协议(Transmission Control Protocol).

UDP 只是在 IP 协议之上添加了少许功能, 复用和分用及差错检测.其主要特点是:

  • 无连接
  • 尽最大努力交付, 即不提供可靠的交付
  • 面向报文. 发送方的 UDP 拿到上层交付的数据后直接添加自己的头部信息后交付给下层,不会对数据进行合并或封装; 而接收方的 UDP 拿到下层的数据后,去除头部后直接交付给上层.
  • 没有拥塞控制, 对应出现拥塞的网络,发送方的发送速率是不会降低的.
  • 支持一对一,一对多,多对一的交互通信
  • 首部较小,8 字节.

UDP 的报文格式:

包含首部和数据字段,数据字段是上层交付的数据,首部包含 4 个字段,各占 2 字节:

  • 源端口, 需要给对方回信时选用, 不需要是为 0.
  • 目的端口, 在传送的终点交付数据时使用.
  • 长度, UDP 数据部分的长度(单位字节), 最小为 8,只有首部.
  • 校验和, 检查是否在传送过程中出错, 有错则丢弃.

结语

总体来看,UDP 还是比较简单的.它适用于那些无须关心数据是否准确到达的服务, 如视频电话, 局域网游戏等.