课程主要内容

  1. 计算机网络与互联网

  2. 应用层

  3. 传输层

  4. 网络层:数据平面

  5. 网络层:控制平面

  6. 数据链路层与局域网

1. 计算机网络与互联网概论

该部分会介绍一些基本概念,比较重要。

1.1 什么是Internet?

网络:节点 + 边

计算机网络:联网的计算机所构成的系统

互联网:可以从两个角度去看:

从构成角度:

  • 节点

    • 主机节点:数据的源或者目标,主机及其运行的应用程序

    • 数据交换节点:路由器、交换机等网络交换设备

  • 边:通信链路

    • 接入网链路:主机连接到互联网的链路

    • 主干链路:路由器间的链路

  • 协议:Internet 中所有的通信行为都受协议制约

    • 协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及在报文传输和/或接收或其他事件方面所采取的动作

从服务角度:

  • 使用通信设施进行通信的分布式应用

  • 通信基础设施为apps提供编程接口(通信服务)

1.2 网络边缘

网络结构分为:

  • 网络边缘:主机、应用程序(客户端、服务端)

  • 网络核心:互连的路由器

  • 接入网、物理媒体:有线或无线通信链路

这里的网络边缘是一种“端系统”或者“主机”,用于运行应用程序。

根据有无服务器,分为两种模式:

  • 客户 / 服务器模式

  • 对等模式(p2p模式)

P2P应用实现的核心概念

节点的角色
在P2P网络中,每个参与者都是一个节点,可以同时扮演“客户端”和“服务器”角色。这意味着每个节点既可以发送数据,也可以接收数据。在代码中,Peer类表示每个节点。

节点之间的连接
每个节点启动时会:

  • 创建一个服务器来监听其他节点的连接(通过ServerSocket)。

  • 主动连接到一个或多个已知的节点(通过Socket),以加入网络。

比如,节点A启动时会:

  • 打开一个端口等待其他节点连接。

  • 主动连接到其他节点,如节点B。

消息的传递
一旦节点A与节点B成功建立连接,它们就可以通过Socket对象互相发送消息。每个节点会保存连接的列表,并在需要时通过这些连接发送数据。

1.3 网络核心

在端系统之间传输数据的两种方式:电路交换和分组交换

简要特征与区别如下:

电路交换:

1. 特征

- 建立连接:通信前需要建立一个专用的物理路径,连接保持整个通信过程。

- 固定带宽:为每个连接分配固定的带宽,通信时独占这条路径。这个带宽会被分成片,如果某个呼叫没有数据,则其资源片处于空闲状态。

- 顺序传输:数据按照发送顺序到达,不会发生乱序。

- 延迟低:一旦建立连接,传输延迟较低且稳定。

2. 典型应用:传统电话网络。

分组交换:

1. 特征

- 无固定连接:不需要建立固定路径,数据被拆分为小块(分组)逐个传输。

- 动态路由:每个分组独立寻路,可能通过不同路径到达目的地。

- 带宽共享:多个用户共享网络资源,带宽利用率高。

- 乱序和重传:分组可能乱序到达,需要接收方重新排序,丢失的分组可能需要重传。

2. 典型应用:互联网(IP网络)。

区别:

- 连接方式:电路交换需要预先建立固定路径,分组交换则按需动态选择路径。

- 资源利用:电路交换独占带宽,分组交换共享带宽,提高效率。

- 适用场景:电路交换适合对延迟敏感、稳定性要求高的场景,分组交换适合数据量大且动态的网络环境。

在分组交换的网络中,路由转发是两个核心功能:

  1. 路由(Routing):

    • 这个过程通过路由算法决定数据包(分组)从源到目标的最佳路径。

    • 路由算法根据网络拓扑和链路状态计算最优路径,并更新每个路由器的转发表

    • 路由器使用路由表来查找目标地址所对应的输出链路,这样数据包可以依次跳到下一站,最终到达目标。

  2. 转发(Forwarding):

    • 转发是将接收到的数据包通过输入端口送到合适的输出端口。

    • 当路由器接收到一个数据包后,会根据数据包头部的目标地址查找本地的转发表,然后通过查找到的输出链路把数据包发出。

    • 转发表中记录了不同目标地址对应的输出链路,路由器根据这些记录来决定数据包的去向。

在你提供的图片中,右侧展示了路由器的转发过程,数据包的目标地址(如0111)被用来查找转发表,然后选择对应的输出链路(如链路2)。

1.4 接入网和物理媒体

一、接入网络方式

  1. 住宅接入网络

    • Modem拨号:通过调制解调音频信号传输数据,最高速率56Kbps,不能同时上网和打电话。

    • DSL接入

      • 通过电话线传输数据和语音,采用不同频段。

      • 上行速率:< 2.5 Mbps;下行速率:< 24 Mbps。

    • 线缆接入

      • 使用有线电视网FDM技术,在不同频段传输数据和视频。

      • 下行速率:最高30 Mbps;上行速率:2 Mbps。

  2. 单位接入网络(企业/学校)

    • 以太网接入,常用速率:

      • 10 Mbps、100 Mbps、1 Gbps、10 Gbps。

    • 端系统直接连接到以太网交换机。

  3. 无线接入网络

    • 无线局域网(WiFi)

      • 传输速率:11 Mbps、54 Mbps等。

    • 广域无线接入

      • 通过电信运营商提供,如3G、4G、5G网络。

      • 速率范围:1-10 Mbps,5G可达数Gbps。

二、物理媒体类型

  1. 导引型媒体

    • 双绞线

      • 5类:100 Mbps - 1 Gbps。

      • 6类:10 Gbps。

    • 同轴电缆

      • 双向通信,适用于宽带和以太网。

    • 光纤

      • 高速传输(10 Gbps-100 Gbps),误码率低,抗干扰,适合长距离传输。

  2. 非导引型媒体

    • 无线链路

      • 通过开放空间传输电磁波。

      • 包括地面微波、WiFi、蜂窝网络、卫星链路等。

三、接入网特性

  • 带宽:影响速率,通常DSL、线缆和光纤的下行带宽更高。

  • 共享/专用

    • DSL和企业以太网多为专用接入。

    • 有线网络通常为共享接入。

1.5 ISP

ISP(互联网服务提供商)

  • 定义:ISP是提供Internet接入服务的公司或组织。它们通过自己的网络与其他ISP连接,允许用户访问全球的网络资源。

  • 层级分类:根据规模和功能,ISP分为三级:

    • 第一级ISP:拥有全球骨干网络,直接与其他第一级ISP互连,不需要向其他ISP支付费用。这些ISP通常是全球范围运营的,如AT&T、NTT等。

    • 第二级ISP:从第一级ISP购买Internet接入,然后将其转售给企业或消费者。

    • 第三级ISP:通常为本地或区域性服务提供商,从第二级ISP购买带宽,然后为本地的个人用户或小型企业提供接入服务。

  • 功能:ISP的主要功能包括提供Internet接入、域名服务、邮箱服务、虚拟主机服务以及其他增值服务。

1.6 分组延时、丢失和吞吐量

一 分组延时

  • 节点处理延时:路由器接收到数据分组后,检查包头并决定将其转发到哪个链路上的时间。

  • 排队延时:当多个数据分组同时到达时,可能需要在路由器的队列中等待,直到轮到它被转发。

  • 传输延时:路由器将整个数据分组传输到下一个节点所需的时间,通常与链路带宽成反比。

  • 传播延时:分组在物理链路上从一个节点传播到下一个节点的时间,这与信号在链路中的传播速度和链路的物理长度有关。

Tracert

  • TTL(Time To Live)机制

    • 当一个数据包在网络上传输时,每经过一个路由器,它的 TTL 值会减 1,直到 TTL 减到 0 时,数据包会被丢弃,并且路由器会发送一个 ICMP “超时”消息回到发送者。

    • Traceroute 通过设置不同的 TTL 值来跟踪路由器:首先设置 TTL 为 1,这样数据包只会到达第一个路由器,第二次 TTL 设置为 2,数据包会到达第二个路由器,以此类推。

  • 路径探测

    • 每次发送的数据包都有一个逐步增加的 TTL 值,Traceroute 会记录每个路由器返回的 ICMP 报文,进而得知数据包经过的所有路由器。

    • 通常,Traceroute 会发送 3 个数据包来确保得到稳定的延迟时间。

  • 显示的结果

    • Traceroute 会显示每个经过的路由器的 IP 地址、响应时间(通常是毫秒),这样我们可以看到数据包是通过哪些网络设备、路径传输的,以及在哪些地方可能存在网络延迟。

