中科大计网学习记录笔记(十四):多路复用与解复用 | 无连接传输:UDP

前言:

学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信息量过大,有太多无法理解的地方,在我第一次点开的时候也有相同的感受,但经过了一段时间项目的学习,对计网有了更多的了解,所以我准备在这次学习的时候做一些记录并且加入一些我的理解,希望能够帮助到大家。
往期笔记可以看专栏中的内容😊😊😊

3.2 多路复用与解复用

💡 在了解多路复用之前先要知道端口的概念:

  • 在TCP/IP协议中,端口用于 标识应用程序的通信终点,允许 多个应用程序在同一台计算机上同时进行网络通信
  • 端口分为两种类型:TCP端口和UDP端口。
3.2.1 TCP 的多路复用与解复用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

👉 在上面 socket 编程了解到:TCP 协议会将 源IP、源端口 和 目标 IP、目标端口封装到 socket

  • 封装了这些信息的 TCP 报文段(Segment)被作为 SDU 交给下一层,网络层
  • 通过对等实体的传输到对方主机的网络层
  • 对方主机通过传输过来的四元组信息找到对应的 socket 来达到解复用,将信息传输给不同的应用进程。

💡 sock 其实就是 socket 的简称,指的是套接字。

3.2.2 UDP 的多路复用与解复用

💡 UDP 的 socket 与 TCP 不同,其中只封装了本主机的信息,也就是源 IP 和 源端口

  • 目标 IP 和目标端口作为调用 API 的参数传入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

👉 通过 UDP 的 socket 同样也可以实现多路复用

  • 解复用即当信息通过网络层传输到对方的主机,对方主机从网络层中获取到 源 IP 和 源端口 以及 本主机的 IP 和 端口,由此可以找到本主机的进程来实现解复用。

💡 多路复用就是通过本机的不同端口来使得信息分流传输

  • 解复用就是通过传输来的信息找到请求的是哪个端口(port)

3.3 无连接传输:UDP

3.3.1 基本概念

💡 UDP:User Datagram Protocol(用户数据数据报协议)

👉 与 TCP 不同的是,UDP 在网络层端到端传输的基础上只是简单的将数据封装成数据报,实现了进程之间的通信而没有像 TCP 那样做拥塞控制、流量控制等的操作。

  • 所以 UDP 提供的是一种 “尽力而为” 的服务,报文段可能会丢失或者乱序
  • 但是需要注意的是,并不是说 UDP 无法实现可靠的传输,通过 应用层 自身是可以实现可靠传输的。

👉 UDP 被用于:

  • 流媒体(对于丢失不敏感而对于速率敏感,应用可控制传输速率)
  • DNS
  • SNMP

💡 应用可控制传输速率

  • 因为没有 TCP 提供的控制服务,UDP 接收到应用传输的数据就直接将其通过 IP 发送出去,所以使用 UDP 应用是可以控制传输速率的,这对流媒体来说非常重要。
3.3.2 UDP 报文段格式

💡 报文段是指在传输层使用该协议时,从发送端到接收端单次传输的数据单元,也就是前面提到的 PDU。

👉 UDP 的报文段包含如下的数据

  1. 源端口号(Source Port):占用2个字节,用于标识发送方的端口号。
  2. 目标端口号(Destination Port):占用2个字节,用于标识接收方的端口号。
  3. 长度(Length):占用2个字节,表示UDP报文段的长度,包括头部和数据部分。
  4. 校验和(Checksum):占用2个字节,用于检测UDP报文段在传输过程中是否发生了错误。
  5. 数据(Data):占用可变长度,包含了传输的实际数据。

❓ 为什么要有 UDP?

  • UDP 不建立连接,前面学到的 TCP 三次握手过程来建立连接毫无疑问会增加延迟
  • 状态较为简单,发送端和接收端没有链接的状态
  • 报文段的头部很小,只包含上面提到的四种内容,相比于 TCP 的十一种提升很大
  • 没有拥塞控制和流量控制,UDP 可以尽可能快的发送报文段
    • 应用传输的速率近似登录主机向网络中的传输速率
3.3.3 UDP 校验和

💡 UDP校验和(Checksum)是为了检测在传输过程中数据报文是否出现差错而设立的一种机制。它通过计算特定的数据序列的二进制反码求和,并确保在网络中传递时数据的完整性。

👉 下面是形成 UDP 校验和的步骤

  1. 构造伪首部:伪首部(Pseudo Header)是TCP和UDP在计算校验和时临时构造的一个数据结构,它并不实际存在于网络传输的数据包中,而是在发送方和接收方计算校验和时分别创建并使用的。
    • 伪首部由以下部分组成,其结构类似于IP头部的一部分:源IP地址、目的IP地、协议字段、UDP长度
  2. 准备数据:将UDP首部(8字节,包含源端口号、目的端口号、长度和校验和字段,但此时校验和字段应置为0)与UDP数据载荷一起考虑进来。
  3. 逐16位相加:将所有16位数据单元(包括伪首部、UDP首部以及数据载荷中的每一对字节)按照网络字节顺序(大端序)进行二进制相加。
  4. 补溢出:如果在累加过程中产生了进位(即结果超过16位),则将高16位与低16位相加,直到没有进位为止。
  5. 取反:最终得到一个无进位的16位数字,对该16位数求取反码,得到的结果就是UDP校验和。
  6. 设置到首部:将计算得出的校验和写入UDP首部的校验和字段。

💡 为什么要取反码?

  • 接收方接收到的的首部是是取反码构建的,其再通过相同的步骤对上述内容求和再与反码进行相加,得到的就是 16 位的全 1,检验较为简单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*Soo_Young*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值