前言:
学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第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 的报文段包含如下的数据
- 源端口号(Source Port):占用2个字节,用于标识发送方的端口号。
- 目标端口号(Destination Port):占用2个字节,用于标识接收方的端口号。
- 长度(Length):占用2个字节,表示UDP报文段的长度,包括头部和数据部分。
- 校验和(Checksum):占用2个字节,用于检测UDP报文段在传输过程中是否发生了错误。
- 数据(Data):占用可变长度,包含了传输的实际数据。
❓ 为什么要有 UDP?
- UDP 不建立连接,前面学到的 TCP 三次握手过程来建立连接毫无疑问会增加延迟
- 状态较为简单,发送端和接收端没有链接的状态
- 报文段的头部很小,只包含上面提到的四种内容,相比于 TCP 的十一种提升很大
- 没有拥塞控制和流量控制,UDP 可以尽可能快的发送报文段
- 应用传输的速率近似登录主机向网络中的传输速率
3.3.3 UDP 校验和
💡 UDP校验和(Checksum)是为了检测在传输过程中数据报文是否出现差错而设立的一种机制。它通过计算特定的数据序列的二进制反码求和,并确保在网络中传递时数据的完整性。
👉 下面是形成 UDP 校验和的步骤文章来源:https://www.toymoban.com/news/detail-833839.html
-
构造伪首部:伪首部(Pseudo Header)是TCP和UDP在计算校验和时临时构造的一个数据结构,它并不实际存在于网络传输的数据包中,而是在发送方和接收方计算校验和时分别创建并使用的。
- 伪首部由以下部分组成,其结构类似于IP头部的一部分:源IP地址、目的IP地、协议字段、UDP长度
- 准备数据:将UDP首部(8字节,包含源端口号、目的端口号、长度和校验和字段,但此时校验和字段应置为0)与UDP数据载荷一起考虑进来。
- 逐16位相加:将所有16位数据单元(包括伪首部、UDP首部以及数据载荷中的每一对字节)按照网络字节顺序(大端序)进行二进制相加。
- 补溢出:如果在累加过程中产生了进位(即结果超过16位),则将高16位与低16位相加,直到没有进位为止。
- 取反:最终得到一个无进位的16位数字,对该16位数求取反码,得到的结果就是UDP校验和。
- 设置到首部:将计算得出的校验和写入UDP首部的校验和字段。
💡 为什么要取反码?文章来源地址https://www.toymoban.com/news/detail-833839.html
- 接收方接收到的的首部是是取反码构建的,其再通过相同的步骤对上述内容求和再与反码进行相加,得到的就是 16 位的全 1,检验较为简单。
到了这里,关于中科大计网学习记录笔记(十四):多路复用与解复用 | 无连接传输:UDP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!