PS C:\Users\Donnie> tracert

用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]
               [-R] [-S srcaddr] [-4] [-6] target_name

选项:
    -d                 不将地址解析成主机名。
    -h maximum_hops    搜索目标的最大跃点数。
    -j host-list       与主机列表一起的松散源路由(仅适用于 IPv4)。
    -w timeout         等待每个回复的超时时间(以毫秒为单位)。
    -R                 跟踪往返行程路径(仅适用于 IPv6)。
    -S srcaddr         要使用的源地址(仅适用于 IPv6)。
    -4                 强制使用 IPv4。
    -6                 强制使用 IPv6。
PS C:\Users\Donnie> tracert zxlmdonnie.cn

通过最多 30 个跃点跟踪
到 zxlmdonnie.cn [60.205.137.2] 的路由:

  1     2 ms     2 ms     2 ms  10.236.255.254
  2     *        *        8 ms  172.25.254.1
  3    11 ms     8 ms     6 ms  172.25.254.6
  4     8 ms    15 ms     5 ms  112.6.224.1
  5    10 ms     *        *     117.132.23.49
  6     *        *        *     请求超时。
  7     *        *        *     请求超时。
  8    22 ms    26 ms    17 ms  211.137.176.238
  9     *        *        *     请求超时。
 10   103 ms   101 ms   106 ms  119.38.213.30
 11     *       36 ms   102 ms  116.251.113.34
 12     *        *        *     请求超时。
 13     *        *        *     请求超时。
 14     *        *        *     请求超时。
 15     *        *        *     请求超时。
 16    27 ms    52 ms    70 ms  60.205.137.2

跟踪完成。
  • 每一行代表一个路由器。

  • 3 个数字是 3 个数据包到达这个路由器的延迟时间。

  • 如果某个路由器没有响应,Traceroute 可能会显示 * * * 来表示超时。

分组丢失

吞吐量

吞吐量 是指在特定时间段内,网络能够成功传输的数据量,通常以 bps(比特每秒) 来衡量。它表示网络传输效率,受网络带宽、延迟和丢包率等因素影响。

也是在源端和目标端之间传输的速率(数据量/单位时间)

1.7 协议层次与服务模型

一、服务和服务访问点

  1. 服务 (Service)

    • 低层实体为上层实体提供通信能力

    • 服务用户 (Service User) 与服务提供者 (Service Provider)

  2. 原语 (Primitive)

    • 高层通过服务访问原语与低层交互

  3. 服务访问点 (SAP)

    • 层间接口,供上层使用下层提供的服务

    • 例子:传输层的端口 (Port)

二、服务的类型

  1. 面向连接的服务 (Connection-oriented Service)

    • 建立连接、通信、拆除连接

    • 适用大数据块传输,特点:保序

    • 例子:可靠的信息流、可靠的字节流、不可靠的连接

  2. 无连接的服务 (Connectionless Service)

    • 不需要建立连接,通信不可靠、可能失序

    • 适用零星数据传输

    • 例子:不可靠数据报、有确认的数据报、请求回答

三、服务与协议的关系

  1. 服务 (Service)

    • 垂直提供通信能力,通过原语操作

  2. 协议 (Protocol)

    • 水平的通信规则集合

    • 本层协议依赖下层提供的服务

四、分层处理及其优势

  1. 分层概念化

    • 系统模块化,便于维护与升级

    • 改变某一层不影响其他层次的功能

  2. 分层可能的弊端

    • 过于分层可能引入不必要的复杂性

五、Internet协议栈

  1. 应用层

    • 提供网络应用服务

    • 例子:FTP、SMTP、HTTP、DNS

  2. 传输层

    • 端到端通信,细分为进程间的通信

    • 例子:TCP、UDP

  3. 网络层

    • 路由选择、主机之间通信

    • 例子:IP、路由协议

  4. 链路层

    • 邻接节点间的数据传输

    • 例子:以太网、WiFi

  5. 物理层

    • 比特传输

六、ISO/OSI参考模型

  1. 表示层

    • 数据表示,e.g., 加密、压缩

  2. 会话层

    • 同步与数据恢复

  3. 物理层、数据链路层、网络层等

七、封装与解封装

  • 不同层次协议数据单元:

    • 应用层:报文 (Message)

    • 传输层:报文段 (Segment)

    • 网络层:分组/数据报 (Packet/Datagram)

    • 数据链路层:帧 (Frame)

    • 物理层:比特 (Bit)

2. 应用层

2.1 应用层协议原理

以下GPT生成的内容还是有点太抽象了,建议现学完HTTP、FTP、SMTP、DNS后再看相应的总结。

应用层协议原理提纲:

  1. 网络应用体系结构

    • 客户-服务器模式:服务器固定IP、常运行,客户端间歇连接。

    • 对等体模式(P2P):各节点既是客户端又是服务器,灵活但难管理。

    • 混合结构:如Napster,集中控制与P2P结合。

  2. 进程通信

    • 进程间通信通过操作系统定义或交换报文

    • 客户端进程:发起通信。

    • 服务器进程:等待连接。

  3. 传输层接口

    • 传输层协议:TCP、UDP等。

    • Socket编程:用于进程通信,简化传输。

  4. 应用层协议

    • 报文类型、格式、时序规则等。

    • 公开协议(如HTTP、SMTP)与私有协议(如Skype)。

  5. 传输服务要求

    • 数据丢失:不同应用对数据可靠性要求不同。

    • 延迟:部分应用对传输时延敏感。

    • 吞吐量:部分应用要求最低吞吐量。

  6. TCP与UDP服务

    • TCP:可靠传输、流量控制、拥塞控制。

    • UDP:无连接、不可靠但实时性高。

  7. 应用协议与传输协议的结合

    • 如HTTP基于TCP,视频流可以基于UDP

2.2 Web 与 HTTP

这里以计网的角度简单介绍了一下HTTP内容。对于前后端面试和实际应用,这些还是太浅了点。

  1. Web 基础概念

    • Web页:Web页由多个对象组成,最基本的是HTML文件。一个Web页可以包含多种对象,如文本、图像、音频、视频等。例如:

      • HTML文件:基本的页面内容和结构。

      • 图像:JPEG、PNG等嵌入在页面中的图片。

      • 音频/视频:MP3音频或MP4视频文件嵌入网页中。

      • Java小程序:嵌入网页中的动态程序,提供更丰富的交互功能。

    • 对象引用:网页中的各个对象通过URL进行引用。URL(统一资源定位符)用于标识网络上的资源,格式如下:

      • 格式协议://用户名:口令@主机名/路径:端口号

      • 示例http://user:psw@www.someSchool.edu/someDept/pic.gif:80

        • 协议:http

        • 用户名:user

        • 口令:psw

        • 主机名:www.someSchool.edu

        • 路径:/someDept/pic.gif

        • 端口号:80

  2. HTTP 概况

    • HTTP(Hypertext Transfer Protocol,超文本传输协议)是Web使用的应用层协议,负责在Web客户端和Web服务器之间传输数据。

    • 工作方式:HTTP遵循客户端/服务器模式。

      • 客户端:用户的Web浏览器(如Chrome、Firefox)作为客户端,发送请求并接收服务器的响应。

      • 服务器:如Apache Web服务器,接收客户端请求并返回资源。

    • HTTP版本

      • HTTP/1.0:早期版本,使用非持久连接,每次请求都要建立并关闭TCP连接,效率较低。

      • HTTP/1.1:改进版本,默认支持持久连接流水方式,一个TCP连接可以传输多个对象,减少连接开销。

      • HTTP/2.0:采用二进制分帧多路复用头部压缩服务器推送,显著提升了并发性能和传输效率。(HTTPS、gRPC……)

    • HTTP如何使用TCP

      • 步骤

        1. 浏览器通过TCP连接到服务器的端口80(默认)。

        2. 客户端和服务器交换HTTP报文(请求和响应)。

        3. 传输结束后,关闭TCP连接。

      • 无状态:HTTP是无状态协议,服务器不会保存客户端的状态。例如,如果同一个用户在不同时间段访问同一页面,服务器不会记得之前的请求历史。

    • 无状态协议的优点:无状态协议简化了服务器的设计,支持更多并发连接,但也带来了维护用户状态的挑战,通常通过Cookies和Session等技术来解决。

  3. HTTP连接类型

    • 非持久HTTP

      • 每个TCP连接只能传输一个对象,传输多个对象时需要多次建立连接。

      • 如用户访问包含多个图片的网页时,浏览器必须为每个图片建立一个新的TCP连接。举例:

        • 浏览器访问页面www.someSchool.edu/home.index,该页面引用10个JPEG图像。每个图像都需要重新建立TCP连接进行下载,导致增加开销。

      • 缺点:效率低,每个对象需建立和关闭TCP连接,操作系统要为每个连接分配资源。

    • 持久HTTP

      • HTTP/1.1默认使用持久连接,一个TCP连接可以传输多个对象,减少了重复连接的开销。

      • 非流水模式:客户端必须等待前一个请求的响应完成后,才能发送下一个请求。例如,下载多个图像时,只有在接收到第一个图像后才能请求第二个。

      • 流水方式:浏览器可以并行发送多个请求,极大提高性能。多个请求在同一个RTT(Round Trip Time,往返时间)内处理完成。

  4. HTTP报文结构

    • HTTP请求报文

      • 请求报文的格式是人类可读的ASCII文本,典型的请求如下:

        GET /somedir/page.html HTTP/1.1
        Host: www.someschool.edu
        User-Agent: Mozilla/5.0
        Connection: close
        Accept-Language: en
      • 请求行:包含请求方法(如GET)、请求的资源路径和HTTP版本。

        • 例如:GET /somedir/page.html HTTP/1.1

      • 首部行:包括各种请求的附加信息,如主机名、浏览器类型、语言偏好等。

        • 例如:Host: www.someschool.edu表示请求的主机。

      • 请求体:POST请求中可以包含表单数据或文件。

    • HTTP响应报文

      • 响应报文也为ASCII格式,典型的响应报文如下:

        HTTP/1.1 200 OK
        Date: Mon, 27 Sep 2021 12:00:00 GMT
        Server: Apache/2.4.1
        Last-Modified: Mon, 22 Sep 2021 10:00:00 GMT
        Content-Length: 1024
        Content-Type: text/html
      • 状态行:包含HTTP版本、状态码和状态描述。

        • 例如:HTTP/1.1 200 OK表示请求成功。

      • 首部行:描述服务器和返回数据的元信息,如服务器类型、内容长度等。

        • 例如:Server: Apache/2.4.1

      • 响应体:包含实际请求的资源,如HTML文件。

  5. HTTP方法类型

    • GET:获取服务器上的资源,最常见的方法,用于请求网页、图像等资源。例如:

      GET /images/logo.png HTTP/1.1
      Host: www.example.com
    • POST:提交数据给服务器,通常用于提交表单。例如:

      POST /login HTTP/1.1
      Host: www.example.com
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 27
      ​
      username=admin&password=1234
    • HEAD:与GET类似,但服务器只返回首部,不返回实际内容,用于检查资源是否存在。

    • PUT:将客户端的数据上传到服务器。例如,用于上传文件到服务器的指定位置。

    • DELETE:删除指定的服务器资源。

  6. HTTP状态码

    状态码

    类别

    描述

    1xx

    信息性状态码

    请求已接收,继续处理。

    100

    信息性状态码

    Continue: 继续请求,客户端应继续发送请求数据。

    101

    信息性状态码

    Switching Protocols: 服务器切换协议。

    2xx

    成功状态码

    请求成功。

    200

    成功状态码

    OK: 请求成功,服务器返回请求的资源。

    201

    成功状态码

    Created: 请求成功,服务器创建了新资源。

    202

    成功状态码

    Accepted: 请求已接受,但尚未处理。

    204

    成功状态码

    No Content: 请求成功,但没有返回任何内容。

    3xx

    重定向状态码

    请求需要进一步的操作。

    301

    重定向状态码

    Moved Permanently: 请求的资源已被永久转移到新URL。

    302

    重定向状态码

    Found: 请求的资源临时被转移到新URL。

    304

    重定向状态码

    Not Modified: 请求的资源未修改,使用缓存。

    4xx

    客户端错误状态码

    请求有错误。

    400

    客户端错误状态码

    Bad Request: 服务器无法理解请求的语法。

    401

    客户端错误状态码

    Unauthorized: 请求未授权,需身份验证。

    403

    客户端错误状态码

    Forbidden: 服务器理解请求,但拒绝执行。

    404

    客户端错误状态码

    Not Found: 请求的资源未找到。

    405

    客户端错误状态码

    Method Not Allowed: 请求方法不被允许。

    408

    客户端错误状态码

    Request Timeout: 请求超时,服务器未收到完整请求。

    5xx

    服务器错误状态码

    服务器处理请求时发生错误。

    500

    服务器错误状态码

    Internal Server Error: 服务器内部错误。

    501

    服务器错误状态码

    Not Implemented: 服务器不支持请求的功能。

    502

    服务器错误状态码

    Bad Gateway: 服务器作为网关或代理时接收到无效响应。

    503

    服务器错误状态码

    Service Unavailable: 服务器暂时无法处理请求。

    504

    服务器错误状态码

    Gateway Timeout: 网关超时,未及时获得响应。

  7. Cookies 机制

    • Cookies用于在无状态的HTTP协议中维护客户端与服务器的状态。举例:

      • 用户第一次访问购物网站时,服务器生成一个唯一的用户ID,并通过HTTP响应中的Set-Cookie指令将其发送到浏览器。

      • 之后,浏览器每次访问该网站时都会携带该ID,服务器根据ID识别用户并返回个性化内容。

      • 示例

        HTTP/1.1 200 OK
        Set-Cookie: sessionID=123456; Expires=Wed, 09 Jun 2021 10:18:14 GMT
      • Cookie的组成

        1. 服务器设置Cookie:通过Set-Cookie首部设置。

        2. 浏览器存储Cookie:浏览器会在本地保存Cookie,并在后续请求中携带。

        3. 服务器利用Cookie:服务器根据Cookie识别用户,维持会话。

        4. 浏览器发送Cookie:浏览器通过请求报文中的Cookie首部将Cookie信息发送回服务器。

  8. Web缓存(代理服务器)

    • Web缓存:是指代理服务器存储资源的副本,从而减少对原始服务器的请求。缓存不仅可以减少网络流量,还能加快响应速度。

      • 工作原理:客户端向缓存发送请求,如果缓存中已有资源,则直接返回;否则缓存从原始服务器获取资源并将其存储下来。

      • 好处

        • 减少服务器负载:缓存可以处理常见的请求,减轻服务器的压力。

        • 加快响应速度:缓存位于用户附近,减少了获取资源的延迟。示例:某大学内部设置了Web缓存,学生访问热门网站时优先从缓存中获取资源,减少了外部网络流量并加快访问速度。

  1. 条件GET方法

    • 条件GET:通过使用If-Modified-Since首部,客户端请求时只在资源自上次访问后发生修改时才传输。否则返回304 Not Modified状态,表示资源未变化,客户端可以继续使用缓存中的副本。

    • 示例

      GET /index.html HTTP/1.1
      Host: www.example.com
      If-Modified-Since: Wed, 09 Jun 2021 10:18:14 GMT


2.3 FTP

  • 基本概念

    • FTP用于在客户端和服务器之间传输文件。

    • 客户端发起文件上传或下载请求,服务器响应并提供文件。

  • 工作模式

    • 客户/服务器模式

      • 客户端:发起文件传输的用户或主机。

      • 服务器:提供文件存储和传输服务的远程主机。

    • 使用标准协议:FTP根据RFC 959规范工作。

    • FTP服务器监听端口21

  • 连接类型

    • 控制连接:用于发送命令和接收响应,通过TCP建立在端口21上。

    • 数据连接:用于传输文件数据,通常由服务器在端口20上建立。

  • 连接过程

    • 客户端通过控制连接进行身份验证(发送用户名和密码)。

    • 客户端发送命令(如浏览目录、上传或下载文件)。

    • 服务器根据命令打开数据连接进行文件传输。

    • 文件传输完成后,服务器关闭数据连接。

  • FTP命令

    • 命令示例(通过控制连接发送):

      • USER username:发送用户名。

      • PASS password:发送密码。

      • LIST:请求返回当前目录的文件列表。

      • RETR filename:从服务器检索文件。

      • STOR filename:向服务器上传文件。

  • 响应码

    • 状态码与状态信息(类似于HTTP),示例:

      • 331 Username OK, password required:用户名正确,需提供密码。

      • 125 Data connection already open; transfer starting:数据连接已打开,开始传输。

      • 425 Can't open data connection:无法打开数据连接。

      • 452 Error writing file:写文件时出错。

  • 特点与应用

    • 支持有状态的文件传输,维护用户的状态信息(如当前目录和用户帐户)。

    • 广泛用于文件共享、备份和网站管理。

2.4 邮件 SMTP

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是互联网标准协议之一,专门用于在不同服务器之间发送电子邮件。SMTP协议使用TCP协议的25号端口进行通信,主要用于从发送方到接收方的邮件传输。

SMTP协议的基本流程:

  1. 客户端(发送方)和服务器(接收方)的连接:邮件发送方通过TCP/IP建立与邮件接收服务器的连接。

  2. 发送邮件的过程

    • 客户端使用SMTP命令与服务器进行交互。

    • 服务器会对客户端发送的每一个SMTP命令返回状态码和消息,以确认每一步的执行状态。

  3. 邮件数据的传输:邮件主体数据在客户端和服务器之间通过DATA命令进行传输。

  4. 关闭连接:邮件发送完毕后,客户端通过QUIT命令结束会话,服务器关闭连接。

SMTP基本命令解释:

  • HELO:客户端向服务器自报家门,表明自己的身份。

  • MAIL FROM:指定发件人的电子邮件地址。

  • RCPT TO:指定收件人的电子邮件地址。

  • DATA:指示接下来的内容是邮件的正文部分,邮件的内容会持续到输入一个单独的.为止,表示邮件结束。

  • QUIT:结束邮件会话。

交互例子解释:

S: 220 hamburger.edu 

服务器(hamburger.edu)向客户端发送欢迎信息,状态码220表示服务就绪。

C: HELO crepes.fr 
S: 250 Hello crepes.fr, pleased to meet you

客户端(crepes.fr)通过HELO命令向服务器问候,服务器回应状态码250,表示成功,并欢迎客户端。

C: MAIL FROM: <alice@crepes.fr> 
S: 250 alice@crepes.fr... Sender ok

客户端指定发件人alice@crepes.fr,服务器回应状态码250,表示发件人有效。

C: RCPT TO: <bob@hamburger.edu> 
S: 250 bob@hamburger.edu ... Recipient ok

客户端指定收件人bob@hamburger.edu,服务器回应状态码250,表示收件人有效。

C: DATA
S: 354 Enter mail, end with "." on a line by itself

客户端通过DATA命令通知服务器,接下来将发送邮件的内容。服务器返回状态码354,指示邮件正文可以开始输入,并要求以.为结束符。

C: Do you like ketchup? 
C: How about pickles? 
C: . 
S: 250 Message accepted for delivery

客户端发送邮件内容:“Do you like ketchup?”和“How about pickles?”。在邮件内容的最后,客户端输入.表示邮件内容结束,服务器返回状态码250,表示邮件已经接受,并准备发送给收件人。

C: QUIT 
S: 221 hamburger.edu closing connection

客户端通过QUIT命令结束会话,服务器返回状态码221,表示关闭连接。

总结:

这个例子展示了一个简单的SMTP交互过程,其中发件方alice@crepes.fr给收件方bob@hamburger.edu发送了一封包含两句简单文本的邮件。

2.5 DNS

2.5.1 引言

DNS(Domain Name System,域名系统)是互联网的重要基础设施,负责将人类易于记忆的域名转换为机器可识别的IP地址。它通过分布式的、层次化的数据库,实现了域名与IP地址之间的映射。下面我们从DNS服务器开始,围绕DNS解析过程,串联起DNS的总体思路和目标,以及相关的知识点。

修改本地 hosts 文件可以直接实现域名与IP地址之间的映射 如果本地hosts不存在映射,需要去 DNS Server 找映射

如Google的 8.8.8.8 和国内的 114.114.114.114

2.5.2 DNS的总体思路和目标

  • 总体思路:通过分层的、基于域的命名机制,使用分布式数据库完成名字到IP地址的转换。DNS作为核心的互联网功能,运行在UDP之上,使用53号端口,以应用层协议的形式实现,将复杂性处理在网络边缘。

  • 主要目标

    • 实现主机名到IP地址的转换:方便用户使用易记的域名访问互联网资源。

    • 主机别名到规范名字的转换(Host Aliasing):允许使用别名访问主机,提高灵活性。

    • 邮件服务器别名到正规名字的转换(Mail Server Aliasing):支持邮件系统的灵活配置。

    • 负载均衡(Load Distribution):通过返回不同的IP地址,实现对多台服务器的负载分配。

2.5.3 DNS服务器的角色

DNS服务器是DNS系统的核心组件,负责存储和提供域名与IP地址之间的映射信息。根据功能和层次,DNS服务器主要分为以下几类:

  1. 根域名服务器(Root Name Server):位于DNS层次结构的最顶层,负责管理顶级域(TLD)的信息,如.com.cn等。目前全球共有13个逻辑上的根域名服务器,物理上通过Anycast技术部署在多个地点,以提高可靠性和访问速度。

  2. 顶级域名服务器(TLD Name Server):管理特定顶级域名下的权威DNS服务器的信息。例如,.com顶级域名服务器管理所有.com域名的权威DNS服务器信息。

  3. 权威DNS服务器(Authoritative Name Server):负责存储某个域的具体资源记录(Resource Records),包括域名到IP地址的映射。组织或机构可以自行维护权威DNS服务器,或者委托第三方服务商。

  4. 本地域名服务器(Local Name Server):通常由ISP或组织机构提供(学校、企业等内网),负责接收用户的DNS查询请求,并进行解析。

2.5.4 DNS解析过程

DNS解析是将域名转换为IP地址的过程,其核心逻辑如下:

  1. 用户请求解析:当用户在浏览器中输入www.qq.com,计算机会调用解析器(Resolver),向本地域名服务器发送查询请求。

  2. 本地域名服务器查询:本地域名服务器首先检查自身缓存中是否有对应的IP地址记录。如果没有,则向根域名服务器发起查询请求。

  3. 根域名服务器响应:根域名服务器不会直接提供目标域名的IP地址,而是返回对应顶级域名服务器的地址(例如,返回管理.com域的TLD服务器地址)。

  4. 迭代查询过程:本地域名服务器向TLD服务器发送查询请求,TLD服务器返回目标域的权威DNS服务器地址。本地域名服务器继续向权威DNS服务器发送查询,最终获取到www.qq.com的IP地址。

  5. 返回结果并缓存:本地域名服务器将获取到的IP地址返回给用户的解析器,同时缓存该结果,以便下次查询时提高效率。

2.5.5 如何命名设备

  • 用有意义的字符串:为了便于记忆,设备通常使用有意义的域名,如www.google.com

  • 解决平面命名的重名问题:层次化命名:DNS采用层次树状结构的命名方法,将域名分为多个层级,用“.”分隔,例如www.example.com。这种层次化的命名方式解决了重名问题,保证了域名的全局唯一性。

  • 域名结构

    • 顶级域名(Top-Level Domain,TLD):如.com.org.cn等。

    • 二级域名:注册者可以在顶级域名下注册二级域名,如example.com

    • 子域名(Subdomain):二级域名下可以创建多个子域名,如www.example.commail.example.com

2.5.6 如何完成名字到IP地址的转换

  • 分布式数据库维护和响应名字查询:DNS采用分布式的数据库结构,各级DNS服务器共同维护域名与IP地址的映射。

  • DNS查询类型

    • 递归查询:本地DNS服务器承担所有查询任务。如果它没有答案,会自行联系其他DNS服务器(如根服务器、TLD服务器等)获取IP地址,最终直接将结果返回给用户。用户只发送一次请求,后续查询由本地DNS服务器完成。通常用户设备向本地DNS服务器发起查询时使用。

    • 迭代查询:DNS服务器不会为请求者执行所有查询任务,而是指示查询者下一个该联系的DNS服务器。每一步查询后,本地DNS服务器自己负责向下一级服务器(如根服务器、TLD服务器等)继续查询,直到获得答案。通常本地DNS服务器向上级DNS服务器查询时使用。

递归查询
想象你去问一个图书馆管理员“这本书在哪里?” 如果管理员不知道答案,他会为你查询其他的部门,打电话、上网查、或者问别的图书馆,直到找到这本书的位置,然后直接告诉你,整个过程中你只需要等待结果。这就是递归查询——本地DNS服务器负责联系其他服务器,并最终返回结果。

迭代查询
如果是迭代查询,情况就不同了。你问管理员这本书在哪里,他可能不知道,但会告诉你“去二楼找那个部门问问。” 你再去二楼问,二楼的人可能又让你去别的地方。你自己需要一步步去找,直到找到结果。这就是迭代查询——本地DNS服务器每次从上级服务器获取提示,自己继续查询下一级,直到找到结果。

  • 资源记录(Resource Records,RR):DNS服务器存储的记录,包括域名、类型、TTL等信息。

    • 常见类型

      • A记录:域名到IPv4地址的映射。

      • AAAA记录:域名到IPv6地址的映射。

      • CNAME记录:别名记录,将一个域名指向另一个规范域名。

      • NS记录:指定域名的权威DNS服务器。

      • MX记录:指定域名的邮件交换服务器。

2.5.7 维护问题:新增一个域

  • 要新增一个域,必须在上级域的名字服务器中增加两条记录:一条指向新增子域的域名,另一条指向子域名字服务器的IP地址。

  • 例如:在.com域中新增一个networkutopia.com域,必须向注册机构提供权威DNS服务器的名字和IP地址,注册机构会在.com顶级域名服务器中插入资源记录,完成域名的新增工作。

2.5.8 攻击DNS

  • DDoS攻击:通过发送大量查询请求轰炸DNS服务器,试图使其无法响应合法请求。

  • DNS中毒攻击:攻击者通过伪造响应数据,向DNS服务器插入虚假记录,诱导用户访问错误的IP地址。

2.2~2.5 报文格式总结

以上几种应用层协议,让进程间通信通过操作系统定义或交换报文

这些报文都通过不同的传输层协议(TCP / UDP)进行通信。

不是要记住他们报文的格式,而是从整体上理解他们的共同之处。

后面要学的传输层实际上就是对这些报文进行传输。

1. HTTP(超文本传输协议)报文格式

  • 传输层协议:TCP

  • 请求报文

    GET /index.html HTTP/1.1   # 请求行,GET方法请求资源/index.html,使用HTTP/1.1版本
    Host: www.example.com      # 请求头部,指定目标主机
    User-Agent: Mozilla/5.0    # 请求头部,说明客户端类型
    Accept: text/html          # 请求头部,客户端可接受的内容类型为HTML
                               # 空行,表示请求头部结束
  • 响应报文

    HTTP/1.1 200 OK            # 状态行,HTTP版本1.1,状态码200(请求成功),状态短语OK
    Content-Type: text/html    # 响应头部,服务器发送的内容类型为HTML
    Content-Length: 1234       # 响应头部,内容的字节长度为1234
    Connection: keep-alive     # 响应头部,保持连接
                               # 空行,表示响应头部结束
    <html>                     # 消息主体,包含HTML内容
    <body>
    <h1>Welcome to Example</h1>
    </body>
    </html>

2. FTP(文件传输协议)报文格式

  • 传输层协议:TCP

  • FTP命令报文

    USER anonymous   # FTP命令,提供用户名为anonymous
    PASS guest       # FTP命令,提供密码为guest
    LIST             # FTP命令,请求列出当前目录的文件列表
  • FTP响应报文

    220 FTP server ready.                # 服务器响应,状态码220表示FTP服务器准备好接受请求
    331 Username okay, need password.    # 状态码331表示用户名正确,需提供密码
    230 User logged in, proceed.         # 状态码230表示用户登录成功
    150 Opening data connection.         # 状态码150表示数据连接正在打开
    226 Transfer complete.               # 状态码226表示文件传输完成

3. SMTP(简单邮件传输协议)报文格式

  • 传输层协议:TCP

  • SMTP命令报文

    HELO example.com                      # SMTP命令,标识客户端域名为example.com
    MAIL FROM: <sender@example.com>        # SMTP命令,指定邮件发送者
    RCPT TO: <recipient@example.com>       # SMTP命令,指定邮件接收者
    DATA                                  # SMTP命令,表示开始传输邮件内容
    From: sender@example.com              # 邮件头部,指定发送者地址
    To: recipient@example.com             # 邮件头部,指定接收者地址
    Subject: Test Email                   # 邮件头部,邮件主题
                                          
    This is a test email.                 # 邮件正文,内容为测试邮件
    .                                     # 使用句点表示邮件正文结束
    QUIT                                  # SMTP命令,断开连接
  • SMTP响应报文

    220 smtp.example.com ESMTP Postfix     # 服务器响应,状态码220,SMTP服务器准备就绪
    250 Hello example.com                  # 状态码250,服务器接受客户端的HELO命令
    250 OK                                 # 状态码250,服务器接受MAIL FROM和RCPT TO命令
    354 End data with <CR><LF>.<CR><LF>    # 状态码354,提示客户端可以开始输入邮件正文
    250 OK: queued as 12345                # 状态码250,邮件已成功排队等待发送
    221 Bye                                # 状态码221,断开SMTP连接

4. DNS(域名系统)报文格式

  • 传输层协议:UDP(一般情况)或TCP(大型传输)

  • DNS查询报文

    ID: 0x1234                             # DNS报文头部,唯一标识查询的ID号
    Flags: 0x0100 (Standard query)         # 标志字段,0x0100表示标准查询
    Questions: 1                           # 问题数,表示查询中的问题数量为1
    Answer RRs: 0                          # 回答记录数为0,查询报文没有回答
    Authority RRs: 0                       # 权威记录数为0
    Additional RRs: 0                      # 附加记录数为0
    ​
    QName: www.example.com                 # 问题部分,查询的域名为www.example.com
    QType: A                               # 查询类型为A记录(IPv4地址)
    QClass: IN                             # 查询类为IN,表示互联网查询
  • DNS响应报文

    ID: 0x1234                             # DNS报文头部,唯一标识查询的ID号(与请求一致)
    Flags: 0x8180 (Standard query response, No error)  # 标志字段,0x8180表示标准查询响应,无错误
    Questions: 1                           # 问题数,表示查询中的问题数量为1
    Answer RRs: 1                          # 回答记录数为1,表示返回1个答案
    Authority RRs: 0                       # 权威记录数为0
    Additional RRs: 0                      # 附加记录数为0
    ​
    QName: www.example.com                 # 问题部分,查询的域名为www.example.com
    QType: A                               # 查询类型为A记录(IPv4地址)
    QClass: IN                             # 查询类为IN,表示互联网查询
    ​
    Name: www.example.com                  # 回答部分,域名为www.example.com
    Type: A                                # 记录类型为A(IPv4地址)
    Class: IN                              # 类为IN(互联网)
    TTL: 86400                             # 生存时间为86400秒
    RDLENGTH: 4                            # 回答数据长度为4字节(IPv4地址)
    RDATA: 93.184.216.34                   # 回答数据,IP地址为93.184.216.34


从 2.6 开始,有些应用是使用前面的 HTTP 协议,有些是直接使用 TCP / UDP 协议,除了一些流媒体特殊协议以外,没有特殊的报文格式。

2.6 P2P 应用

纯P2P架构与传统的客户端/服务器(C/S)架构在网络通信、资源分发和系统扩展性等方面有着显著的区别。为了深入理解P2P架构的优势和挑战,我们将以特定的逻辑顺序,串联起上述内容,对两种架构进行比较,并探讨P2P文件共享的实现和优化策略。


一、P2P架构的基本特点

  1. 无中心服务器:纯P2P网络没有或极少依赖一直运行的服务器,消除了单点故障的风险。

  2. 节点直接通信:任意端系统(Peer)都可以直接通信,无需通过中央服务器转发数据。

  3. 利用节点服务能力:每个Peer既是资源的消费者,也是资源的提供者,共同构建网络的整体服务能力。

  4. 节点动态性:Peer节点可能间歇性上网,每次上线时IP地址可能发生变化,这要求网络具备处理节点频繁加入和离开的能力。

典型应用

  • 文件分发:如BitTorrent,通过Peer之间的协作,实现高效的文件共享。

  • 流媒体:如KanKan,利用P2P技术减轻服务器压力,提升流媒体服务的扩展性。

  • VoIP:如Skype,Peer之间直接传输语音数据,提供高质量的通话服务。


二、文件分发的效率比较:C/S架构 vs P2P架构

1. C/S架构下的文件分发

  • 场景描述:一台服务器向N个Peer分发大小为F的文件。

  • 服务器传输时间

    • 发送一个文件拷贝:时间为F/us,其中us为服务器的上传带宽。

    • 发送N个文件拷贝:时间为N × F/us,随着N的增加,时间线性增长。

  • 客户端下载时间

    • 每个客户端需要下载一个完整的文件,时间为F/di,其中di为客户端的下载带宽。

    • 最慢客户端的下载时间:F/dmin,dmin为所有客户端中最小的下载带宽。

  • 总分发时间:Dc-s ≥ max{N × F/us, F/dmin}

    • 分析:服务器成为性能瓶颈,无法高效支持大量客户端的同时下载。

2. P2P架构下的文件分发

  • 服务器传输时间

    • 最少上传一份文件拷贝:时间为F/us,之后由Peer之间互相传输。

  • 客户端下载时间

    • 每个客户端仍需下载完整的文件,最慢客户端的下载时间为F/dmin。

  • 整体上传带宽

    • 总上传带宽:us + Σui,其中Σui为所有Peer的上传带宽总和。

  • 总分发时间:Dp2p ≥ max{F/us, F/dmin, N × F/(us + Σui)}

    • 分析:随着Peer数量N的增加,总上传带宽也增加,分发时间增长缓慢,系统具备良好的扩展性。

3. 实例比较

  • 假设条件

    • 客户端的上传速率为u,文件大小为F = u × 1小时。

    • 服务器上传速率us = 10u,客户端的下载速率dmin ≥ us。

  • 结果分析

    • C/S架构:分发时间随着N的增加而线性增长。

    • P2P架构:由于每个Peer都贡献上传带宽,分发时间增长缓慢,显著优于C/S架构。


三、P2P文件分发的实现:以BitTorrent为例

1. BitTorrent的工作原理

  • 文件分块传输:文件被分为多个256KB的块,便于并行传输,提高下载速度。

  • Torrent与Tracker

    • Torrent:指参与下载同一文件的一组Peer。

    • Tracker:跟踪服务器,维护Torrent中Peer的列表,帮助新Peer加入网络。

  • Peer的加入过程

    1. 注册:新Peer向Tracker注册,获取当前Torrent的Peer列表。

    2. 建立连接:与部分Peer建立邻居关系,开始块的交换。

    3. 下载与上传:在下载文件块的同时,将已下载的块上传给其他Peer。

2. Tit-for-tat(礼尚往来)机制

  • 请求块

    • Peer周期性地询问邻居拥有的块信息,优先请求稀缺的块,确保文件的完整性和下载效率。

  • 上传策略

    • 选择性上传:每个Peer仅向给自己提供最大上传速度的前4个Peer上传,其他Peer被阻塞。

    • 优化的疏通:每隔30秒,随机选择一个被阻塞的Peer进行上传测试,寻找新的合作伙伴。

  • 机制优势

    • 激励贡献:鼓励Peer积极上传,提高整体网络的传输效率。

    • 自适应优化:通过动态调整上传对象,优化资源利用。


四、P2P文件共享的挑战与解决方案

1. 资源定位问题

  • 挑战:如何在一个动态、去中心化的网络中快速找到所需的资源。

  • 解决方案

    • 集中式目录(Napster)

      • 机制:使用中央服务器维护资源索引。

      • 问题:存在单点故障和性能瓶颈,且容易引发版权纠纷。

    • 分布式查询洪泛(Gnutella)

      • 机制:Peer之间相互转发查询请求,覆盖网络中所有节点。

      • 问题:网络开销大,查询效率低,不易扩展。

    • 半分散式架构(KaZaA)

      • 机制:引入超级节点(组长),普通Peer连接到组长,组长之间交换资源信息。

      • 优势:提高查询效率,减轻网络负载,兼顾去中心化和性能。

2. Peer的加入与离开

  • 挑战:Peer节点的频繁上线和下线(Churn)导致网络拓扑和资源的动态变化。

  • 解决方案

    • 维护活跃节点列表:通过Ping/Pong机制,Peer可以发现并连接到活跃的邻居。

    • 冗余连接:建立多个TCP连接,确保即使部分Peer离线,仍能保持网络的连通性。

    • 动态更新邻居关系:Peer定期评估连接质量,调整邻居列表,提高连接的稳定性。


五、P2P网络的优化策略

1. KaZaA的优化

  • 利用不对称性:将网络节点分为组长和普通Peer,充分利用带宽和资源。

  • 组长的作用

    • 跟踪和管理其下属Peer的内容。

    • 与其他组长交换资源信息,扩大搜索范围。

2. 提高文件传输效率的技巧

  • 请求排队

    • 目的:限制并行上传的数量,确保每个上传连接具有足够的带宽。

  • 激励优先权

    • 目的:鼓励Peer共享文件,提升整个系统的资源供给。

  • 并行下载

    • 机制:从多个Peer同时下载文件的不同部分,利用HTTP的字节范围头部。

    • 优势:加快文件下载速度,提升用户体验。


六、总结与展望

P2P架构通过去中心化的方式,实现了网络资源的高效利用和系统的良好扩展性。与传统的C/S架构相比,P2P网络能够有效避免服务器的性能瓶颈,利用Peer节点的上传能力,加快文件分发速度。

然而,P2P网络也面临着资源定位困难、节点动态变化等挑战。通过引入如BitTorrent的tit-for-tat机制、KaZaA的超级节点架构,以及分布式哈希表(DHT)等技术,P2P网络在效率、稳定性和可扩展性方面得到了显著提升。

在未来的发展中,P2P技术将继续演进,可能与区块链等新兴技术相结合,进一步增强网络的去中心化特性和安全性。对于用户而言,理解P2P架构的原理,有助于更好地利用网络资源,享受高效、稳定的网络服务。

2.7 流媒体

流媒体技术的概述与应用

随着互联网的迅猛发展,流媒体技术已成为人们获取音视频内容的主要方式。流媒体服务包括视频点播视频直播实时交互等形式,每一种都有其独特的特性和技术挑战。

一、流媒体的类型和特点

1. 视频点播

  • 特点:用户可以随时观看预先录制好的内容。

  • 技术要求

    • 起始时延:小于10秒,保证用户快速进入观看状态。

    • 交互操作延迟:如拖动进度条等操作,延迟需小于1~2秒,提供流畅的用户体验。

2. 视频直播

  • 特点:实时录制并传输内容,如直播赛事、演唱会等。

  • 技术要求

    • 时延:通常有数秒的延迟,需尽量降低以接近实时。

    • 规模性:支持大量用户同时观看,对网络带宽和服务器性能要求高。

3. 实时交互

  • 特点:双方或多方实时互动,如视频会议、在线游戏等。

  • 技术要求

    • 超低时延:需要小于400毫秒的时延,VR等应用需要小于25毫秒。

    • 高可靠性:对数据丢包和抖动非常敏感,需要稳定的网络传输。

二、流媒体的技术特性

1. 时延和时序性

  • 端到端时延约束:需要在严格的时间内完成数据传输和播放。

  • 时序性约束:数据必须按照顺序连续播放,保证内容的连贯性。

2. 容错性

  • 数据包丢失:流媒体具有一定的容错性,允许部分数据包丢失而不影响整体播放。

  • 数据冗余:通过冗余编码和差错控制,提高抗丢包能力。

3. 网络挑战

  • 带宽限制:网络带宽有限且动态变化,影响数据传输的稳定性。

  • 延迟与抖动:网络延迟和抖动会导致播放卡顿,需要有效的缓冲和同步机制。

  • 异构性:不同用户的网络环境和设备性能差异,需要适配不同的传输策略。

三、视频压缩与编码

1. MPEG视频压缩

  • 基本原理:利用视频帧间的时间和空间冗余,通过压缩算法减少数据量。

  • 帧类型

    • I帧(帧内编码帧):独立编码的关键帧,作为参照点。

    • P帧(预测帧):基于前一帧的差异进行编码,减少重复信息。

    • B帧(双向帧):基于前后帧的差异进行编码,进一步压缩数据。

2. 图像组(GOP)

  • 结构:由一系列I帧、P帧和B帧组成。

  • 作用:通过帧间预测,大幅降低视频数据量,提高传输效率。

3. 编码挑战

  • I帧的重要性:必须周期性地出现,新用户加入或快进时需要从I帧开始解码。

  • 丢包影响:如果关键帧丢失,会影响后续帧的解码,导致画面异常。

四、流媒体的传输与缓冲

1. 传输过程

  • 下载模型:浏览器通过HTTP请求获取元文件和媒体文件。

  • 播放过程:媒体播放器根据元文件的信息,边下载边播放音视频内容。

2. 缓冲机制

  • 作用:平滑网络抖动,避免播放卡顿。

  • 阈值控制

    • 低阈值:缓冲区数据过少时,需要加速传输,防止断流。

    • 高阈值:缓冲区数据过多时,可以减慢传输,避免增加延迟。

3. 网络抖动的应对

  • 缓存播放:在接收端缓存一定的数据后再开始播放,平滑时延抖动。

  • 时延权衡:增加缓冲时间可以减少卡顿,但会增加播放延迟。

五、流媒体传输协议

1. RTSP(实时流协议)

  • 功能:控制流媒体的播放,如播放、暂停、停止等操作。

  • 特点:不传输媒体数据,仅用于信令控制。

2. RTP/RTCP(实时传输协议/控制协议)

  • RTP

    • 功能:实时传输音视频数据,提供时间戳和序列号,支持同步和重建。

    • 特点:不保证服务质量,需要配合其他协议实现可靠传输。

  • RTCP

    • 功能:监控传输质量,提供反馈信息,协助RTP进行传输控制。

3. WebRTC(网页实时通信)

  • 功能:实现浏览器间的实时音视频通信,支持点对点连接。

  • 协议栈

    • SRTP/SRTCP:安全传输协议,保障数据加密和完整性。

    • DTLS:基于UDP的TLS协议,实现传输层安全。

    • ICE/STUN/TURN:解决NAT穿透问题,建立稳定的点对点连接。

六、流媒体的动态自适应传输

1. 带宽挑战

  • 带宽波动:网络可用带宽随时间变化,影响视频传输的质量和稳定性。

  • 码率选择:需要根据带宽动态调整视频的码率,平衡画质和流畅性。

2. DASH(动态自适应流媒体)

  • 基本原理

    • 分片传输:将视频划分为多个小片段,每个片段有多个码率版本。

    • 客户端自适应:客户端根据当前网络状况,选择合适的码率进行下载。

  • 优势

    • 灵活性:可以在会话中动态调整码率,适应带宽变化。

    • 兼容性:基于HTTP协议,容易穿透防火墙和代理服务器。

3. 自适应码率(ABR)算法

  • 基于吞吐量的算法:根据网络吞吐量的测量结果,选择不超过可用带宽的最高码率。

  • 基于缓冲的算法:根据缓冲区的填充程度,调整下载码率,防止缓冲区溢出或耗尽。

  • 放弃请求策略:在检测到下载速度不足时,放弃当前高码率请求,切换到低码率版本。

4. 可伸缩视频编码(SVC)

  • 概念:将视频编码为基础层和多个增强层,支持分级解码。

  • 实现方式

    • 基础层:提供基本的视频质量,带宽不足时仅传输基础层。

    • 增强层:在基础层之上提高画质,带宽充足时传输多个增强层。

  • 优点:灵活适应带宽变化,确保视频的连续播放。

七、结论

流媒体技术在满足用户对高质量、低延迟、不卡顿的音视频服务需求方面,面临着网络带宽、延迟、抖动等多重挑战。通过视频压缩编码、传输协议优化、缓冲机制以及动态自适应码率等技术手段,可以有效提升流媒体的传输效率和用户体验。

未来,随着网络技术的不断发展,如5G和光纤宽带的普及,以及编码技术的进步,流媒体服务将能提供更高质量、更低延迟的内容,满足用户日益增长的需求。

2.8 CDN

内容分发网络(CDN)简介

随着互联网用户的快速增长以及对高清视频流媒体需求的激增,内容分发网络(CDN)应运而生,用以解决如何同时向数百万用户提供流媒体内容的问题。依赖单一的大型“超级服务器”进行内容分发存在以下问题:

  • 网络瓶颈:服务器与客户端之间的路径较长,容易造成延迟,并且网络拥塞会降低带宽。

  • 资源利用效率低:热门视频的多次传输导致网络中充斥着相同内容,浪费了带宽资源。

  • 单点故障:超级服务器一旦出现故障,整个系统的性能都会受到影响。

  • 网络拥塞:周围网络的拥堵使得用户体验变差。

这种解决方案简单但无法扩展,尤其是面对日益增加的用户需求时。

什么是内容分发网络(CDN)?

内容分发网络(CDN)通过在全网部署缓存节点来解决这些问题,缓存节点存储常用的内容,使得用户能够从离自己最近的服务器获取数据,极大地提高了用户体验。CDN的设计对用户是透明的,用户不需要了解其背后的复杂架构。

CDN的部署策略

CDN通常有两种服务器部署策略:

  • 深入网络(Enter Deep):将CDN服务器深入部署到接入网络的内部,更接近用户。这种方法虽然减少了延迟,提升了性能,但由于服务器分布广泛,管理起来更复杂。Akamai是这一策略的典型例子,它在全球1700多个位置部署了服务器。

  • 邀请做客(Bring Home):将服务器部署在较少的关键位置,通常靠近主网络接入点。这种方式管理相对简单,但离用户的距离较远。Limelight Networks采用了此策略,通过租用线路将服务器簇连接在一起。

CDN的运作与内容分发

当用户请求内容时,CDN通过以下机制优化内容的交付:

  • 内容缓存:CDN在其网络节点中存储多份内容拷贝。例如,Netflix将《Mad Men》这样的流行节目保存在多个CDN服务器上。

  • 动态内容路由:根据用户的位置、服务器的负载和网络状况,CDN动态选择最佳服务器为用户提供服务。如果网络路径拥堵,CDN可以将用户重定向到其他服务器,或调整流媒体的传输速率。

  • DNS重定向与负载均衡:CDN使用DNS来解析内容请求,并将请求重定向到最合适的服务器。当用户请求视频时,CDN的授权DNS会将请求引导至最近的CDN服务器。

案例分析:Netflix

Netflix利用CDN广泛分发其视频内容,确保高效的用户体验:

  1. 账户管理:用户通过Netflix的界面管理账户并浏览视频。

  2. 内容选择:当用户选择视频时,Netflix返回一个清单文件,列出可用的流媒体链接和其对应的CDN URL。

  3. 流媒体传输:根据网络状况,用户设备通过DASH协议选择合适的流媒体质量,并从CDN节点请求视频内容。

内容和互联网流量趋势

互联网流量的构成随着时间发生了显著变化:

  • 流量组成的变化:互联网的主要用途从早期的电子邮件和文件传输逐渐转向网页浏览、P2P共享,直到今天的视频流媒体。

  • 视频流量的主导地位:预计到2022年,视频内容将占据全球82%的互联网流量。

  • 内容分发的重要性:随着视频流量占比的增加,如何高效地分发视频内容成为互联网流量管理的关键问题。

服务器集群与Web代理

为了支持大规模的Web服务并处理高流量,企业使用以下技术:

  • 服务器集群:多个服务器协同工作来处理用户请求,分担负载并提供冗余。

  • Web代理与缓存:代理缓存系统将内容缓存在接近用户的位置,减少原始服务器的负载并提高响应速度。

视频流媒体与CDN

CDN与先进的视频流媒体技术结合,提升了内容的分发效率:

  • 自适应流媒体:例如DASH协议,根据网络条件实时调整视频质量,确保流畅播放。

  • 客户端智能化:客户端可以根据实时网络状况选择合适的CDN服务器以及视频质量。

  • 内容多副本存储:CDN在多个节点存储不同质量的内容,以满足不同用户的需求。

总结

内容分发网络(CDN)在现代互联网基础设施中扮演着重要角色。通过智能地部署服务器节点,CDN有效解决了大规模内容分发中的延迟、网络拥塞等问题,并极大提高了用户体验。随着互联网流量的不断增长,尤其是视频流量的主导地位,CDN将继续在内容传输中发挥关键作用。

3. 传输层

  • 理解传输层的工作原理:

    • 多路复用 / 解复用

    • 可靠数据传输

    • 流量控制

    • 拥塞控制

  • 传输层协议:UDP / TCP

  • 传输层给应用层提供什么服务:

  • 传输层依赖的网络层提供什么服务:

3.1 多路复用和解复用

IP 数据报首部中协议字段的值,表明了IP数据报数据载荷部分封装的是何种协议数据单元。

3.2 UDP 与 TCP 对比

八股文:TCP面向连接、可靠、基于字节流。

  1. UDP 无连接 ;TCP 面向连接

  1. UDP支持单播多播广播;TCP只支持单播

  1. UDP 面向应用报文;TCP面向字节流

UDP:

发送方的应用进程将应用层报文交付给传输层的UDP,UDP会直接给应用层报文添加一个UDP首部,使之成为UDP用户数据报,然后进行发送(忽略运输层下的各层处理)。

接收方的UDP收到该UDP数据报后,去掉UDP首部,将应用层报文交付给应用进程。

UDP对应用进程交下来的报文既不合并也不拆分,而是保留这些报文的边界。即UDP是面向应用报文的。

TCP:

发送方的TCP把应用进程交付下来的数据块仅仅看作是一连串的、无结构的字节流。TCP 不知道这些待传输字节流的含义,仅将他们编号并存储在自己的发送缓存中。TCP 根据发送策略,从发送缓存中提取一定数量的字节,构建 TCP 报文段并发送。

接收方的 TCP,一方面从所接收到的 TCP 报文段中,取出数据载荷部分并存储在接收缓存中;一方面将接收缓存中的一些字节交付给应用进程。接收方的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层数据。

TCP 不保证接收方应用进程所收到的数据块与发送方应用进程所发出的数据块具有对应大小的关系。如发送方应用进程交给发送方 TCP 共 10 个数据块,但是接收方TCP 可能只用了 4个数据块就把字节流交付给接收方应用进程。不过接收方接收到的字节流必须和发送方应用进程发出的字节流完全一样。

TCP 面向字节流的,这正是 TCP 实现可靠传输、流量控制以及拥塞控制的基础。

在实际网络中,TCP 连接两端可以同时进行 TCP 报文段的发送和接收,即全双工通信。

一个 TCP 报文段可以包含上千个字节。

  1. UDP 不可靠,遇到传输差错及丢弃;TCP可靠,不会出现传输差错

  1. UDP 首部 8 字节;TCP 首部 20 ~ 60 字节

UDP 不提供可靠传输服务,仅仅在网际层基础上添加了用于区分应用进程的端口,因此首部很简单。

TCP 为了实现可靠传输流量控制拥塞控制,首部中字段多,长度长。

3.3 TCP 的流量控制

流量控制指发送方的速率不要太快,让接收方来得及接收,使用滑动窗口实现。

  • ACK: 确认标志位,表示当前报文包含确认信息。

  • ack: 确认号,指接收方期望接收到的下一个数据序号。

  • seq: 序号,标识发送数据的起始字节位置。

  • rwnd: 接收窗口大小,表示接收方缓冲区剩余的可用空间。

  • swnd: 发送窗口大小,由发送方根据接收方的rwnd和网络拥塞情况动态调整,用于限制发送方能同时发送的最大数据量。

  • cwnd: 拥塞窗口大小,由发送方维护并根据网络拥塞状况动态调整,用于实现拥塞控制。cwnd通常与rwnd配合,取两者的最小值作为实际发送窗口的限制。

图中初始 rwnd=400,因此 A 一次最多可以发送 400 字节数据。

在 TCP 的累计确认机制下,发送窗口的起始位置取决于接收方最后成功确认的数据序号。如当 seq=201 的数据丢失时,接收方 B 通过 ACK(ack=201) 告知发送方 A,它已经成功接收到 1~200 字节的数据。滑动窗口的起始位置会调整到 201,即从未确认的数据开始 (seq=201)。发送方 A 只能从窗口的起始位置重新发送未确认的数据,而不能发送新数据超出接收窗口范围。

零窗口导致的死锁问题,即发送方和接收方因窗口控制和通知丢失而陷入相互等待的状态。

通过窗口探测 (Window Probe) 机制来打破死锁,确保数据传输恢复。

如果探测报文或窗口更新通知丢失,A 持续重新发送零窗口探测报文,直到窗口非零或连接超时。

注意,当接收窗口大小 (rwnd) 为 0 时,接收方会暂停接收新的数据报文,但控制报文(如 ACK 或探测报文)以及特殊的零窗口探测数据仍可以被处理。

3.4 TCP 的拥塞控制

拥塞:在某段时间对某一资源需求超过资源所能提供的可用部分(比如把带宽跑满),网络性能就要变坏。

这张图说明了网络拥塞(Congestion)的概念以及在有无拥塞控制情况下对吞吐量(吞吐量)与输入负载(输入负载)关系的影响。

图中主要展示了三种情况:

  1. 理想的拥塞控制(绿色曲线):这是最优情况,网络能够有效地管理拥塞。吞吐量随着输入负载的增加线性上升,直到达到最大容量,表现出稳定的性能。

  2. 实际的拥塞控制(蓝色曲线):这是较为现实的情况,拥塞被部分控制,但存在一定的效率损失。当负载增加到接近网络容量时,吞吐量增长逐渐趋于平稳,但由于有控制措施,网络能避免严重下降。

  3. 无拥塞控制(红色曲线):这是最糟糕的情况,没有任何拥塞控制机制。吞吐量在初期随着负载增加而上升,但当拥塞加剧时,吞吐量急剧下降直至为零,导致网络“死锁”。

图中还标明了轻度拥塞严重拥塞的区域,从而指出了从可控到不可控拥塞的转变过程。没有拥塞控制会导致网络性能崩溃,而良好的拥塞控制可以维持网络性能的稳定性。

下面介绍这四种拥塞控制算法的基本原理,假定如下条件:

  1. 数据是单方向传送,而另一个方向只传送确认。

  2. 接收方总是有足够大的缓存空间,因此发送方发送窗口的大小由网络的拥塞程度来决定。

  3. 以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位。

  • swnd: 发送窗口大小,由发送方根据接收方的rwnd和网络拥塞情况动态调整,用于限制发送方能同时发送的最大数据量。

  • cwnd: 拥塞窗口大小,由发送方维护并根据网络拥塞状况动态调整,用于实现拥塞控制。cwnd通常与rwnd配合,取两者的最小值作为实际发送窗口的限制。

  • 慢启动 (slow-start):

    • 过程:cwnd(拥塞窗口)从较小值开始(例如1),每次收到ACK时呈指数增长(加倍)。

    • 阈值:初始ssthresh(慢启动阈值)设置为16。

    • 切换条件:当cwnd达到ssthresh时,进入拥塞避免阶段。

  • 拥塞避免 (congestion avoidance):

    • 过程:cwnd按线性增长(每RTT增加1MSS)。

    • 目标:避免指数增长导致网络拥塞。

  • 重传计时器超时处理:

    • 原因:重传计时器超时,判断网络可能出现了拥塞。

    • 处理

      1. 更新ssthresh:ssthresh更新为当前cwnd值的一半。

      2. 调整cwnd:cwnd值减小到1,重新进入慢启动阶段。

  • 快速恢复机制 (Fast Recovery):

    • 在超时触发后,跳过慢启动的初期指数增长,根据网络情况逐步恢复cwnd大小。

  • 超时重传(Timeout)

    • 当发生超时,认为网络出现严重拥塞:

      • 更新 ssthresh = cwnd / 2 = 24 / 2 = 12

      • cwnd 重置为 1,重新进入慢启动阶段。

  • 快速重传与快速恢复

    • 快速重传:在收到 3 个重复确认(DupACK)时触发,表示丢包但未严重拥塞。

      • 不重置 cwnd,而是减半并更新 ssthresh

    • 快速恢复cwnd 从新的 ssthresh 开始增长,线性增加,重新进入拥塞避免。

3.5 TCP 的连接建立:三报文握手

TCP的连接建立要解决以下三个问题:

  1. 使TCP双方能够确知对方的存在;

  2. 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);

  3. 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

为什么不能两报文握手?

3.6 TCP 的连接释放:四报文挥手

3.7 TCP 超时重传时间的选择

参考

  1. 中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 https://www.bilibili.com/video/BV1JV411t7ow

  2. 湖南科技大学 - 计算机网络微课堂(有字幕无背景音乐版)https://www.bilibili.com/video/BV1c4411d7jb

  3. ChatGPT GPT-4o & GPT-o1 chatgpt.com

  4. DNS 学习手记 https://elittle.me/blog/article/detail/9683439826aafe37

  5. 什么是 DNS? https://info.support.huawei.com/info-finder/encyclopedia/zh/DNS.html