计算机网络(自顶向下)期末复习笔记

温馨提示:本笔记基于中科大计网课程(中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程_哔哩哔哩_bilibili),但有些部分因为考试没考所以没做相关内容的笔记

文章目录

1.Introduction

1.1 网络边缘

概念:
网络中连接用户设备终端的部分,也称为网络边界。这个概念通常指的是网络中最外围的部分,与用户直接相连。网络边缘是用户与网络之间的接口,是用户终端设备通过物理连接或无线连接接入网络的地方。在网络边缘,用户设备通过各种通信计数连接到网络的核心部分(例如以太网、WI-FI,蜂窝网络等),从而访问互联网或其他网络服务。

1.1.1 面向连接

在数据传输之间,需要先建立一个连接,这种连接一旦建立,就会在数据传输的整个过程中保持。直到传输完成,连接才会被释放。

特点:

  1. 可靠性高:面向连接协议确保数据完整、无丢失、无重复,适合传输重要数据
  2. 顺序保证:数据包按顺序到达,适合需要顺序数据传输的应用
  3. 流量控制和拥塞控制:有效防止网络拥塞,提高传输效率

1.1.2 TCP

概念:
TCP是一种面向连接的传输层协议,它在两个网络主机之间提供了一种可靠的字节流服务,在TCP/IP协议族中,TCP位于IP协议之上,负责在数据从源传送到目标时提供可靠的传输服务

主要特点:

  1. 面向连接:TCP在数据传输前,需要先建立连接。这个过程通常被成为"三次握手"。只有在连接建立后,才能开始数据传输
  2. 可靠传输:TCP通过序列号、确认应答、重传机制、流量控制、拥塞控制等方式,保证了数据的可靠传输
  3. 双向通信:TCP连接的两端都可以发送和接收数据
  4. 字节流:TCP不关心应用数据的具体内容,只负责如何可靠地从一端传到另一端,因此它是一种字节流服务

工作流程:

  1. 连接建立(三次握手):客户端发送一个SYN包(序列号seq=x)到服务器,然后进入SYN_SENT状态。服务器收到SYN包后,发送一个SYN ACK包(序列号seq=y,确认号ack=x+1)到客户端,然后进入SYN_RCVD状态。客户端收到服务器的SYN ACK包后,发送一个ACK包(确认号ack=y+1)到服务器,然后进入ESTABLISHED状态。服务器收到ACK包后,也进入ESTABLISHED状态,此时连接建立成功。
  2. 数据传输:在连接建立后,双方可以开始数据传输。每发送一个数据段,就会设置一个序列号。接收方收到数据后,会发送一个确认包,确认号为收到的数据段的序列号加1。
  3. 连接终止(四次挥手):任何一方都可以发起关闭连接。发起方发送一个FIN包,然后进入FIN_WAIT_1状态。接收方收到FIN包后,发送一个ACK包,然后进入CLOSE_WAIT状态。发起方收到ACK包后,进入FIN_WAIT_2状态。接收方发送一个FIN包,进入LAST_ACK状态。发起方收到FIN包后,发送一个ACK包,然后进入TIME_WAIT状态。接收方收到ACK包后,关闭连接。发起方等待一段时间(2MSL,最长报文段寿命的两倍)后,也关闭连接。

使用TCP的应用程序及其原因:某些应用使用TCP协议,如HTTP(用于网页传输)、FTP(用于文件传输)、Telnet(用于远程登录)、SMTP(用于电子邮件传输)。TCP提供可靠的传输,确保数据包按顺序到达且没有丢失,适用于需要数据完整性和顺序传递的引用

1.1.3 UDP

用户数据报协议(UDP)是一种简单的、无连接的传输层协议。与TCP不同,UDP不提供可靠性、数据包重传、流量控制和拥塞控制等服务,而是直接奖数据发送到网络中,这使得UDP非常适合那些需要快速传输、对丢包不敏感的应用,例如视频流、音频流和在线游戏

特点:

  1. 无连接:发送数据之前不需要建立连接。数据报可以直接从发送方发送到接收方
  2. 不可靠传输:不保证数据报能成功送达接收方,不提供重传机制。如果数据在传输过程中丢失,发送方不会知道,也不会重传
  3. 数据报独立:即不保证顺序
  4. 无流量控制和拥塞控制
  5. 轻量级

头部格式:

  • 源端口(16位):发送方端口号
  • 目的端口(16位):接收方端口号
  • 长度(16位):UDP头部和数据的总长度
  • 校验和(16位):用于错误检测(可选)

使用UDP的应用程序及其原因:某些应用程序使用UDP协议,如流媒体(实时视频和音频)、DNS(域名解析)、Skype(实时语音和视频通信)。UDP提供更快的传输速度,没有连接简历和保持的开销。适用于对实时性要求高但对数据丢失不敏感的应用

1.2 网络核心

概念
指的是高性能路由器和交换机组成的通信子网,它负责奖来自网络边缘的数据传递到目标网络边缘。网络核心的主要功能包括数据包转发、路由选择和流量管理。

核心功能

  • 数据包转发 (Forwarding):将数据包从输入链路转发到输出链路的过程。每个路由器都有一个转发表(Forwarding Table),根据目的地址将数据包转发到适当的输出端口
  • 路由选择(Routing):路由选择是指确定从源到目的地的最佳路径的过程。路由器使用路由协议(如OSPF、BGP)交换路由信息,构建和更新路由表(Routing Table),并根据路由表选择数据包的转发路径
  • 流量管理和控制:核心网络需要有效管理和控制流量,以避免网络拥塞和确保服务质量(QoS)。流量管理技术包括队列管理、调度算法和流量整形

结构

  • 路由器:负责接收、处理和转发数据包。通过路由协议与其他路由器交换信息,确定数据包的最佳转发路径
  • 交换机:用于局域网内部的数据转发。通常具备高带带宽和低延迟的特点,负责将不同子网连接在一起
  • 高速链路:提供高带宽和低延迟,确保数据在网络核心中快速传输

路由选择算法

  • 静态路由:手动配置
  • 动态路由:路由器自动计算和更新路由。
    • 距离矢量路由(Distance Vector Routing):如RIP(路由信息协议),通过交换路由表条目更新路由
    • 链路状态路由(Link State Routing):如OSPF(开放最短路径优先),通过传播链路状态信息构建网络拓扑图,计算最短路径
  • 路径矢量路由(Path Vector Routing):用于自治系统间的路由选择,如BGP(边解网关协议)。路径矢量路由记录到达每个目的地的路径中的自治系统序列。

OSPF(开放最短路径优先)

  • 链路状态路由协议:通过链路状态广播(LSA)共享网络拓扑信息
  • 最短路径优先(SPF)算法:通过Dijkstra算法从源节点到所有其他节点的最短路径
  • 多区域支持:通过划分区域提高网络可扩展性和效率

BGP(边界网关协议)

  • 路径矢量路由协议:用于不同自治系统(AS)之间的路由选择
  • 路径属性:每条路由条目包含一系列属性,如AS路径、下一跳灯
  • 策略控制:网络管理员可以基于策略配置BGP,控制路由的传播和选择

数据包转发过程

  1. 源节点发送数据包:源节点根据ARP(地址解析协议)将数据包的目的MAC地址设置为默认网关(路由器)的MAC地址,并发送数据包
  2. 路由器接收数据包:默认网关的路由器接收到数据包,检查数据包的目的IP地址
  3. 查找转发表:路由器在转发表中查找目的IP地址对应的输出端口
  4. 转发数据包:路由器根据查找结果,将数据包转发到下一个路由器或目标网络
  5. 目的地接收数据包:数据包通过多个路由器后到达目标网络,由目标网络的路由器转发给最终目的节点

优化

  1. 负载均衡(Load Balancing):将网络流量均匀分布到多个路径或设备上,避免单一链路或设备过载
  2. 质量服务(QoS):提供不同等级的服务质量,确保关键应用(如VoIP、视频会议)优先获得带宽和低延迟
  3. 拥塞控制:通过流量监控和控制技术(如队列管理、流量整形)防止网络拥塞,提高网络性能和稳定性

1.2.1 分组交换

数据传输方式,它将数据拆分成小的数据包,通过网络逐个传输,最终在目的地重新组装,这种方式有效利用网络资源,提高传输效率,是现代数据网络的基础技术之一。

基本原理

  1. 数据分组:发送方将要发送的数据拆分成多个小数据包,每个数据包包含一部分数据和控制信息(如目的地址、序列号)
  2. 独立传输:每个数据包独立传输,可以选择不同的路径通过网络,类似于在邮政系统中每个信件独立传输
  3. 动态路由选择:根据当前网络状态和路由算法,为每个数据包选择最佳路径
  4. 数据包重组:接收方在收到所有数据包后,根据序列号将数据包重新组装成原始数据

特点

  • 高效利用带宽:网络带宽被动态分配给多个数据流,最大限度利用网络资源,避免了电路交换中固定带宽的浪费
  • 灵活性高:数据包可以选择不同路径传输,网络具有更高的容错能力和适应性
  • 传输延迟:数据包可能经历不同路径,导致到达时间不同,这种传输延迟称为抖动(Jitter),需要在实时应用中进行处理
  • 拥塞控制:分组交换网络需要有效地拥塞控制机制,以防止网络过载和数据包丢失

1.3 接入网和物理媒体

1.3.1 接入网

连接用户终端和网络边缘路由器(即,最接近用户的ISP(Internet Service Provider)路由器)的网络。接入网技术可以分为两大类:家庭接入和企业接入。家庭接入主要有拨号接入、DSL(Digital Subscriber Line)接入、HFC(Hybrid Fiber Coax)接入、卫星接入、FTTH(Fiber To The Home)接入等;企业接入主要有以太网接入、WiFi接入等。

调制解调器

在住宅接入网中,调制解调器(Modem)常用于将数字信号转换为模拟信号,并通过电话线或电缆传输

基本概念:

  • 调制(Modulation):将计算机生成的数字洗脑转换为适合通过模拟介质(如电话线、电缆)的模拟信号
  • 解调(Demodulation):将接收到的模拟信号转换回计算机能够处理的数字信号

工作原理:主要用于两个方向的信号转换:

  • 上行链路(Uplink):将来自计算机的数字信号转换为模拟信号,发送到互联网服务提供商(ISP)
  • 下行链路(Downlink):将ISP发送的模拟信号转换为数字信号,供计算机使用

调制解调器类型:

  • 电话线调制解调器 (Dial-up Modem)
    • 特点:使用标准电话线(POTS)传输数据
    • 速度:最高传输速度一般为56kbps,较低
    • 优点:便宜,容易安装,适用于电话覆盖范围广的地区
    • 缺点:速度慢,占用电话线,影响通话
  • DSL调制解调器(Digital Subscriber Line)
    • 特点:使用电话线进行数据传输,但频率范围更高,不影响通话
    • 速度:传输速度从几百kbps到几十mbps不等,取决于DLS类型(ADSL、VDSL)
    • 优点:高速传输,不影响电话使用,覆盖范围广
    • 缺点:需要DSLAM设备,距离交换机越远速度越慢
  • 电缆调制解调器(Cable Modem)
    • 特点:使用同轴电缆传输数据,与电视信号共享电缆网络
    • 速度:传输速度从几Mbps到几百Mbps
    • 优点:高速传输,带宽大,适合多媒体应用
    • 缺点:用户共享带宽,用户数量多时速度可能下降
  • 光纤调制解调器:
    • 特点:使用光纤传输数据,传输速度极快
    • 速度:传输速度从几十Mbps到Gbps
    • 优点:超高速传输,低延迟,适合高需求用户
    • 缺点:成本高,安装复杂,需要光纤覆盖

1.3.2 物理媒体

指用于数据传输的实体介质,分为两类:
有指导性的物理媒体和无指导性的物理媒体。
有指导性的物理媒体:双绞线、同轴电缆和光纤,数据沿着固体媒体传输。无指导性的物理媒体:无线LAN、微波系统和卫星通信系统,数据在空气或外层空间中传播。

1.4 Internet结构和ISP

1.4.1 Internet结构

Internet是全球最大的计算机网络,通过各种网络技术和设备将世界各地的计算机和网络连接起来。

层次化结构:

  1. 核心层(Core Layer):由高性能的骨干路由器和告诉光纤网络组成,负责高速传输数据。主要由大型的骨干网络提供商 (如Level 3、AT&T、Verizon)维护
  2. 分布层(Distribution Layer):连接核心层和接入层,通常由地区性或国家性的网络服务提供商(ISP)负责。它们的任务是数据的路由选择和转发
  3. 接入层(Access Layer):为最终用户提供接入Internet的服务,包括家庭用户和小型企业。这一层由本地的ISP提供服务,连接终端用户和分布层

互联换交换中心(IXP):物理基础设备,允许不同的ISP和内容提供商(如谷歌、Facebook)互相连接并交换流量。IXP的存在减少了通过中介路由的需要,提高了效率和速度,降低了成本

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

1.5.1 延迟

分组交换网络中的延迟:

  • 处理延迟:路由器或交换机处理数据包所需的时间
  • 排队延迟:数据包在路由器或交换机中排队等待转发的时间
  • 传输延迟:是路由器或交换机将数据包的比特从输入链路传输到输出链路所需的时间
  • 传播延迟:信号在介质中传播所需的时间,取决于介质的物理特性和传播距离

其中排队延迟是可变的,因为它取决于网络流量和阻塞情况

不同链路类型(LAN、无线、WAN)中的四种分组延迟来源:

  • LAN:通常具有低延迟和高带宽,但可能存在排队延迟
  • 无线网络:寿险于信号干扰和覆盖范围、传播延迟可能较高
  • WAN(广播域):跨越较大地理范围,传播延迟显著增加,可能存在更多的中间节点处理和排队延迟
处理延迟

指路由器或交换机在接收到数据包后,进行必要的处理所花费的时间

主要过程:

  • 检查数据包的头信息(如IP地址、协议类型等)
  • 执行路由查找决定转发路径
  • 进行错误检查(如CRC校验)
  • 可能进行一些数据包修改(如TTL字段的减1操作)

特征:

  • 处理延迟通常较短,但复杂的路由查找和其他处理可能增加延迟
  • 取决于路由器或交换机的处理能力和数据包的复杂度
排队延迟

是数据包在路由器或交换机的输出队列中等待传输所花费的时间

主要过程:

  • 当数据包到达时,如果输出链路正忙于传输其他数据包,它需要在队列中等待
  • 队列的长度和传输效率决定了排队延迟的长短

特征:

  • 排队延迟是动态的,取决于网络流量负载和队列的管理策略
  • 在高流量条件下,排队延迟可能显著增加

R=链路带宽(bps)
L=分组长度(bits)
α=分组到达队列的平均速率
流量强度 = Lα/R

  • 流量强度约等于0:平均排队延迟很小
  • 流量强度约等于1:延迟变得很大
  • 流量强度大于1:平均排队延迟将趋向无穷大
传输延迟

是路由器或交换机将数据包的比特从输入链路传输到输出链路所需的时间

公式:传输延迟 = 数据包大小(bits)/链路带宽(bps)

主要过程:数据包从路由器或交换机的缓冲区发送到传输介质

特征:

  • 传输延迟取决于数据包的大小和链路的带宽
  • 带宽越高,传输延迟越短;数据包越大,传输延迟越大
传播延迟

是信号在传输介质中从发送端到接收端所需的时间

公式:传播延迟 = 链路长度/信号传播速度

主要过程:信号以有限的速度在物理介质中传播

特征:

  • 传播延迟取决于介质的类型和链路的长度
  • 在光纤中,信号以接近光速传播;在铜线或无线电波中,传播速度相对较慢

1.5.2 丢失

数据包在传输过程中未能到达其目的地

原因:

  1. 网络拥塞:当网络中的数据流量超过了可用带宽,路由器和交换机的缓冲区会变得过载,导致数据包被丢弃
  2. 硬件故障
  3. 软件故障
  4. 链路错误:物理链路上的干扰
  5. 过时的TTL(Time To Live):数据包在网络中传输的时间过长,其TTL字段减少到零时,数据包会被丢弃

1.5.3 吞吐量

路径的吞吐量:单位时间内成功传输的数据量,可以通过路径上所有链路的带宽和延迟来计算。
常见方法是采用瓶颈带宽(最小带宽)和端到端延迟来估算

1.6 协议层/服务模型

1.6.1 概念

ISO/OSI模型分为7层,每层负责特定的网络功能:

  1. 物理层:传输原始比特流
  2. 数据链路层:负责在同一物理链路上的相邻节点之间传输数据
  3. 网络层:负责路径选择和数据包转发
  4. 传输层:提供端到端通信(可以说传输层提供端到端,但是不能说端到端通信是传输层一层提供的),在进程之间传输数据
  5. 会话层:管理会话和数据交换
  6. 表示层:数据格式转换和加密
  7. 应用层:提供应用程序接口和服务

TCP/IP的数据封装过程:
在TCP/IP协议栈中,数据封装过程包括将高层数据(应用层数据)封装到传输层(TCP或UDP报文段),然后封装到网络层(IP数据包),最后封装到链路层(帧),通过物理层传输,每层都添加特定的头部信息,以确保数据在网络中正确传输和处理

1.6.2 协议数据单元

Protocol Data Util 是指网络协议在通信过程中传输的基本数据单元。不同的网络层次使用不同类型的PDU,以下是各层常用的PDU及其解释

物理层:bit,负责在物理媒介上传输比特流

数据链路层:Frame(帧),包括头部、数据和尾部。头部包含控制信息(如目的地址和源地址),尾部通常包括检验和,用于检测和纠正传输错误

网络层:Packet(分组/包),头部包含网络路由信息,如源IP地址、目的IP地址和其他控制信息。

传输层:Segment/Datagram(段/数据报),在面向连接中称为段,在无连接协议中称为数据包。传输层PDU的头部包含端口号和其他控制信息(如序列号、确认号)

会话层:Session Protocal Data Unit(数据协议单元),负责管理会话连接的建立、维护和终止。

表示层:Presentation Protocol Data Unit(数据单元),负责数据的格式化、加密和解密

应用层:Message(消息),负责应用程序之间的通信,其PDU可以是电子邮件、文件输出数据、网页数据等

PDU传输过程:在数据传输过程中,数据会从应用层向下经过每一层,每一层都会在数据前面添加一个特定的头部信息(封装过程),形成该层的PDU。传输过程中,没经过一层,数据都被封装一次。数据到达接收端后,数据从物理层向上经过每一层,每一层会去掉相应的头部信息,知道数据被应用层接收到

2.Application Layer

1.1 原理

  • 应用层协议和底层传输协议:网络应用使用特定的应用层协议来实现通信,这些协议通常建立在底层的传输协议之上,例如,SMTP(简单邮件传输协议)用户电子邮件传输,它通常使用TCP作为底层传输协议。
  • 应用架构和网络架构:网络应用可以采用不同的架构,包括客户端/服务器(CS)、点对点(P2P)和混合架构。网络架构指的是在网络中通信的协议和体系结构,例如TCP/IP和ISO/OSI
  • 常见应用的传输服务需求:不同的应用对传输服务有不同的需求,这些需求可能包括可靠性、实时性、带宽等

1.1.1 体系结构

客户-服务体系结构

概述:客户和服务器之间通过网络进行通信和数据交换,通常由客户机发起请求,服务器处理请求并返回结果

基本概念:

  • 客户机
    • 服务的请求方。通常是用户终端设备,如PC、智能手机、平板电脑等
    • 向服务器发出请求并等待响应
    • 向用户提供界面,允许用户与系统交互并请求服务
  • 服务器
    • 服务的提供方,它接收并处理客户机的请求,返回相应的结果
    • 高性能计算机,具有强大的处理能力和存储能力
    • 可以同时为多个客户机提供服务

工作原理:

  • 连接建立:客户机与服务器之间通过网络协议(TCP/IP)建立连接,通常是客户机发起连接请求,服务器接受连接
  • 请求和响应:
    • 客户机向服务器发送请求报文,请求报文包含客户机需要执行的操作或请求的数据
    • 服务器接收到请求后,进行处理,并将结果封装在响应报文中返回给客户机
  • 连接终止:
    • 完成数据交换后,客户机和服务器之间的连接可以断开,以释放资源

优点:

  • 集中管理:便于维护和更新
  • 资源共享:提高资源利用率
  • 安全性:增强了系统的安全性和数据保护能力

缺点:

  • 服务器负载:需要更多的硬件资源和优化措施
  • 单点故障:服务器宕机导致所有客户机无法访问服务
  • 网络依赖:需要稳定的网络连接,网络问题会影响客户机与服务器的通信
P2P体系结构

分布式网络应用架构,其中每个节点既充当客户端,又充当服务器,能够直接相互通信和共享资源。与传统的客户-服务体系结构不同,P2P体系结构没有中心化的服务器,所有节点在功能上是对等的

基本概念:

  • 对等节点:
    • 每个节点在P2P网络中既可以请求服务,也可以提供服务
    • 节点可以是用户的计算设备,如PC、手机、服务器等
  • 资源共享:
    • 资源(如文件、带宽、计算能力)在各个节点之间直接共享
    • 每个节点都可以充当资源的提供者和消费者

工作原理:

  1. 节点发现和连接:
    • 节点需要发现其他节点并建立连接。通常通过分布式哈希表 (DHT)、广播或其他节点发现机制来实现
    • 连接可以是短暂的,也可以是持久的
  2. 资源查找和获取:
    • 节点可以通过查询机制查找需要的资源,查询请求可以通过直接连接的节点传播,直到找到目标资源
    • 找到资源的节点将资源传送给请求的节点,这通常是通过直接的数据传输实现的
  3. 数据传输和共享:
    • 数据可以在节点之间直接传输,不需要中心服务器的接入
    • 资源下载通常是分块进行的,可以从多个节点并行下载不同块,提高下载速度和效率

优点:

  • 去中心化:没有中心服务器,系统具有更高的鲁班性和容错能力,不易受到单点故障的影响
  • 资源利用率高:每个节点都可以共享资源,提高了资源的利用率和系统的整体性能
  • 扩展性好:随着节点数量增加,系统的总资源和处理能力也增加,具有良好的扩展性
  • 降低成本:减少了服务器的维护和管理成本

缺点:

  • 安全性和信任问题:缺乏中心化控制,存在安全性和信任问题,如数据完整性、身份验证
  • 资源管理复杂:资源的查找、共享和管理较为复杂,需要有效的机制来维持网络的稳定性和效率
  • 带宽消耗:节点需要承担上传和下载的带宽消耗,对于带宽有限的节点可能是个挑战
CS和P2P混合结构

工作原理:

  1. 初始连接和用户认证:
    • 客户端首先连接中心服务器进行用户认证和注册
    • 服务器提供用户登录和认证
  2. 资源查找和索引:
    • 中心服务器维护一个全局的资源目录或索引,客户端可以向服务器查询资源的位置信息
    • 客户端通过查询服务器获取所需资源的位置或可用节点列表
  3. 直接数据传输:
    • 一旦客户端获取了资源的位置信息,数据传输可以直接在对等节点之间进行
    • 这种直接传输减少了服务器的负载,提高了传输效率
  4. 负载均衡和故障恢复:
    • 中心服务器可以用于负载均衡,将请求分配给合适的节点
    • 在节点故障不可用时,服务器可以重新分配资源或提供备用节点信息

1.1.2 进程通信

Inter-Process Communication IPC 指的是在网络环境下不同计算机或同一台计算机上运行的进行之间通过网络协议交换数据和信息的过程。网络进程通信是分布式系统和网络应用程序的基础

基础:

  • 进程:
    • 正在运行的程序的实例,每个进程都有自己独立的地址空间、资源和执行线程
    • 在网络通信中,进程可以位于不同主机也可以位于同一主机
  • 通信机制:
    • 依赖于网络协议,如TCP/IP协议族,这些协议提供了可靠的数据传输、流量控制和错误检测等功能

进程通信的方式:套接字(Socket)

  • 套接字是网络通信的基础抽象。它提供了进程间通信的端点
  • 套接字可以使用不同的协议进行通信,如TCP和UDP

TCP通信:

  • 服务器端:
    1. 创建一个套接字:socket()
    2. 绑定套接字到一个地址和端口:bind()
    3. 监听连接请求:listen()
    4. 接受连接:accept()
    5. 进行数据传输:send()和recv()
    6. 关闭连接:close()
  • 客户端:
    1. 创建一个套接字:socket()
    2. 连接到服务器:connect()
    3. 进行数据传输:send()和recv()
    4. 关闭连接:close()

UDP通信:

  • 服务器端:
    1. 创建一个套接字:socket()
    2. 绑定套接字到一个地址和端口:bind()
    3. 接收数据:recvfrom()
    4. 发送数据:sendto()
    5. 关闭套接字:close()

高级通信方式:

  1. 远程过程调用(RPC):
    • RPC允许程序调用远程计算机上的进程,就像调用本地进程一样
    • RPC隐藏了网络通信的细节,简化了分布式应用的开发
    • 常用的PRC框架包括gRPC、XML-PRC和JSON-RPC
  2. 消息队列(Message Queue):
    • 提供了一种异步通信机制,允许进程通过消息中间件进行通信
    • 具有持久化、负载均衡和容错等特性
    • 常用的消息队列包括RabbitMQ、Apche Kafka和ActiveMQ
  3. 发布-订阅(Publish-Subscribe):
    • 是一种消息传递模式,其中发布者发送消息,订阅者接收消息
    • 这种模式解耦了消息的发送和接收,适用于广播和多播通信
    • 常用的发布-订阅系统包括Redis Pub/Sub、Google Cloud Pub/Sub和Apache Kafka

安全性:

  • 使用加密协议(如TLS/SSL)保护数据传输的机密性和完整性
  • 实现身份验证和访问控制,确保只有授权的进程可以进行通信

性能:

  • 使用负载均衡和缓存机制提高通信效率
  • 优化网络带宽和减少延迟,提高数据传输速度

1.1.3 应用层协议

网络协议栈的顶层协议,负责处理具体应用程序的数据传输要求。应用层协议直接与用户交互,提供各种网络服务,如电子邮件、文件传输、网页浏览等。

HTTP

用途:用与在万维网(www)上传输网页和其他资源

工作原理:

  • HTTP是一个无状态的请求-响应协议
  • 请求:客户端(通常是浏览器)发送HTTP请求到服务器,包含请求方法(GET, POST, PUT)、URL和HTTP头信息
  • 响应:服务器接收到请求后,处理请求并返回包含状态码、HTTP头信息和实体内容的响应

常见的HTTP方法:

  • GET:请求指定资源
  • POST:用于向服务器发送数据,通常用于创建资源或提交表单数据
  • PUT:用于向服务器发送数据,通常用于更新现有资源或创建资源
  • DELETE:删除指定资源
HTTPS

用途:是HTTP的安全版本,通过TLS/SSL加密传输数据,确保数据的机密性和完整性

工作原理:

  • 在HTTP之上加了一层加密,通过TLS/SSL协议进行数据加密和身份验证
  • 使用HTTPS时,客户端和服务器之间的数据传输是加密的,防止中间人攻击和窃听
FTP

用途:在客户端和服务器之间传输文件

工作原理:

  • FTP使用两个并行的TCP连接:一个用于控制命令(控制连接),另一个用于传输数据(数据连接)
  • 命令和响应:客户端通过控制连接发送FTP命令(如USER、PASS、RETR、STOR),服务器通过控制连接返回响应
SMTP

用途:SMTP用于发送电子邮件

工作原理:

  • SMTP是一种简单的文本协议,用于在邮件客户端和邮件服务器之间传输邮件
  • 邮件客户端通过SMTP连接到邮件服务器,发送邮件包含发件人地址、收件人地址、主题和正文
POP3

Post Offfice Protocal

用途:POP3用于从邮件服务器接收电子邮件

工作原理:

  • POP3允许客户端从邮件服务器下载邮件并删除服务器上的邮件
  • 客户端连接到POP3服务器,进行身份验证后下载邮件,然后可以选择删除或保留服务器上的邮件
IMAP

Internet Message Access Protocal

用途:IMAP也是用于接收电子邮件,但与POP3不同,IMAP允许在服务器上管理邮件

工作原理:

  • IMAP支持在服务器上存储和管理邮件,客户端可以同步邮件状态(如已读、未读、删除)和文件夹
  • 客户端连接到IMAP服务器,可以查看邮件头、下载邮件正文和附件,并对邮件进行操作
DNS

Domain Name System

用途:DNS将域名转换为IP地址

工作原理:

  • DNS是一种分布式数据库系统,通过DNS服务器将人类可读的域名解析为计算机可读的IP地址
  • 客户端(DNS解析器)向DNS服务器发送查询请求,DNS服务器返回对应的IP地址
DHCP

用途:DHCP用于动态分配IP地址和其他网络配置参数给网络设备

工作原理

  • DHCP服务器自动分配IP地址、子网掩码、默认网关和DNS服务器地址给客户端设备
  • 客户端设备通过广播发送DHCP请求,DHCP服务器响应并分配网络配置参数

1.2 HTTP和Web

  • HTTP请求对象的过程:HTTP是一种用于传输超文本的协议,它的工作方式是客户端向服务器发送请求,请求特定的资源(如网页、图片等),服务器收到请求后返回相应的资源。请求对象的过程包括建立连接、发送请求、服务器处理请求并返回响应
  • HTTP机制:缓存获取更新页面 - 条件GET。 HTTP协议支持缓存机制,可以让客户端在请求页面时检查缓存,若缓存中有最新版本则直接使用,否则才请求服务器获取更新页面。条件GET是一种HTTP请求方法,用于在不获取完整响应的情况下检查资源是否已经被修改
  • Web缓存机制:Web缓存是一种用于存储已经访问过的页面和资源的系统,目的是加快页面加载速度并减轻服务器的负载。缓存可以位于客户端活网络中的代理服务器上,当客户端请求资源时,首先检查缓存是否有该资源的副本,如果有则直接返回给客户端,否则才请求服务器获取资源。

1.2.1 HTTP

HTTP是应用层协议,用于分布式、协作式和超媒体信息系统。它是万维网的基础协议。HTTP定义了客户端和服务器之间的通信机制,支持文本、图像、音频、视频等各种类型的数据传输。

基本概念

  1. CS模型:
    • HTTP采用请求-响应模型,客户端发出请求,服务器处理请求并返回响应
    • 客户端通常是浏览器,服务器是Web服务器
  2. 无状态协议:
    • HTTP是无状态的,每个请求和响应都是独立的,不保留任何上下文信息
    • 为了维持状态,可以使用Cookie、Session等技术

HTTP请求报文

  1. 请求行:

    • 包含请求方法、请求目标 (URL)和HTTP版本
    • 实例:‘GET /index.html HTTP/1.1’
  2. 请求头:

    • 提供有关客户端、资源和请求的附加信息

    • 实例:

      Host: www.example.com
      User-Agent: Mozilla/5.0
      Accept: text/html
      
  3. 请求正文(可选):

    • 包含要发送的服务器的数据,通常在POST和PUT请求中使用

    • 示例:

      {
        "name": "John",
        "age": 30
      }
      

HTTP响应报文

  1. 状态行:

    • 包含HTTP版本、状态码和状态短语
    • 示例:‘HTTP/1.1 200 OK’
  2. 响应头:

    • 提供有关服务器和响应的附加信息

    • 示例:

      Content-Type: text/html
      Content-Length: 138
      
  3. 响应正文(可选):

    • 包含服务器返回的数据,通常是HTML文档、图像、JSON数据等

    • 示例:

      <!DOCTYPE html>
      <html>
      <head>
        <title>Example</title>
      </head>
      <body>
        <h1>Hello, World!</h1>
      </body>
      </html>
      

常见的HTTP方法

  1. GET:请求获取指定资源。
  2. POST:向服务器提交数据,通常用于创建资源
  3. PUT:向指定资源上传其最新内容,通常用于更新资源
  4. DELETE:请求删除指定资源
  5. HEAD:与GET类似,但只返回响应头,不返回响应正文
  6. OPTIONS:请求描述目标资源的通信选项
  7. PATCH:对资源应用部分修改

HTTP状态码

  1. 1xx(信息性状态码):
    • 100 Continue: 继续请求
  2. 2xx(成功状态码)
    • 200 OK:请求陈工
    • 201 Created: 资源已创建
    • 204 No Content: 请求成功但无返回内容
  3. 3xx(重定向状态码)
    • 301 Moved Permanently: 资源已永久移动
    • 302 Found: 资源临时移动
    • 304 Not Modified: 资源未修改
  4. 4xx(客户端错误状态码)
    • 400 Bad Request: 请求无效
    • 401 Unauthorized: 未经授权
    • 403 Forbidden: 禁止访问
    • 404 Not Found: 资源未找到
  5. 5xx(服务器错误状态码)
    • 500 Internal Server Error:服务器内部错误
    • 502 Bad Gateway: 网关错误
    • 503 Service Unavaliable: 服务不可用

HTTP头信息:用于传递元数据,可以在请求和响应中使用

  1. 通用头:
    • Date:报文生成的日期和时间
    • Connection:控制连接的方式(如Keep-Alive)
  2. 请求头:
    • Host:服务器的域名或IP地址
    • User-Agent:发出请求的客户端信息
    • Accept:客户端可以处理的内容类型
  3. 响应头:
    • Server:服务器软件信息
    • Content-Type:响应内容的类型
    • Content-Length:响应内容的长度
  4. 实体头:
    • Content-Encoding:实体数据的编码方式
    • Content-Language:实体数据的语言

安全的HTTP(HTTPS)

  • 客户端和服务器建立SSL/TLS连接,进行加密通信
  • 所有HTTP请求和响应都在加密通道中传输,防止中间人攻击和数据窃听

HTTP/2

  • 基于二进制协议,提高传输效率
  • 支持多路复用、头部压缩和服务器推送

HTTP/3

  • 基于QUIC协议,使用UDP代替TCP,提高连接建立速度和传输性能
  • 更快的握手过程,改进的拥塞控制机制

非持久性HTTP

  1. 连接建立与断开:
    • 每次请求/响应对都会建立一个新的TCP连接
    • 服务器在发送完响应后会立即关闭TCP连接
  2. 工作流程:
    • 客户端向服务器发送一个HTTP请求
    • 服务器接收请求并发送HTTP响应
    • 服务器关闭连接
    • 如果客户端需要再发送请求,则需要重新建立一个新的TCP连接
  3. 优点:
    • 实现简单,适用于小型传输或单个请求的场景
    • 每个请求/响应对独立处理,便于调试和监控
  4. 缺点:
    • 频繁的建立和关闭TCP连接会带来较大的开销,尤其是对于需要多个资源的网页
    • 每次建立连接都需要三次握手,关闭连接都需要四次挥手,增加了网络延迟

持久性HTTP

  1. 连接建立与断开:
    • 一个TCP连接可以用于多个请求/响应对
    • 服务器发送完响应后不会立即关闭连接,保持连接可以继续用于后续请求
  2. 工作流程:
    • 客户端向服务器发送一个HTTP请求
    • 服务器接收请求并发送HTTP响应
    • TCP连接保持打开状态,客户端可以继续发送更多的HTTP请求
    • 当一段时间内没有打开新的请求时,服务器才会关闭连接
  3. 优点:
    • 减少了频繁建立和关闭连接的开销,提高了网络性能
    • 减少了延迟,特别时对于包含多个资源的网页请求
  4. 缺点:
    • 服务器需要维持更多的连接状态,占用更多的资源
    • 如果连接未及时关闭,可能会导致服务器资源被耗尽

1.2.2 Cookies

Cookies是由服务器生成并存储在客户端(通常是浏览器)上的小型数据文件。它们用于保存用户的状态信息,以便在后续的HTTP请求中携带这些信息,从而实现会话管理、用户跟踪和个性化设置等

工作原理

  1. 服务器生成Cookies:
    • 当客户端第一次请求服务器时,服务器可以在HTTP响应头中包含一个’Set-Cookie’字段,告诉客户端保存一个Cookie
  2. 客户端存储Cookies:
    • 浏览器接收到响应后,会将Cookie存储起来,通常按照域名、路径、有效期等属性进行管理
  3. 客户端发送Cookies:
    • 在后续的请求中,浏览器会自动在HTTP请求头中包含相应的’Cookie’字段,将存储的Cookies发送给服务器
  4. 服务器处理Cookies:
    • 服务器接收到请求中的Cookie后,可以解析和使用这些信息进行会话管理、用户验证等操作

Cookies属性

  1. Name=Value:
    • 每个Cookie包含一个名称和值,例如’sessionId=abc123’
  2. Expires:
    • 指定Cookie的过期时间,过期后浏览器会自动删除该Cookie
    • 例如:‘Expires=Wed, 21 Oct 2023 07:28:00 GMT’
  3. Max-Age:
    • 设置Cookie的有效期,以秒为单位,如果设置了此字段,则忽略Expires
  4. Domain:
    • 指定Cookie所属的域,默认是创建Cookie的域
    • 例如:‘Domain=example.com’
  5. Path:
    • 指定Cookie的适用路径,默认是创建Cookie的路径
    • 例如:‘Path=/account’
  6. Secure:
    • 指定只有在HTTPS连接时才会发送该Cookie
    • 例如:‘Secure’
  7. HttpOnly:
    • 指定Cookie不能通过JavaScript访问,增加安全性
    • 例如:‘HttpOnly’
  8. SameSite:
    • 控制跨站请求时是否发送Cookie,防止CSRF(跨站请求伪造)攻击
    • 例如:‘SameSite=Lax’ 或 ‘SameSite=Strict’

用途

  1. 会话管理:
    • 通过保存会话ID来跟踪用户的登录状态
  2. 个性化设置:
    • 保存用户的偏好设置,如语言、主题等
  3. 用户跟踪:
    • 记录用户的浏览行为,用于统计和广告投放

限制与安全

  1. 大小限制:每个Cookie大小为4KB
  2. 数量限制:每个域名下的Cookie数量通常限制在20个左右
  3. 安全问题:
    • Cookie窃取:如果Cookie未设置’HttpOnly’属性,可能会被JavaScript访问和窃取
    • 跨站脚本攻击(XSS):恶意脚本可能会窃取Cookie信息
    • 跨站请求伪造(CSRF):恶意网站可以利用用户的Cookie进行未经授权的请求

1.2.3 Web缓存

通过存储网页或其他网络资源的副本,减少服务器负担,降低带宽消耗,并加快用户访问速度。当前用户请求一个已经缓存的资源时,缓存可以直接返回该资源,而无需再次请求原始服务器

Web缓存类型

  1. 浏览器缓存:
    • 存储在用户的浏览器中,用于缓存用户访问过的资源。浏览器缓存能够显著提高用户的访问速度,因为从本地硬盘读取数据比通过网络下载要快得多
  2. 代理缓存:
    • 部署在客户端和服务器之间的代理服务器上,代理服务器可以缓存经过它的所有请求和响应。它可以服务于多个用户,是企业和ISP常用的缓存方式
  3. 网关缓存:
    • 部署在服务器端,用来缓存来自服务器的响应。它们通常由CDN(内容分发网络)提供,用于加速对用户的响应

工作原理

  1. 请求检查缓存:
    • 当客户端请求资源时,会首先检查本地资源是否有该资源的副本
    • 如果缓存中有未过期的资源副本,直接返回该副本;如果没有,向服务器发出请求
  2. 缓存控制头部:
    • HTTP头部中有许多控制缓存行为的字段,如’Cache-Control’、‘Expires’、‘ETag’、'Last-Modified’等
  3. 缓存存储响应:
    • 服务器在响应中包含缓存控制头部,指示客户端或代理服务器如何缓存该资源
    • 客户端或代理服务器根据这些指示存储资源副本
  4. 缓存验证:
    • 当缓存中的资源过期或客户端要求验证资源时,客户端会像服务器发送请求(如’If-Modified-Since’ 或 ‘If-None-Match’)
    • 服务器根据资源的最新状态返回304 Not Modified 或200 OK(表示资源已更新)

HTTP头部与缓存控制

  1. Cache-Control:
    • 指示缓存机制的指令。例如:
      • Cache-Control: no-cache:每次请求都要验证资源
      • Cache-Control: no-store:不缓存请求或响应
      • Cache-Control: max-age=3600:资源在3600s内有效
  2. Expires:
    • 指定资源的过期时间,是一个绝对时间点
  3. ETag:
    • 资源的唯一标识符,用于资源变更时的验证
  4. Last-Modified:
    • 资源的最后修改时间
  5. Pragma:
    • 用于HTTP/1.0的兼容性

优点

  1. 提高性能:通过减少资源的加载时间,显著提高用户的网页加载速度
  2. 降低带宽性能:通过缓存资源减少对服务器的请求次数,降低网络带宽的消耗
  3. 减轻服务器负担:通过减少重复请求,减轻服务器的处理负担,提高服务器的响应能力
  4. 提高可用性:当服务器不可用时,缓存的资源仍可以提供服务器,提高系统的可用性和容错能力

挑战和局限

  1. 缓存过期:缓存的资源可能在过期前变得陈旧,导致用户获取到过期数据
  2. 缓存一致性:维护缓存与服务器资源的一致性是一个挑战,特别是在资源频繁更新的场景下
  3. 缓存策略复杂性:制定和管理缓存管理需要考虑多种因素,如资源类型、更新频率、用户访问模式等,增加了系统的复杂性

最佳实践

  1. 合理设置缓存头部:根据资源的特性合理设置’Cache-Control’、'Expires’等头部信息
  2. 利用内容分发网络(CDN):使用CDN将资源分布到靠近用户的位置,进一步减少访问延迟和带宽消耗
  3. 定期监控和调整:定期监控缓存的命令率和有效性,及时调整缓存策略以适应变化的需求

1.3 FTP

进行文件传输的一种标准网络协议,它在TCP/IP网络中使用,允许用户在客户端和服务器之间上传和下载文件。FTP提供了基本的认证和文件操作命令,适用与不同OS之间的文件传输

工作原理:FTP使用CS模型和两个并行的TCP连接进行通信

  1. 控制连接(Control Connection):控制连接使用命令和响应进行通信,通常使用端口21。客户端通过发送命令来请求服务器执行操作,服务器则通过响应确认命令的执行结果。
  2. 数据连接(Data Connection):数据连接用于传输文件数据,通常使用端口20。数据连接在每次传输文件时建立,传输完成后关闭。

基本操作

  • 登录:通过USER和PASS命令,客户端可以向服务器提供用户名和密码进行身份验证
  • 目录操作:如CWD、PWD、LIST、MKD等
  • 文件操作:如RETR(下载文件)、STOR(上传文件)、DELE等

传输模式

  1. 主动模型(Active Mode):客户端向服务器的命令端口(21)发送控制连接请求,并在其上建立控制连接。客户端告诉服务器可以通过指定的端口进行数据连接,服务器则主动与客户端建立数据连接。主动模式在某些防火墙配置下可能会遇到问题
  2. 被动模式 (Passive Mode ):服务器打开一个随机端口并告知客户端该端口号,客户端则使用该端口号与服务器建立数据连接。被动模式通常用于解决主动模式在防火墙和NAT(网络地址转换)环境下的问题

优点

  • 简单易用:FTP协议设计简单,易于实现和使用
  • 广泛支持:几乎所有OS和网络设备都支持FTP

缺点

  • 安全性较差:FTP在传输过程中使用明文传输用户名、密码和数据,容易被窃听
  • 防火墙兼容性差:FTP的主动模型可能会被防火墙阻止,配置复杂

安全FTP

  • FTPS:通过TLS/SSL加密控制和数据连接
  • SFTP:基于SSH协议,提供加密的文件传输和管理功能

1.4 Email

  • SMTP(简单邮件传输协议):用于将电子邮件从发件人的客户端发送到收件人的邮件服务器。SMTP是一种基于文本的协议,工作在TCP连接之上,确保邮件能够可靠地传送到目标服务器
  • POP3(邮局协议版本3)和IMAP(互联网消息访问协议):用于从收件人的邮件服务器接收邮件。POP3下载邮件到本地并通常在服务器上删除,而IMAP则允许在服务器上管理和同步邮件

工作原理

  1. 用户代理(User Agent,UA):用户代理是用户用来发送和接收电子邮件的应用程序。用户通过用户代理编写、发送、接收和管理电子邮件
  2. 邮件传输代理(Mail Transfer Agent,MTA):MTA负责在邮件服务器之间传输电子邮件。常见的MTA包括Sendmain、Postfix、Exim等
  3. 邮件投递代理(Mail Delivery Agent,MDA):MDA负责将电子邮件从MTA投递到用户的邮箱中。常见的MDA有Procmail、Maildrop等

传输过程

  1. 邮件编写和发送:用户通过UA编写电子邮件并发送,UA将邮件交给本地 的MTA
  2. 邮件传输:本地MTA通过互联网将邮件传输到收件人域的MTA。这个过程可能涉及多个中间MTA的转发
  3. 邮件投递:收件人域的MTA将邮件交给MDA,MDA将邮件存储在收件人的邮箱中
  4. 邮件接收:收件人通过UA从邮箱中获取邮件

主要协议

  1. SMTP(Simple Mail Transfer Protocal):SMTP用于在MTA之间传输电子邮件以及从UA发送邮件到本地MTA。SMTP通常使用25端口
  2. POP3(Post Office Protocal 3):POP3用于从MTA下载邮件到本地计算机。POP3是一个简单的协议,通常下载后会从服务器上删除。POP3通常使用110端口,POP3S(安全本本)使用955端口
  3. IMAP(Internet Message Access Protocal):IMAP允许用户从服务器上访问和管理他们的邮件。IMAT提供了更丰富的功能,如在服务器上管理邮件夹和部分下载邮件。IMAP通常使用143端口,IMAPS使用993端口

格式

  1. 邮件头:包含邮件的元数据,如发件人、收件人、主题、日期等。例如用:
    • From: 发件人的电子邮件地址
    • To: 收件人的电子邮件地址
    • Subject: 邮件主题
    • Date: 邮件发送的日期和时间
  2. 邮件体:邮件体是邮件的住哟啊内容,可以包含纯文本或富文本(HTML)

安全性

  1. TLS(Transport Layer Security):TLS加密SMTP、POP3、IMAP等协议的通信,确保数据在传输过程中不被窃听和篡改
  2. PGP(Pretty Good Privacy)和S/MIME(Secure/Multipurpose Internet Mail):这些是用于加密邮件内容和签名邮件的技术,确保邮件的保密性和完整性
  3. 反垃圾邮件和反病毒技术:通过使用垃圾邮件过滤器和杀毒软件,减少垃圾邮件和恶意软件的影响

1.5 DNS

域名系统

  • DNS的功能:将主机名转换成对应的IP地址,使用户能够通过友好的主机名访问网络资源,而不必记住复杂的IP地址
  • DNS数据库有什么:包含各种记录。如A记录(将主机名映射到IPv4地址)、AAAA记录(将主机名映射到IPv6地址)、MX记录(邮件交换记录,指示邮件服务器)、CNAME记录(规范名称记录,用于别名)等。
  • 迭代访问过程中查询的DNS服务器:在迭代查询中,客户端依次查询多个DNS服务器,以找到指定主机名的IP地址。这些服务器通常按以下顺序查询:
    1. 根DNS服务器
    2. 顶级域(TLD)DNS服务器(如.com、.org等)
    3. 权威DNS服务器(特定域的最终权威服务器)
  • DNS的负载分配:DNS支持负载分配,通过为一个规范名称提供一组IP地址,来分配流量到多个服务器,这种方式使多个服务器可以处理同一个网站的请求。
  • DNS采用分布式的原因:分布式层次服务,提供了更好的可伸缩性,并且不会出现单点故障

基本概念

  1. 域名:是用于表示一个或多个IP地址的有意义的名称。有多个标签组成,例如:www.example.com
  2. IP地址:标识网络设备的唯一地址。IPv4地址由四个八位数(0-255)组成,例如192.168.10.1。IPv6地址由八组十六进制数(0-ffff)组成
  3. DNS服务器:DNS服务器存储域名和IP地址之间的映射,并响应DNS查询请求。常见的DNS服务器 包括递归解析器、根DNS服务器、顶级域DNS服务器和权威DNS服务器

工作原理

  1. 递归查询(Recursive Query):当用户在浏览器输入一个域名时,用户设备会向本地DNS解析器 (Local Name Server)发送查询请求。如果本地解析器无法直接回答请求,它会以递归方式继续向其他DNS服务器查询
  2. 根DNS服务器(Root DNS Server):本地解析器首先向根DNS服务器发送查询请求。根DNS服务器不包含具体的域名信息,但它知道顶级域(如.com、.org、.net)的DNS服务器的地址
  3. 顶级域DNS服务器(TLD DNS Server):根DNS服务器将请求转发到对应的顶级域DNS服务器,顶级域DNS服务器包含该顶级域下的权威DNS服务器地址
  4. 权威DNS服务器(Authoritative DNS Server):顶级域DNS服务器将请求转发到权威DNS服务器,权威DNS服务器包含该域名的实际IP地址
  5. 返回结果:权威DNS服务器返回IP地址给本地解析器,本地解析器将结果缓存并返回给用户设备。用户设备使用该IP地址与目标服务器建立连接

DNS记录类型(Type):DNS使用不同的记录来存储各种信息,常见的DNS记录类型包括:

  • A记录(Address Record):将域名映射到IPv4地址
  • AAAA记录(IPv6 Address Record):将域名映射到IPv6地址
  • CNAME记录(Canonical Name Record):将一个域名别名映射到另一个域名
  • MX记录(Mail Exchange Record):指定域名的邮件服务器
  • TXT记录(Text Record):存储任意文本信息,常用于域名验证和SPF记录
  • NS记录(Name Server Record):指定管理某个域名区域的DNS服务器

DNS缓存:为了提高查询效率和减少网络负载,DNS使用缓存机制。DNS解析器和用户设备会缓存查询结果一段时间(由TTL值决定)。缓存有助于减少对DNS服务器的查询次数,提高访问速度

DNS安全:DNS在设计之初没有考虑到安全性,导致其容易受到多种工具,如缓存中毒和DDoS攻击。为增强DNS的安全性,以下技术被引入:

  • DNSSEC(DNS Security Extensions):DNSSEC通过数字签名验证DNS数据的真实性,防止DNS缓存中毒和数据篡改
  • DNS Over HTTPS (DoH) 和 DNS over TLS(DoT):这些技术通过加密DNS查询,保护用户隐私和数据完整性,防止窃听和篡改

迭代查询

  1. 客户端发起请求:客户端向本地DNS解析器发起DNS查询请求,想要解析域名到IP地址
  2. 本地DNS解析器向根DNS服务器查询:如果本地DNS没有缓存该域名的解析结果,它会将向根DNS服务器发送查询请求,根DNS服务器不直接返回该域名的IP地址,而是返回负责顶级域(TLD)的DNS服务器地址
  3. 本地DNS解析器向TLD DNS服务器查询:TLD DNS服务器返回权威DNS服务器地址
  4. 本地DNS解析器向权威DNS服务器查询:权威服务器返回IP地址
  5. 返回结果:本地DNS解析器将结果缓存起来并返回给客户端。

1.6 P2P应用

特征:

  • 去中心化:P2P网络没有中央服务器,所有参与者既是客户端也是服务器,彼此共享资源
  • 可扩展性:P2P网络通常能很好地扩展,随着更多节点加入,网络资源和带宽也随之增加
  • 鲁棒性:由于没有单点故障,P2P网络在面对部分节点故障时依然能保持高可用性
  • 资源利用率高:节点之间直接共享文件和数据,能有效利用带宽和存储资源

1.6.1 非结构化P2P网络

定义:非结构化P2P网络是指网络中节点没有固定的拓扑结构或组织方式,每个节点可以自由地加入或离开网络。节点之间的连接是随机的,网络拓扑是动态变化的

特点:

  1. 随机连接:节点之间的连接是随机的,没有预先定义的拓扑结构
  2. 易于构建:节点可以自由加入或离开网络,不需要复杂的配置
  3. 高冗余性:由于没有固定的结构,节点的故障不会对整个网络造成重大影响

优点:

  • 简单灵活:节点可以自由加入和离开,适合动态变化的网络环境
  • 高容错性:节点故障不会影响网络的整体运行,因为其他节点可以继续提供服务

缺点:

  • 搜索效率低:由于没有预定义的拓扑结构,搜索特定文件或资源可能需要广播消息,导致大量的网络流量和低效的搜素
  • 可扩展性差:随着网络规模的增加,广播消息会导致网络拥塞和性能下降

1.6.2 结构化P2P网络

定义:结构化P2P网络是指节点按照某种预定义的拓扑结构组织,通常使用分布式哈希表(DHT, Distributed Hash Tabble)来管理节点和资源。每个节点有一个唯一的标识符,并且资源也有唯一的键值,资源的存储和查找通过哈希函数进行映射

特点:

  1. 预定义拓扑:节点按照特定的规则组织,有固定的拓扑结构
  2. 高效路由:使用DHT进行资源管理和路由,可以在确定的步数内找到资源
  3. 可扩展性强:通过DHT实现资源分布和查找,可以处理大规模节点和资源

优点:

  • 高搜索效率:资源查找通过DHT进行,通常在O(logN)的步数内完成查找
  • 良好的扩展性:能够处理大规模节点和资源,适用于大规模分布式系统

缺点:

  • 复杂性高:需要维护复杂的DHT结构和路由表,增加了实现和维护的复杂性
  • 节点动态变化处理困难:节点的频繁加入和离开需要频繁更新DHT,增加了开销

1.6.3 BitTorrent

一种P2P文件分发协议,旨在高效地共享大型文件。BitTorrent通过分布式将文件分成多个小块,使得文件传输速度更快,并且可以减轻服务器负载。

基本原理

  1. 文件分块:BitTorrent将每个文件分成多个小块(pieces),每个小块的大小通常为256KB至4MB。每个块有一个唯一的哈希值,用于验证块的完整性
  2. 种子文件:种子文件(.torrent)包含有关文件的信息,包括文件名、大小、块的哈希值以及用于跟踪文件的Tracker服务器的URL
  3. Tracker服务器:Tracker是一个专门的服务器,负责帮助客户端找到其他正在共享同一文件的对等节点(peers)。Tracker不存储实际文件数据,只提供节点信息
  4. 对等节点(peers):peers是参与文件共享的计算机。一个节点既可以下载文件也可以上传文件。下载完成后,这个节点就成为了一个"种子"(Seeder),仅上传数据,不再下载

工作流程

  1. 下载种子文件:用户通过某个网站或其他途径获取种子文件,并将其加载到BitTorrent客户端中
  2. 连接Tracker:BitTorrent客户端从种子文件中读取Tracker服务器的地址,并连接到Tracker以获取共享文件的其他对等节点的列表
  3. 找到对等节点:客户端从Tracker获取对等节点列表后,开始连接这些节点并交换块的信息
  4. 请求和下载块:客户端从其他对等节点请求尚未下载的块。同时,客户端也将已下载的块上传给其他需要的节点
  5. 验证和重组文件:下载的每个块都会通过哈希校验,以确保数据完整性。所有块下载完成并通过验证后,客户端将这些块重组成完整的文件
  6. 成为种子节点:下载完成后,节点成功种子节点,继续上传数据,帮助其他节点下载文件

关键技术

  1. 分布式哈希表:DHT是一种去中心化的方式,允许节点在没有Tracker服务器的情况下找到其他对等节点。它通过分布式方式存储和查询节点信息,增强了BitTorrent的鲁棒性和可扩展性
  2. 伙伴选择(Peer Selection):BitTorrent采用”最优稀缺块优先“(rarest first)策略,优先下载网络中最少见的块。这种策略提高了网络中每个块的可用性,防止某些块成为瓶颈
  3. 块交换(Piece Swapping):BitTorrent通过”位图“来管理和交换块信息,客户端之间会交换各自拥有和缺少的块,从而实现高效的块下载
  4. 激励机制(Choking and Unchoking ):BitTorrent采用一种激励机制,通过限制上传带宽(choking),优先上传给那些回报较多的节点(unchoking),鼓励节点上传更多的数据

优点

  1. 高效分发:通过分布式下载和上传,BT实现了高效的数据传输,减轻了单一服务器的负载
  2. 容错性强:节点可以从多个来源下载数据,任何一个节点的故障不会影响整体下载过程
  3. 可扩展性:随着参与的节点增加,整体的带宽和资源也增加,网络性能得到提升

缺点

  1. 初始延迟:在下载开始时,需要一定时间连接和发现对等节点,存在初始延迟
  2. 网络开销:大量节点之间的连接和块交换会增加网络开销,特别是网络不稳定或带宽优先的环境中
  3. 法律和版权问题:由于BT常被用于分发盗版内容,存在法律风险和版权纠纷

应用

  1. 大文件分发
  2. 开源项目
  3. 内容分发网络

1.7 CDN

1.7.1 CDN

概述:是一种分布式网络架构,旨在通过将内容分布到多个地理位置的服务器上,从而提高内容传输速度和可靠性,减轻原始服务器的负载。广泛应用于网站加速、视频流媒体、软件分发等领域。

基本原理

  1. 内容缓存:CDN通过将内容缓存到分布在全球各地的边缘服务器上,使用户可以从最近的服务器获取内容,从而减少延迟,提高传输速度
  2. 智能路由:CDN使用智能路由技术,将用户的请求引导到最佳的服务器上。这些路由技术考虑了多个因素,如服务器负载、网络拥塞、用户地理位置等
  3. 负载均衡:通过负载均衡技术,CDN可以将流量均匀地分配多个服务器上,避免单一服务器过载,保证服务的稳定性和可靠性
  4. 内容分发:CDN网络中的服务器通过多种方式(如同步或按需拉取)获取和更新内容,确保用户始终可以访问最新的资源

组成部分

  1. 边缘服务器:位于接近用户的位置,负责缓存和提供内容。它们使CDN网络的前线,直接响应用户请求
  2. 源服务器(原始服务器):源服务器是内容的原始存储地。当边缘服务器没有缓存请求的内容时,会向源服务器请求数据
  3. 分发节点:分发节点是CDN网络中的主要组成部分,负责将内容从源服务器分发到各个边缘服务
  4. DNS服务器:CDN通常使用专门的DNS服务,将用户的请求智能地解析到最优的边缘服务器
  5. 控制中心:控制中心管理和监控整个CDN网络,负责内容同步、服务器健康检查、流量分析等

工作流程

  1. 用户请求:用户在浏览器中输入网址或请求内容时,DNS查询首先将请求解析到最近的CDN边缘服务器
  2. 内容提供:
    • 缓存命中:如果边缘服务器已经缓存了请求的内容,则直接响应用户请求,提供内容
    • 缓存未命中:如果边缘服务器没有缓存的内容,它会向其他边缘服务器或源服务器请求内容, 并在获取内容后缓存,以便响应未来的请求
  3. 内容更新:根据配置策略,CDN边缘服务器会定期或在内容发生变化时,从源服务器或其他边缘服务器同步内容

优势

  1. 提高速度:通过将内容分发到接近用户的边缘服务器,CDN显著减少了传输延迟,提高了用户访问速度
  2. 增强可靠性:CDN使用负载均衡和冗余机制,确保在单一服务器故障或网络问题时,用户依然可以访问内容
  3. 减轻源服务器负载:CDN通过缓存和分发内容, 显著减轻了源服务器的负载,减少了服务器压力和带宽消耗
  4. 扩展性强:CDN可以轻松扩展,通过增加边缘服务器和分发节点,应对大规模流量和高并发访问
  5. 安全性:许多CDN提供安全功能,如DDoS防护、Web应用防火墙(WAF)、SSL/TLS加密等,提高了网站和应用的安全性

应用场景

  1. 网站加速:通过将静态资源缓存到边缘服务器,CDN显著提高了网站加载速度
  2. 视频流媒体:CDN优化视频内容的传输,减少缓冲时间,提供流畅的视频观看体验
  3. 软件分发:CDN用户 分发大型软件、游戏更新和补丁,提高下载速度和稳定性
  4. 电子商务:电子商务网站使用CDN加速网页加载,提高用户体验,减少购物车放弃率
  5. 在线教育:通过CDN分发教育视频、课程资源

1.7.2 多媒体流化服务

Streaming Media Services 是一种在计算机网络中通过流式传输方式将音频、视频和其他多媒体内容传递给用户的技术。用户可以在不需要下载完整文件的情况下,实时播放内容,从而提高了使用体验和效率。

基本概念

  1. 流媒体(Streaming Media):指在传输过程中连续播放的多媒体内容,允许用户在数据传输的同时进行播放
  2. 实时传输协议(RTP, Real-Time Transport Protocal):RTP是用于在互联网上传输音视频数据的协议,提供了时间戳、序列号等机制,以确保数据包按顺序和及时传输
  3. 实时流协议(RTSP, Real-Time Streaming Protocal):RTSP是一种网络协议,用于控制流媒体服务器的传输,如播放、暂停、停止等操作
  4. HTTP实时流(HLS, HTTP Live Streaming):HLS是由苹果公司推出的一种基于HTTP的流媒体传输协议,将内容分成小片段,并通过HTTP传输,具有良好的兼容性和适应性

工作原理

  1. 内容准备:
    • 内容采集:通过摄像机、麦克风等设备采集音视频内容
    • 内容编码:将采集的原始内容转换为适合传输和播放的数字格式,常用的编码格式包括H.264、ACC等
    • 内容存储:将编码后的内容存储在服务器上,通常会进行分片处理,以便于流式传输
  2. 内容分发:
    • 流媒体服务器:流媒体服务器负责存储和传输多媒体内容,响应用户请求,提供流媒体数据
    • CDN:通过CDN将内容分发到全球各地的边缘服务器上
  3. 内容传输:
    • 传输协议:使用RTP、RTSP、HLS等协议将内容从服务器传输到客户端
    • 数据流:将多媒体内容分成数据包,通过网络传输到客户端,数据包中包含时间戳和序列号,以保证顺序和同步
  4. 内容播放:
    • 客户端接收:客户端设备接收数据流,根据协议解析数据包
    • 缓冲和解码:客户端将接收到的数据包进行缓冲和解码,以确保平滑播放和音视频同步
    • 播放:

类型

  1. 直播流媒体(Live Streaming):实时传输和播放现场音视频内容,如在线直播、网络直播、直播赛事等,
  2. 点播流媒体(On-Demand Streaming):用户可以根据需求穗石播放预先录制的音视频内容,如视频点播,音乐点播等。点播流媒体通常具有较高的缓存和缓冲能力
  3. 互动流媒体(Interactive Streaming):结合实时传输和用户交互功能,如视频会议、在线教育、虚拟现实等。需要低延迟和高互动性

优势

  1. 实时性:用户可以在数据传输的同时实时播放内容,无需等待完整文件下载,提高了使用体验
  2. 节省带宽:只传输当前播放所需的数据块,减少了不必要的带宽消耗
  3. 内容保护:通过流媒体传输,内容不需要完全下载到用户设备,减少了内容被复制和盗用的风险
  4. 灵活性和适应性:流媒体服务可以根据网络状态和用户设备调整传输质量,提供稳定和流畅的播放体验

1.7.3 DASH

动态自适应流媒体(Dynamic Adaptive Streaming over HTTP)是一种流媒体传输技术,旨在通过动态调整视频质量以适应网络带宽和客户端性能,从而提供平滑、连续的观看体验。DASH的工作原理是将用户多媒体内容分割成小的片段,通过HTTP传输,并根据网络状态实时调整这些片段的质量

基本概念

  1. 分片(Segments):DASH将多媒体内容分割成许多小片段,每个片段通常持续几秒钟。这些片段存储在服务器上,并以不同的质量和比特率提供
  2. 媒体呈现描述(MPD, Media Presentation Decription):MPD是一个XML文件,描述了多媒体内容的结构、片段的位置和各种比特率的信息。客户端使用MPD来决定如何请求和播放片段
  3. 自适应比特率:DASH支持多种比特率版本的片段,客户端可以根据当前网络状况和设备性能动态选择合适的比特率,以保证流畅播放

工作原理

  1. 请求MPD文件:客户端首先向服务器请求MPD文件,获取多媒体内容结构和各片段的元数据
  2. 解析MPD文件:客户端解析MPD文件,了解可用的片段、比特率和分辨率等信息
  3. 选择片段的质量:根据当前网络带宽和设备性能,客户端选择适当质量的片段请求。初始播放时可能选择较低的比特率,以便快速开始播放
  4. 下载和播放片段:客户端通过HTTP协议下载选择的片段,并进行解码和播放。播放过程中客户端持续监控网络状况,如果带宽增加,可以请求更高质量的片段;如果带宽降低,则切换较低质量的片段

优点

  1. 带宽适应性:DASH可以根据网络带宽动态调整视频质量,提供平滑的观看体验,避免因带宽波动导致的播放中断
  2. HTTP传输:与现有的HTTP基础设施(如CDN)兼容,易于部署和扩展
  3. 多种设备支持
  4. 无插件播放:不需要专用插件,通过HTML5视频标签和JavaScript即可实现

挑战

  1. 延迟:在初始缓冲和质量切换时可能会有一定的延迟
  2. 复杂性:实现DASH需要处理多种比特率和分辨率的片段,并在播放过程中进行动态调整,增加了客户端的实现复杂性
  3. 内容保护:为了防止内容盗用,需要结合DRM(数字版权管理)技术进行内容波阿虎,增加了实现和管理的复杂性

1.8 TCP套接字编程

1.8.1 Socket编程

一种用于实现网络通信的编程方法,允许计算机之间通过为网络进行数据交换,socket充当通信端点。通过它,程序可以发送和接收数据。

基本概念

  1. socket:socket是网络通信的一个端点,可以看作是一个文件描述符,通过它可以进行读写操作。每个socket都与一个IP地址端口号相关联,用于标识网络上的一个特定服务或应用程序
  2. IP地址
  3. 端口号
  4. 协议:TCP和UDP

基本步骤

  1. 创建socket:使用socket()函数创建一个socket,指定地址簇、socket类型(TCP/UDP)和协议
  2. 绑定socket(仅适用于服务器端):使用bind()将socket绑定到一个特定的IP地址和端口号
  3. 监听连接(仅适用于TCP服务器):使用listen()将socket设置为被动模式,等待客户端连接
  4. 接受连接(仅适用于TCP服务器):使用accept()函数接收客户端连接,该函数会阻塞直到有客户端连接请求到达
  5. 连接服务器(仅适用于客户端):使用connect()连接到服务器的指定IP地址和端口号
  6. 发送和接收数据:
    • 使用send()或sendall()发送数据
    • 使用recv()接收数据
  7. 关闭socket:使用close()关闭socket

1.8.2 TCP套接字编程

服务器端

  1. 创建套接字:server_socket
  2. 绑定地址和端口:server_socket
  3. 监听连接:server_socket
  4. 接收连接:client_socket
  5. 发送和接收数据:client_socket
  6. 关闭套接字:server_socket, client_socket

客户端:

  1. 创建套接字:client_socket
  2. 连接服务器
  3. 发送和接收数据
  4. 关闭套接字

sockaddr_in

struct sockaddr_in {
    sa_family_t sin_family; // 地址簇
    in_port_t sin_port; // 端口号
	struct in_addr sin_addr; // IP地址
    char sin_zero[8]; // 填充字节
}
  • sin_family:指定套接字所使用的地址类型,对于IPv4地址,应设置为’AF_INET’
  • sin_port:指定套接字要绑定或连接的端口号
  • sin_addr:指定套接字要绑定或连接的IP地址
  • sin_zero:用于内存对齐

hostent

struct hostent {
    char *h_name; // 官方的主机名
    char **h_aliases; // 主机的别名列表
    int h_addrtype; // 主机地址类型
    int h_length; // 地址长度
    char **h_addr_list; // 主机的网络地址列表
}
  • h_name:该主机的名称
  • h_aliases:主机的别名列表
  • h_addrtype:地址类型
  • h_length:地址长度
  • h_addr_list:可以包含主机的多个网络地址

1.9 UDP套接字编程

服务器端

  1. 创建套接字:socket()

    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }
    
  2. 绑定地址和端口:bind()

    struct scokaddr_in servaddr;
    memset($servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = INADDR_ANY;
    servaddr.sin_port = htons(8080);
    
    if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr) < 0)) {
        perror("bind failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    
  3. 接收数据:recvfrom()

  4. 发送数据:sendto()

  5. 关闭套接字:close()

客户端

  1. 创建套接字:socket()
  2. 设置服务器地址:
  3. 发送数据
  4. 接收数据

2.0 TELNET

一种用于远程登录的应用层协议,允许用户在网络上的另一台计算机上进行会话

3.Transport Layer

3.1 概述和传输层服务

  • 数据传输服务提供的差异:
    • 网络层:负责在不同主机之间传输数据,关注的是路由和数据包的传输
    • 传输层:在端到端主机之间的应用进程间传输数据,关注的是数据传输的可靠性、流量控制和连接管理
  • TCP提供的可靠、有序交付:
    • 可靠数据传输:通过确认和重传机制确保数据不丢失
    • 拥塞控制:通过调整发送速率防止网络拥塞
    • 流量控制:确保发送方不会超载接收方
    • 连接管理:通过三次握手连接和关闭连接

概述:负责提供端到端的通信服务,传输层的主要任务是确保数据从源主机传输到目的主机的可靠性和完整性

传输层主要功能

  1. 端到端通信:提供应用进程间的通信服务,而不仅仅是主机之间的通信
  2. 多路复用和多路分解:允许多个应用程序在同一网络连接上进行通信
  3. 可靠数据传输:确保数据包的正确传输(由TCP协议提供)
  4. 流量控制:防止发送方发送数据过快,导致接收方来不及处理
  5. 拥塞控制:管理网络中的数据流量,以防止网络拥堵

主要协议:TCP和UDP

传输层服务

  1. 可靠性:TCP通过确认、重传和序列号提供可靠的传输,而UDP不提供可靠性
  2. 顺序保证:TCP确保数据包按顺序到达,而UDP不保证顺序
  3. 数据完整性:TCP通过校验和确保数据完整性,而UDP仅提供基本的校验和功能
  4. 流量控制和拥塞控制:TCP提供流量控制和拥塞控制机制,防止网络拥堵和接收方过载。UDP不提供这些功能
  5. 多播和广播支持:UDP支持多播和广播,适用于视频会议和直播等场景。TCP不支持多播和广播

3.2 多路复用和解复用

  • 多路复用(Multiplexing)和解复用(Demultiplexing)的含义:
    • 多路复用:在传输层,将来自多个应用进程的数据组合到同一网络连接中进行传输
    • 解复用:在接收端,将收到的数据包分配给对应的应用进程
  • UDP和TCP套接字标识:
    • UDP套接字:由目的IP地址和目的端口号标识
    • TCP套接字:由源IP地址、源端口号、目的IP地址和目的端口号标识

多路复用

定义:将多个应用数据流组合一个数据流发送到目的地。在传输层,多路复用允许多个应用程序在同一网络连接上同时进行通信,从而调提网络资源的利用率

原理:

  1. 端口号:传输层通过使用端口号来标识不同的应用程序或进程。每个传输层协议都有自己的端口空间
  2. 套接字:套接字是传输层和应用层之间的接口。每个应用程序通过创建套接字来与网络进行通信,一个套接字由IP地址和端口号组成
  3. 封装数据:当应用程序需要发送数据时,传输层将应用程序封装在一个segment中,并在段头部添加源端口号和目的端口号,然后将segment传递给网络层

解复用

定义:在接收端将收到的数据流拆分给不同的应用程序。在传输层,解复用根据段中的端口号信息,将数据正确交付给目标应用程序

原理:

  1. 检查端口号:当传输层接收一个segment时,它会检查segment头部的目的端口号
  2. 查找对应的套接字:传输层根据目的端口号查找相应的套接字,将数据传递给对应的应用程序
  3. 数据传递:将segment中数据部分传递给对应的应用程序,确保每个应用程序只接收到属于自己的数

实现细节

TCP多路复用和解复用:

  • TCP套接字由四元组唯一标识:源IP地址、源端口号、目的IP地址、目的端口号
  • 连接建立(三次握手)后,TCP套接字会在操作系统内核中创建一个条目来管理连接状态和数据传输
  • 数据传输过程中,TCP根据四元组进行多路复用和解复用

UDP多路复用和解复用:

  • UPD套接字由二元组(两个参数)唯一标识、目的端口号
  • 无连接通信:UDP不需要建立连接,因此数据包独立传输,每个数据包都会根据目的端口号进行解复用

3.3 无连接传输UDP

基本特性

  1. 无连接:
    • UDP是无连接协议,不需要再传输数据前建立和释放连接
    • 每个数据报独立发送,无需维护连接状态
  2. 不可靠传输:
    • UDP不提供数据包确保、重传、排序等机制,因此不能保证数据包的可靠传输
    • 如果要保证可靠传输,只能在应用层实现
  3. 轻量级:
    • UDP头部开销小,只有8字节,包含源端口、目的端口、长度和校验和四个字段
    • 数据传输速度快,适合实时应用
  4. 无拥塞控制:
    • UDP没有内置的流量控制和拥塞控制机制,发送数据不受网络状态的限制
    • 适合需要稳定传输速率的应用,如视频流和实时通信
  5. 支持多播和广播
    • UDP支持多播和广播,适合应用在视频会议、在线游戏等场景

头部结构

  • 源端口(16位):可选字段,表示发送方的端口号
  • 目的端口(16位):表示接收方的端口号
  • 数据长度(16位):UDP头部和数据的总长度,最小值为8字节
  • 校验和(16):用于检验数据的完整性,但在某些情况下是可选的

优点

  1. 速度快
  2. 简单
  3. 灵活

缺点

  1. 不可靠
  2. 无拥塞控制
  3. 安全性差

校验和计算

3.4 可靠数据传输的原理

RDT

  • GBN协议:使用滑动窗口机制,发送方可以连续发送多个数据包,但接收方如果发现某个包丢失或出错,要求发送方重传从该包开始的所有数据包
  • SR协议:也使用滑动窗口机制,但只要求重传出错的包,不影响其他正确收到的包,提高了传输效率
  • 发送和接收窗口大小的比较:
    • 交换比特协议:发送窗口和接收窗口都为1
    • GBN协议:发送窗口可以大于1,但接收窗口固定为1
    • SR协议:发送窗口和接收窗口都可以大于1
  • RDT3.0问题的核心在于它是一个stop-and-wait协议

主要原理

  1. 确认机制(Acknowledgment, ACK):发送方在发送数据后,会等待接收方的确认。只有收到ACK后,发送方才认为该数据已被成功接收。如果一定时间内未收到ACK,发送方会重传数据(进行流水线时,对ACK进行编号,如果数据包错误,返回当前数据包的ACK(N-1))
  2. 序列号(Sequence Number):为了确保数据包按顺序到达,发送方会为每个数据包分配一个序列号。接收方利用序列号来重组数据包,即使它们是乱序到达的,序列号用于检测重复数据包
  3. 超时重传(Timeout and Retransmission):发送方在发送数据包后启动一个定时器。如果在定时器到期前没有收到ACK,发送方会重传数据包。
  4. 流量控制(Flow Control):用于防止发送方发送数据过快,超过接收方处理能力。TCP使用滑动窗口机制(Sliding Window)进行流量控制。窗口大小由接收方告知发送方,表示接收方能够接收的最大数据量
  5. 拥塞控制(Congestion Control):拥塞控制用于防止网络拥塞。TCP拥塞控制算法包括慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快重传(Fast Retransmit)和快恢复(Fast Recovery)。这些算法动态调整发送速率,以适应网络状态
  6. 数据完整性校验(Checksum):数据包在传输过程中可能会发生错误。TCP使用校验和来检测数据包的错误。接收方对接收到的数据包进行校验,如果发现错误,会丢弃该数据包并请求重传

具体机制详解

  1. 慢启动与拥塞避免:
    • 慢启动:TCP连接建立初期,发送方的发送窗口从小开始,逐步增加。每收到一个ACK,窗口大小加倍,直到达到一个阈值([TCP拥塞中详解](#3.7 TCP拥塞))
    • 拥塞避免:当窗口大小达到阈值后,发送方进行拥塞避免阶段。窗口每次增加一个MSS(最大报文段大小),而不是加倍([TCP拥塞中详解](#3.7 TCP拥塞))
  2. 快重传与快恢复:
    • 快重传:如果发送方收到三个重复的ACK,发送方会立即重传被认为丢失的数据包,而不等待超时(为什么会出现重复:接收方返回的ACK可能出错,这时候发送方不知道接收方是否成功接收,会选择再发一次)([TCP拥塞中详解](#3.7 TCP拥塞))
    • 快恢复: 在快重传后,发送方进入快恢复状态,窗口大小和阈值减半,然后以线性方式增长([TCP拥塞中详解](#3.7 TCP拥塞))

滑动窗口协议

定义:是一种用于流量控制和可靠数据传输的技术。允许发送方在等待ACK的同时发送多个数据包,从而提高传输效率。

基本概念:

  1. 发送窗口(Send Window):发送方维护的窗口,表示可以发送但未确认的数据包的范围
  2. 接收窗口 (Receive Window):接收方维护的窗口,表示可以接收和缓存的数据包的范围

工作原理:

  1. 初始化:发送方和接收方的窗口大小确定。窗口大小由接收方通过TCP报文中的窗口字段告知发送方
  2. 发送数据:发送方可以连续发送窗口大小内的多个数据包,而不必等待每个数据包的确认。每个数据包都有一个序列号
  3. 接收数据:接收方接收到数据包后,检查序列号:
    • 如果序列号在接收窗口内且是期望的下一个序列号,接收方将其交付给上层,并向发送方发送ACK,通知已成功接收
    • 如果序列号在接收窗口内但不是期望的下一个序列号,接收方将其缓存,并可能立即发送ACK,通知已成功接收但存在缺失的数据包
  4. 确认数据:发送方接收到ACK后,滑动窗口向前移动,释放已确认的数据包位置,可以继续发送新的数据包
  5. 重传机制:如果发送方在outime之前没有收到某个数据包的ACK,会重传该数据包

滑动窗口的移动:窗口的移动依赖于ACK的接收。每当发送方收到一个新的ACK,它会滑动窗口,释放被确认的数据包并允许发送新的数据包

流量控制:滑动窗口协议还用于流量控制,防止发送方发送数据过快,超过接收方处理能力。接收方通过调整窗口大小来告知发送方当前能够接收的数据亮

拥塞控制:滑动窗口协议结合拥塞控制算法(如TCP的慢启动、拥塞避免、快重传和快恢复)来调整发送速率,适应网络状态,防止网络拥塞。

流水线协议

允许多个数据包再发送方和接收方之间同时传输,流水线协议能够显著减少传输延迟。常见的流水线协议包括以下:

  1. 停止等待协议(Stop-and-Wait Protocal)
    这是最基本的可靠数据传输协议,最极端的流水线协议
    • 工作原理:发送方发送一个数据包,然后等待接收方的ACK。只有在收到ACK后,发送方才会发送下一个数据包
    • 优点:实现简单,易于理解
    • 缺点:效率低,因为发送在每次发送数据包后都必须等待ACK。
  2. 回退N步协议(Go-Back-N Protocal)
    可以同时发送多个数据包,而不必每次都等待ACK
    • 工作原理:发送方可以连续发送多个数据包,直到到达窗口大小(N)。每个数据包都有一个序列号。接收方按序接收数据包,并对最后按序接收的数据包发送ACK。如果一个数据包丢失或出错,接收方会丢弃后续所有数据包,直到丢失的数据包被重传
    • 优点:比Stop-and-Wait协议更高效
    • 缺点:如果一个数据包丢失,发送方必须重传该数据包及其后的所有数据包,即使后续数据包是正确的,这会导致不必要的重传
  3. 选择性重传协议(Selective Repeat Protocal)
    • 工作原理:发送方可以连续发送多个数据包直到到达窗口大小,接收方可以接收接收窗口内的数据包并发送对应的ACK。即使中间有数据包丢失,发送方只需重传丢失的数据包,而不必重传后续所有数据包
    • 优点:减少了不必要的重传,提高了传输效率
    • 缺点:实现复杂,接收方需要缓存乱序到达的数据包,并维护一个接收窗口

3.5 面向连接传输TCP

报文段结构
TCP报文段由头部和数据部分组成。头部的长度通常为20字节(不包括可选字段),数据部分则包含要传输的实际数据

  1. 源端口(16位):标识发送方应用程序的端口号
  2. 目标端口(16位):标识接收方的应用程序的端口号
  3. 序列号(32位):标识该报文段中第一个字节的数据在整个数据流中的位置。用于保证数据按序传输和重组
  4. 确认号(32位):当ACK标志被设置时,这个字段表示期望收到的下一个字节的序列号。用于确认已收到的数据
  5. 数据偏移(4位):表示TCP报文段头部的长度,。用于指示数据部分的起始位置
  6. 保留(6位):保留为将来使用,目前应设置为0
  7. 控制标志(6位):包括六个单独的标志位,用于控制TCP连接的状态:
    • URG(紧急指针有效):表示紧急指针字段有效
    • ACK(确认号有效):表示确认号字段有效
    • PSH(推动数据):提示接收方尽快将数据推送给应用程序
    • RST(重置连接):用于重置连接
    • STN(同步序列号):用于建立连接
    • FIN(结束连接):用于关闭连接
  8. 窗口大小(16位):表示滑动窗口的大小
  9. 校验和(16位):对整个TCP报文段进行校验,用于检测传输过程中是否出现错误
  10. 紧急指针(16位):当URG标志被设置时,该字段表示紧急数据的结束位置。用于指示有紧急数据需要立即处理
  11. 选项(可变长度):用于扩展TCP的功能,例如最大报文段大小(MSS)、时间戳等。
  12. 填充(可变长度):用于确保TCP头部的长度是4字节的整数倍

超时时间(Timeout)
用于确定在数据传输过程中是否发生了数据包丢失,并触发相应的重传操作

  1. 初始设置和计算:TCP超时时间的计算依赖以下两个参数

    • RTT(Round-Trip Time,往返时间):一个数据包从发送到接收到确认应答所需要的时间
    • RTTVAR(RTT Varicance,RTT变化量):RTT的变化范围,用于反映RTT的波动性
  2. RTT估算和RTTVAR计算:使用加权平均的方法
    RTT估算:

    • SRTT:平滑的RTT值,用于表示当前的RTT估计

    • RTVAR:RTT的变化量,表示RTT的波动性

      SRTT = (1 - α) * SRTT + α * RTT
      RTTVAR = (1 - β) * RTTVAR + β * |RTT - SRTT|
      
    • 其中α为1/8,β为1/4

    初始RTO估算

    RTO = SRTT + max (G, K * RTTVAR)
    

    G是一个时钟粒度,通常为1s,K设为4

  3. 动态调整:在实际数据传输过程中,TCP会动态调整RTO值

    • 每次发送数据包时,记录当前时间
    • 当收到该数据包的确认应答时,计算RTT
    • 使用上述算法更新SRTT和RTTVAR
    • 根据新的SRTT和RTTVAR更新RTO
  4. 超时和重传:当发送数据包为在RTO时间内收到ACK,触发重传:

    • 重传该数据包
    • 将RTO翻倍
  5. 收敛和稳定:在重传和调整过程中,RTO值逐渐收敛到一个稳定值。随着更多RTT样本的手机,SRTT和RTTVAR会更准确地反映当前的网络条件,从而使RTO值更加稳定

  6. 最小和最大RTO限制:为了防止RTO值过大,TCP通常设定一个最大值和最小值

    • 最大:60s
    • 最小:1s

3.6 拥塞控制原理

  • 拥塞控制和流量控制的目标:
    • 拥塞控制:防止网络中的数据流量过多导致拥塞
    • 流量控制:防止发送方发送过多数据导致接收方超载
  • TCP慢启动机制:
    • 慢启动阶段:当拥塞窗口(CongWin)低于阈值时,窗口大小指数增长,每次加倍
    • 拥塞避免阶段:当拥塞窗口高于阈值时,窗口大小线性增长,每次加1
    • 三次重复ACK后快重传并快恢复:阈值和窗口大小都设置为原来窗口大小的一半(适用于TCP Reno版本,Reno是Tahoe版本的改进,增加了这个快恢复的拥塞机制)
    • 超时:阈值设置为当前拥塞窗口的一半,拥塞窗口设置为1MSS(最大报文数)

拥塞的原因
网络拥塞是指网络中的数据流量超过了网络节点或链路的承载能力,导致网络性能显著下降

  1. 带宽不足:
    • 链路带宽限制:网络链路的带宽有限,当数据流量超过链路的带宽时,数据包会在链路的两端积压
    • 突发流量:短时间内的大量数据流量涌入网络,超过了带宽的瞬时处理能力
  2. 网络流量不均衡:
    • 流量集中:部分网络节点或链路承担了过多的流量,而其他部分则较为空闲,导致局部拥塞
    • 热点现象:某些热门服务或服务器在短时间内吸引大量访问, 导致这些节点或链路拥塞
  3. 网络拓扑变化:
    • 链路或节点故障:某条链路或节点发生故障,导致数据流量被重路由到其他链路或节点,造成这些路径的拥塞
    • 网络配置变化:例如路由算法的更新或配置错误,导致流量集中在某些路径上
  4. 缓冲区限制:
    • 路由器/交换机缓冲区满:网络设备的缓冲区有限,当流量过大时,缓冲区会被填满,导致数据包丢失或延迟
  5. 协议机制缺陷:
    • TCP流量控制不当:某些TCP实现中的流量控制算法未能有效适应当前网络状况,导致发送方持续发送数据,进一步加剧拥塞

拥塞的代价

  1. 数据包丢失:网络设备中的缓冲区溢出导致数据包丢失,迫使发送方重传数据,增加了网络负载
  2. 延迟增加:
    • 排队延迟:数据包在路由器或交换机的队列中等待处理的时间增加
    • 传输延迟:网络拥塞导致数据包在网络中传输的时间增阿吉
  3. 吞吐量下降:由于重传和延迟增加,网络的有效吞吐量下降, 即单位时间内成功传输的数据量减少
  4. 网络效率降低:拥塞导致大量数据包重传,浪费了网络带宽和计算资源

解决方法

  1. TCP拥塞控制算法:
    • 慢启动和拥塞避免:动态调整发送窗口,逐步探测网络的最大承载能力
    • 快重传和快恢复
  2. 主动队列管理(AQM):
    • 随机早期检测(RED):子啊缓冲区接近满时随机丢弃数据包,提供通知发送方减小发送速率
  3. 流量整形和优先级排队:
    • 流量整形:控制进入网络的流量速率,平滑突发流量
    • 优先级排队:根据数据包的重要性和实时性分配不同的传输优先级
  4. 网络资源优化:
    • 带宽升级:增加链路带宽
    • 负载均衡:通过智能路由算法,将流量均匀分布到网络中的各条路径和节点

3.7 TCP拥塞

拥塞感知

  1. 丢包检测:
    • 超时重传:当发送的数据包在设定的重传超时时间RTO内未收到ACK,发送端认为该数据包可能丢失, 认为拥塞
    • 重复确认:当接收端收到一个超出期望序列号的数据包时,会发送重复的ACK,认为轻微拥塞
  2. 延迟检测:
    • 延迟测量:发送端可以通过测量往返时间RTT来检测拥塞,如果RTT显著增加,可能意味着网络中出现了拥塞
    • 基于延迟的控制:一些TCP的变种(如TCP Vegas)通过对RTT进行细致测量和分析,提前检测到潜在的拥塞,并适时调整发送速率

四种速率控制方法

  1. 慢启动(Slow Start):
    • 工作原理:
      • 初始时,发送方将拥塞窗口(Congestion Window)设置为一个较小的(通常为一个MSS,最大报文段大小)
      • 收到一个ACK,Congestion Window增加1个MMS。这种指数增长方式使得congestion Window迅速增加(窗口大小变化: 1, 2, 4, 8, 16 … 2n
    • 过程:
      • 在连接建立和数据传输开始时,Congestion Window以指数速度增长
      • 在Congestion Window达到慢启动阈值(ssthresh)时,转入拥塞避免阶段
  2. 拥塞避免(Congestion Avoidance)
    • 工作原理:
      • 当Congestion Window达到ssthresh时,慢启动结束,进入拥塞避免阶段
      • 在这个阶段,Congestion Window以线性增长,即每个RTT内congestion window增加1个MSS(窗口大小变化:8, 9, 10, 11, …)
    • 过程:
      • 每个ACK使congestion window增加一个较小的量(1/congestion window)
      • 这种线性增长方式较慢,但可以防止网络拥塞
  3. 快重传(Fast Retransmit)
    • 工作原理:
      • 当发送方收到三个重复的ACK时(表明某个数据包可能丢失),发送方会立即重传丢失的数据包,而不等待重传定时器超时
    • 过程:
      • 快速重传能快速恢复数据丢失,减少传输延迟
  4. 快恢复(Fast Recovery)
    • 工作原理:
      • 在快重传之后,进入快恢复阶段
      • 阈值(threshold)和窗口大小都设置为原来的一半
      • 之后congestion window以线性方式增长,从而更快地恢复到合适传输速率
    • 过程:
      • 快恢复的目的是避免从头开始慢启动,从而更快地恢复到合适的传输速率

超时:

  • 阈值(Threshold)设置为原来拥塞窗口大小的一半,拥塞窗口大小设置为0

4.Network Layer

4.1 导论

4.1.1 数据平面

负责数据包传输和转发的部分,主要包含以下几个关键功能:

  1. 转发(Forwarding):转发是网络的核心功能,它决定了数据包从输入端口传送到输出端口的路径。具体的转发过程包括:
    • 查找转发表(Forwarding Table):每个路由器都有一张转发表,用于根据目的地址查找下一跳(Next Hop)。这张表通常是通过路由协议(如OSPF、BGP)构建的
    • 基于目的地址进行匹配:当一个数据包到达时,路由器会检查数据包的目的地址,并在转发表中查找对应的下一跳信息
    • 转发数据包:根据查找结果,将数据包转发到相应的输出端口
  2. 路由选择(Routing):虽然路由选择主要在控制平面进行,但它直接影响数据平面的转发过程。路由选择确定了转发表的内容,因此影响数据包的实际传输路径。常见的路由选择协议包括:
    • 内部网关协议(IGP):如OSPF、RIP等,主要用于自治系统(AS)内部的路由
    • 外部网关协议(EGP):如BGP,主要用于不同自治系统之间的路由
  3. 地址解析(Address Resolution):在数据链路层和网络层之间,需要将网络层地址(IP地址)转换为链路层地址(如以太网的MAC地址)。这一过程需要由地址解析协议(ARP)完成
  4. 包过滤和防火墙(Packet Filtering and Firewalls):数据平面也可以实现基本的安全功能,如包过滤和防火墙规则。这些规则可以根据数据包的源地址、目的地址、端口号等信息决定是否允许数据包通过
  5. 网络地址转换(NAT):NAT是一种用于在多个设备共享单一共有IP地址的技术。NAT修改数据包的源地址或目的地址,以适应不用网络之间的通信需求
  6. 流量管理和质量服务(QoS):流量管理和质量服务(QoS)功能确保关键应用的流量能够获得优先传输,避免网络拥塞导致的性能下降。这些功能通常包括流量分类、优先级设置、队列管理等
  7. 隧道技术 (Tunneling):Tunneling允许在一个网络协议的帧或数据包封装另一个协议的数据包。例如,IPv6包可以封装在IPv4包中,以在IPv4网络中传输

4.1.2 控制平面

负责管理和控制网络层的路由和流量工程。它决定了网络中的数据包如何被传输,并维护和更新网络中的转发表。控制平面涉及以下几个关键功能:

  1. 路由选择(Routing):控制平面的主要任务是路由选择,它通过路由协议来建立和维护网络的路由信息。路由选择的目标是找到数据包从源地址到目的地址的最佳路径。路由协议:
    • IGP:用于AS内部的路由选择
      • OSPF(开放最短路径优先,Open Shortest Path First):一种链路状态协议,使用Dijkstra算法计算最短路径
      • RIP(路由信息协议,Routing Information Protocal):一种距离向量协议,使用跳数作为度量
    • EGP:用于不同AS之间的路由选择
      • BGP(边界网关协议,Border Gateway Protocal):一种路径向量协议,主要用于互联网的全局路由选择
  2. 路由信息的交换和更新:控制平面负责不同路由器之间的路由信息交换和更新。这通常由路由协议实现,如OSPF会周期性地发送链路状态更新,而BGP则通过会话交换路由信息。路由信息的更新确保网络中的所有路由器都拥有最新的网络拓扑信息
  3. 构建和维护转发表:路由选择过程会生成一个路由表,控制平面将其转换为转发表(Forwarding Table),并下发到数据平面。转发表包含了目的地址与下一跳的映射,数据平面使用这些信息进行数据包的转发。
  4. 拓扑发现:控制平面通过各种协议和机制来发现网络拓扑结构。例如,OSPF通过发送Hello包来发现邻居,并通过链路状态广播来了解网络中的链路信息
  5. 路径计算和选择:在复杂的网络环境中,控制平面需要计算和选择最优路径。路径计算通常基于度量值(如带宽、延迟、跳数等)来选择最优路径。部分高级路由协议(如BGP)还考虑策略和约束条件来进行路由选择
  6. 流量工作:通过流量工程技术优化网络资源的使用。包括流量的监控、分析和优化。
    • MPLS(多协议标签交换,Multi-Protocal Lable Switching):通过标签交换路径来优化流量
    • QoS(服务质量,Quality of Service):根据应用需求分配不同的优先级和资源
  7. 故障检测和恢复:检测网络中的故障并执行恢复操作。路由协议通常具有故障检测机制,例如OSPF的链路状态检测和RIP的定期更新。故障恢复包括重新计算路径、更新路由表和通知相邻路由器
  8. 策略和安全管理:通过路由策略控制流量路径、通过访问控制列表(ACL)管理流量的安全性,以及通过防火墙和入侵检测系统(IDS)保护网络安全
  9. 软件定义网络(SDN):在SDN架构中,控制平面和数据平面分离,集中化的控制器管理和控制网络流量。SDN控制器通过南向接口与网络设备通信,通过北向接口提供应用编程接口供上层应用使用。SDN的控制平面使网络管理更加灵活和高效。

4.1.3 SDN

网络层的传统方式和软件定义网络方式在网络管理和控制方面有显著的区别。

传统网络方式

  1. 分布式控制平面:
    • 路由器独立决策:每个路由器都有自己的控制平面,独立运行路由协议(如OSPF、BGP)来构建和维护自己的路由表
    • 路由信息交换:路由器之间通过路由协议交换路由信息,以确保网络中的所有路由器都能了解网络拓扑和路由信息
    • 去中心化:控制功能分布在各个路由器中,没有集中管理,网络拓扑的变化需要通过各个路由器之间的信息交换来感知和更新
  2. 静态配置和管理:
    • 手动配置:网络管理员通常需要手动配置路由器和交换机的规则和策略,配置变更较为复杂和耗时
    • 固定的路径选择:路径选择主要依赖预定义的路由协议,灵活性较低,难以快速适应网络需求的变化
  3. 硬件依赖性:
    • 专用设备:网络功能紧密集成在专用硬件设备中(如路由器和交换机),硬件升级和更新成本较高
    • 协议固定:设备上的路由协议和功能通常是固定的,难以进行定制和扩展

软件定义网络(SDN)方式

  1. 集中式控制平面:
    • 集中控制器:SDN引入了集中控制器,负责全局的网络管理和控制。控制器通过南向接口与网络设备通信,控制其行为
    • 全局视图:控制器拥有整个网络的全局视图,可以基于全局信息进行路径计算和优化,提升网络的整体效率
    • 动态更新:控制器可以实时更新和下发网络规则,快速相应网络拓扑的变化和流量需求
  2. 动态配置和管理:
    • 编程接口:SDN提供开放的编程接口(如OpenFlow),网络管理员可以通过编程来动态配置和管理网络,自动化程度高
    • 灵活的路径选择:控制器可以根据实时的网络状态和策略动态调整路径选择,优化流量和资源利用
  3. 软硬件解耦:
    • 通用硬件:SDN架构将网络功能从专用硬件中解耦,网络设备变成了可编程的转发设备,可以使用通用硬件
    • 功能扩展:通过软件定义,可以灵活地扩展和定制网络功能,而不需要更换硬件设备

4.2 路由器组成

路由器组成涉及多个关键组件,这些组件共同实现了数据包的接收、处理和转发功能。

组成

  1. 输入端口(Ingress Port):

    • 功能:
      • 物理接口:接收来自物理链路的数据包
      • 数据链路层处理:执行数据链路层的功能,如帧的解析和错误检测
      • 转发表查找:根据数据包的目的地址查找转发表,确定下一跳信息
    • 关键组件:
      • 物理层设备:用于物理连接和信号接收
      • 数据链路层设备:用于帧解析和处理,如MAC地址解析
      • 输入缓冲区:暂存接收的数据包,防止数据丢失
  2. 转发引擎(Forwarding Engine)

    • 功能:
      • 转发表查找:根据输入端口提供的目的地址信息查找转发表
      • 数据包处理和转发:根据查找结果,决定数据包的转发路径
    • 关键组件:
      • 转发表:包含目的地址和下一跳信息的映射表
      • 处理器(ASIC/NP):专用集成电路(ASIC)或网络处理器(NP),用于高速处理和转发数据包
      • 缓存和队列:用于数据包临时存储和管理,确保高效的包转发
  3. 交换结构(Switching Fabric)

    • 功能:

      • 数据包交换:将数据包从输入端口转发到适当的输出端口(交换速度通常是输入/输出端口速率的N倍,N为端口数量)
    • 类型:

      • 内存交换结构:

        • 数据包从输入端口接收后,首先存储在路由器的内存中
        • 路由器的CPU读取内存中的数据包,并通过控制逻辑将数据包转发到对应的输出端口的内存中
        • 最后,数据包从输出端口的内存中读取并发送出去
      • 总线架构:所有端口通过共享总线进行数据传输,适用于低速环境

        • 数据包从输入端口接收后,经过数据链路层处理,然后放入总线上
        • 所有端口共享一个高速总线,总线控制逻辑决定哪个输出端口接收数据包
        • 数据包通过总线传输到指定的输出端口,进行封装和发送
      • 交叉开关架构(Crossbar Switching Fabric):端口间通过交叉开关矩阵进行连接,支持高速并行传输

        • 每个输入端口和输出端口通过一个交叉开关矩阵直接相连
        • 交叉开关矩阵包含多个交叉点,每个交叉点可以打开或关闭,控制数据包的传输路径
        • 当数据包从输入端口到达时,交叉开关矩阵根据控制逻辑打开相应的路径,将数据包直接传输到输出端口
  4. 输出端口(Egress Port)

    • 功能:
      • 数据包排队和缓存:管理和存储待发送的数据包,避免拥塞
      • 数据链路层封装:根据目标链路的需求,将数据包封装成相应的帧格式
      • 物理层传输:将封装好的帧通过物理链路发送出去
    • 关键组件:
      • 输出缓冲区:用于临时存储即将发送的数据包
      • 数据链路层设备:执行帧封装和错误检测功能
      • 物理层设备:进行物理信号的发送
  5. 控制平面接口

    • 功能:
      • 路由信息交换:与其他路由器交换路由信息,构建和更新路由表
      • 管理和配置:处理管理命令和配置更新,维护转发表
    • 关键组件:
      • CPU和内存:用于执行路由协议和处理控制信息
      • 操作系统:路由器的操作系统,如Cisco IOS,负责管理和执行控制平面任务
      • 接口卡:用于与控制平面和管理系统进行通信

路由器数据平面的工作流程

  1. 数据包接收:输入端口收到数据包,进行处理处理和解析
  2. 目的地址查找:转发引擎更具数据包的目的地址查找转发表,确定下一跳和输出端口
  3. 交换和转发:数据包通过交换结构从输入端口转发到相应的输出端口
  4. 数据包发送:输出端口对数据包进行排队和封装,然后通过物理链路发送出去

路由器性能优化

  • 高速缓存(Caching):使用缓存技术减少查找延迟,提高转发速度
  • 硬件加速:采用专用硬件(如ASIC或FPGA)加速数据包处理和转发
  • 并行处理:利用多核处理器和多队列技术实现并行数据包处理,提升吞吐量

路由器现代发展

  • 软件定义网络(SDN)支持:通过集中控制器动态调整和管理转发表
  • 网络功能虚拟化(NFV):将路由功能虚拟化,运行在通用服务器上,提高了灵活性和可扩展性
  • 智能路由:结合人工智能和机器学习技术,优化路由选择和流量管理,提高网络性能

4.3 IP: Internet Protocal

网络层主要依赖IP来实现数据包的传输。IP协议是无连接的、尽力而为的协议,负责在不同的网络之间传递数据包。IP有两个主要版本:IPv4和IPv6

IP协议的基本功能

  1. 寻址和路由选择:IP提供全局唯一的地址(IP地址)来表示网络上的每一个设备,并根据目的地址将数据包传递给最终接收者
  2. 数据包封装:将传输层的数据封装成IP数据包,并添加头部信息以便正确传输
  3. 数据包分片与重组:将大于最大传输单元(MTU)的数据包分片,确保数据包能够通过各种网络链路,并在接收端重组这些分片
  4. 差错处理:提供基本的错误检测机制,通过头部校验和检测传输中的错误
  5. 时间生存(TLL):使用TTL字段防止数据包在网络中无限循环,保证网络资源的有效利用

IP协议的实际应用

  • 路由:IP协议通过动态路由协议(如OSPF、BGP)在网络中实现高效的路由选择和数据传输
  • 互联网通信:所有互联网应用和服务都基于IP协议进行通信,包括网页浏览、电子邮件、视频流、在线游戏等
  • 网络安全:IPsec协议在IP层提供安全性,确保数据的机密性、完整性和真实性

IPv4和IPv6的共存

为了实现IPv4向IPv6的平滑过渡,采用了多种过渡技术,包括:

  • 双栈(Dual Stack):设备同时运行IPv4和IPv6协议
  • 隧道技术(Tunneling):将IPv6包封装在IPv4包中传输
  • 翻译技术(NAT64/DNS64):在IPv4和IPv6网络之间进行地址和协议转换

4.3.1 数据报格式

IPv4数据报格式

  1. 头部结构:
    • 版本(Version, 4 bits):表示IP协议的版本为,IPv4为4
    • 头部长度(IHL, Internet Header Length, 4 bits):表示头部的长度,以4字节为单位,最小值为5,表示最小20字节的头部长度
    • 服务类型(TOS, Type of Service, 8 bits):定义数据包的优先级和服务类型,包含优先级字段和QoS字段
    • 总长度(Totoal Length, 16 bits):表示整个数据报的长度(头部加数据),最大值为65535字节
    • 标识(Identification, 16 bits):唯一标识数据包,主要用于分片重组
    • 标志(Flags, 3 bits):控制数据报分片的标志位,包括不分片位(DF, Don’t Fragment)和更多分片为(MF, More Fragments)
    • 片偏移(Fragment Offset, 13 bits):表示分片在原始数据报中的相对位置,以8字节为单位
    • 生存时间 (TLL, Time to Live, 8bits):数据报在网络中的存货时间,每经过一个路由器减1,到0时数据报被丢弃
    • 协议(Protocal, 8 bits):表示上层协议类型,如TPC(6)、UDP(17)
    • 头部校验和(Header Checksum, 16 bits):用于验证头部的完整性
    • 源地址(Source Address, 32 bits):发送方的IP地址
    • 目的地址(Destination Address, 32 bits):接收方的IP地址
    • 选项和填充(Options and Padding, 可变长度):可选字段,用于扩展功能,填充字段确保头部长度为4字节的倍数
  2. 数据部分:
    • 数据(Payload):传输层的报文或其他数据,最大可达65515字节(65535减去最小20字节头部

IPv6数据报格式:(传输过程不允许分片)

  1. 头部结构(40字节):
    • 版本(Version, 4 bits):表示IP协议的版本号,IPv6为6
    • 通信类别(Traffic Class, 8 bits):类似于IPv4的服务类型字段,用于区分不同的流量类型和优先级
    • 流标签(Flow Lable, 20 bits):用于标识数据流,便于路由器进行快速处理和QoS管理
    • 有效载荷长度(Payload Length, 16 bits):表示数据部分的长度,不包括头部长度
    • 下一个头部(Next Header, 8 bits):类似于IPv4的协议字段,指示后续的扩展头部或上层协议类型
    • 跳限制 (Hop Limit, 8 bits):类似于IPv4的TTL字段,表示数据报可以经过的最大跳数
    • 源地址(Source Address, 128 bits):发送方的IPv6地址
    • 目的地址(Destination Address, 128 bits):接收方的IPv6地址
  2. 扩展头部:
    • 基本头部(Hop-by-Hop Options):携带需要每跳处理的信息
    • 路由头部(Routing Header):提供数据报到达目的地的可选路径
    • 片段头部(Fragment Header):用于数据报分片和重组
    • 认证头部(Authentication Header, AH):提供数据报的认证和完整性
    • 封装安全有效载荷(Encapsulating Security Payload, ESP):提供加密和认证
  3. 数据部分:
    • 数据(Payload):传输层的报文段或其他数据,最大可达2^31-1字节,不过通常受限于路径上的最大传输单元(MTU)

4.3.2 分片

主要用于处理大于网络路径最大传输单元(MTU)限制的数据包。只针对IPv4数据报

IP分片

当一个IP数据包大小超过路径上的某个网络设备的MTU时,数据包需要被分片。分片的过程是由发送端或中间路由器完成

分片过程:

  1. 检查MTU:路由器或发送端检查即将发送的数据包大小与路径上的MTU进行比较
  2. 判断分片需求:如果数据包大于MTU,则需要进行分片
  3. 分片数据包:数据包被分成多个较小的片段,每个片段都被封装成一个新的IP数据包。这些新数据包包含原始数据的一部分和一些控制信息
  4. 设置头部字段:
    • 标识(Identification):所有片段的数据包具有相同的标识值,用于在重组时识别它们属于同一个数据包
    • 标志(Flags):其中包括一个’更多分片位’(MF, More Fragments),如果这是最后一个片段,则该位为0,否则为1
    • 片偏移(Frament Offset):表示该片段在原始数据包中的位置,以8字节为单位,第一个片段的偏移量为0,后续片段的偏移量依次递增

IP重组

当数据包的片段到达目的地时,接收端需要将这些片段重组为原始的数据包,重组过程仅在目标主机上进行,不在中间路由器上进行

过程:

  1. 收集片段:接收端根据标识字段将属于同一数据包的片段收集起来
  2. 检查标志和片偏移:通过检查每个片段的标志和片偏移字段,确定每个片段在原始数据包中的位置
  3. 排序和校验:将片段按偏移量排序,校验每个片段的完整性
  4. 重组数据包:根据片偏移将片段的有效载荷重新组合成原始数据包
  5. 检测最后一个片段:当具有’更多分片位’标志的片段被识别为0时,表示这是最后一个片段,重组完成

优点

  • 跨越不同网络:允许大数据包跨越具有不同MTU的网络段,保证数据包的传输
  • 灵活性:在发送端和中间节点都可以进行分片,提供了传输的灵活性

缺点

  • 效率低下:分片和重组增加了处理开销,尤其是在重组过程中需要更多的内存和计算资源
  • 可靠性降低:如果任何一个片段丢失,整个数据包必须被丢弃并重传,增加了传输失败的概率
  • 安全性问题:分片机制可能被利用来进行一些攻击,如IP碎片攻击

实际应用中的注意事项

  1. 路径MTU发现(Path MTU Discovery):使用路径MTU发现技术来避免分片,该技术通过检测路径上的最小MTU,调整发送的数据包大小,以避免分片
  2. DF位(Don’t Fragment Bit):发送端可以设置DF位,指示路由器不要进行分片。如果数据包超过MTU,路由器将丢弃数据包并返回ICMP差错消息,使发送端调整数据包大小

4.3.3 IPv4地址

格式:IPv4地址是32位长,通常表示为四个十进制数,每个数的范围是0到255(点分十进制表示法),如192.168.10.1。32位地址分为网络部分和主机部分,网络部分用于标识网络,主机部分用于标识该网络内的主机

优点:简单、广泛使用,支持大量的设备

缺点:地址空间有限,地址耗尽问题;安全和QoS支持较弱

地址分类

IPv4地址分为五类:A, B, C, D, E。前面三类用于单播(一对一),D类用于多播(一对多),E类保留供实验和将来使用

  1. A类:

    • 范围:1.0.0.0 至126.0.0.0
    • 网络前缀:8位(第一个字节),第一个字节的第一个比特始终为0
    • 主机部分:24位(后三个字节)
    • 默认子网掩码:255.0.0.0
    • 适用场景:大规模网络,例如大型组织和互联网服务提供商(ISP)
    • 可用网络数:2^7 - 2 = 216(排除网络号0和127)
    • 每个网络中的最大主机数:2^24 - 2 = 16,777,214(排除网络地址和广播地址)
  2. B类:

    • 范围:128.0.0.0至191.255.0.0
    • 网络前缀 :16位(前两个字节),前两个字节的第一个比特序列为10
    • 主机部分:16位(后两个字节)
    • 默认子网掩码:255.255.0.0
    • 适用场景:中等规模网络,例如中型企业和组织
    • 可用网络数:2^14=16,384
    • 每个网络中的最大主机数:2^16 - 2 = 65,534
  3. C类:

    • 范围:192.0.0.0 至 233.255.255.0
    • 网络前缀:24位(前三个字节),前三个字节的第一个比特序列为110
    • 主机部分:8位(最后一个字节)
    • 默认子网掩码:255.255.255.0
    • 适用场景:小规模网络,例如小型企业和组织
    • 可用网络数:2^21 = 2,097,152
    • 每个网络中的最大主机数:2^8 - 2 = 254
  4. D类:

    • 范围:224.0.0.0至239.255.255.255
    • 适用场景:多播,用于向多个特定的主机发送数据
    • 特点:不分为网络和主机部分
  5. E类:

    • 范围:240.0.0.0 至 255.255.255.255
    • 适用场景:保留供实验和将来适用
    • 特点:不分为网络和主机部分
  6. 特殊用途的IPv4地址:

    • 广播地址:255.255.255.255,用于发送数据包到同一子网内的所有主机

    • 本地环回地址:127.0.0.0 至 127.255.255.255,通常使用127.0.0.1,用于主机内部的测试和诊断

    • 私有地址:

      • A类:10.0.0.0 至 10.255.255.255
      • B类:172.16.0.0 至 172.31.255.255
      • C类:192.168.0.0 至 192.168.255.255
      • 特点:用于网络内部,不在互联网中路由,需要通过NAT访问互联网
    • 自动私有IP地址(APIPA)

      • 范围:169.254.0.0 至 169.254.255.255
      • 用途:当DHCP服务器不可用时,自动分配给主机用于临时通信
    • 任意ip地址:0.0.0.0

4.3.4 DHCP

DHCP(Dynamic Host Configuration Protocal,动态主机配置协议)是一种用于自动分配IP地址和其他网络配置参数(如子网掩码、网关和DNS服务器)的网络管理协议。它使得设备能够在网络中自动获取必要的网络设置,从而简化了网络的管理。(基于UDP上的服务)

工作原理

  1. DHCP发现:当一个新设备加入网络时,它首先会广播一个DHCP发现消息到整个子网,以寻找可用的DHCP服务器,这个消息包含客户端的MAC地址,并且源IP地址是0.0.0.0,因为此时新设备还没有被分配IP地址
  2. DHCP提供:DHCP服务器收到消息后,会选择一个可用的IP地址,并广播一个DHCP提供消息给新设备。这个消息包含服务器的IP地址、分配给新设备的IP地址、子网掩码、租期等信息
  3. DHCP请求:客户端收到一个或多个DHCP提供消息后,会选择一个DHCP服务器,并向其发送一个DHCP请求消息,请求使用提供的IP地址。这个消息也是广播发送的,以便其他DHCP服务器知道客户端选择了哪个提供
  4. DHCP确认:DHCP服务器收到DHCP请求消息后,会发送一个DHCP确认消息给客户端,确认分配的IP地址和其他配置参数。此时,客户端可以使用分配的IP地址进行通信
  5. 租约更新:客户端在租期快到期时,会发送DHCP请求消息以更新租约。DHCP服务器可以延长租期或分配新的IP地址

消息类型

  • DHCP Discover:客户端广播寻找DHCP服务器
  • DHCP Offser:服务器广播提供IP地址和配置信息
  • DHCP Request:客户端请求指定的IP地址和配置
  • DHCP ACK:服务器确认分配的IP地址和配置
  • DHCP NAK:服务器拒绝客户端的请求,通常由于IP地址不可用或租期问题
  • DHCP Release:客户端通知服务器释放分配的IP地址
  • DHCP Inform:客户端请求附加的配置信息而不改变IP地址

优点

  1. 自动化管理:自动分配IP地址和其他网络参数,减少了手动配置的需求
  2. 集中管理:网络管理员可以在中央位置管理IP地址分配,简化了网络管理
  3. 减少冲突:通过中央管理IP地址分配,避免了IP地址冲突
  4. 灵活性:适应动态变化和网络环境,支持移动设备的频繁加入和离开

配置参数

  • IP地址:分配给客户端的IP地址
  • 子网掩码:确认网络部分和主机部分的位数
  • 默认网关:网络中的默认路由器IP地址
  • DNS服务器:用于域名解析的DNS服务器的IP地址
  • 租期:IP地址的租用时间
  • WINS服务器:Windows Internet Name Service,用于NetBIOS名称解析

实现

  1. DHCP服务器:
    • 通常运行在网络服务器或路由器商,负责管理和分配IP地址(可以在linux系统上配置DHCP服务器)
    • 配置了IP地址池、子网掩码、网关、DNS服务器等信息
  2. DHCP客户端:
    • 任何需要IP地址的设备
    • 通过DCHP自动获取IP地址和其他网络配置

4.3.5 路由聚集

Route Aggregation,是网络中通过将多个小的网络前缀(子网)汇总成一个较大的网络前缀,从而减少路由表条目数量和提高路由效率的几乎。路由聚集有助于优化路由表,降低路由表的负载,减少网络带宽的占用,并提高网络的可扩展性和管理性

原理:将多个链路的子网合并为一个更大的地址块来简化路由表。例如,将多个/24子网(每个有256个IP地址)合并为一个/16子网(有65536个IP地址)。【这里的24和16代表的是子网掩码,位为1的数量】

举例说明

假设有以下四个网络:

  • 192.168.0.0/24
  • 192.168.1.0/24
  • 192.168.2.0/24
  • 192.168.3.0/24

这些网络可以汇总成一个更大的网络:

  • 192.168.0.0/22

这个更大网络前缀涵盖了从192.168.0.0到192.168.3.255的所有地址

4.3.6 NAT:网络地址转换

是一种用于改变网络包中源或目的IP地址的技术。NAT广泛应用于IPv4网络中,以解决IPv4地址不足的问题,并提供额外的安全和灵活性。NAT可以在路由器、防火墙或其他网络设备上实现

主要类型

  1. 静态NAT:
    • 每个私有IP地址映射到一个唯一的公有IP地址
    • 用于需要固定IP地址的设备,如服务器
  2. 动态NAT:
    • 私有IP地址动态映射到一个公共IP地址池中的任意一个IP地址
    • 用于多个设备共享有限的公共IP地址
  3. 端口地址转换(PAT, Port Address Translation 也叫NAT重载)
    • 多个私有IP地址共享一个公共IP地址,但通过不同的端口号区分流量
    • 最常用的NAT类型,通常用于家庭和小型办公室网络

工作原理:NAT在IP包通过路由器时修改包头中的IP地址信息

  1. 源NAT:
    • 修改出战数据包的源IP地址
    • 常用于将私有网络的流量转换为公共IP地址,以便能够访问互联网
  2. 目的NAT:
    • 修改入站数据包的目的IP地址
    • 常用于将公共IP地址的流量重定向到私有网络中的服务器,如用于端口转发和负载均衡

示例

  1. 源NAT:假设一个私有网络192.168.1.0/24,通过一个公共IP地址203.0.113.1访问互联网。路由器上的源NAT配置如下:
    • 出站数据包:
      • 私有网络设备发送数据包,其源IP地址是192.168.1.10
      • 路由器将其源IP地址修改为203.0.113.1,并记住此映射
    • 入站响应包:
      • 互联网主机回复的数据包,其目的IP地址是203.0.113.1
      • 路由器根据映射表,将目的IP地址修改为192.168.1.10,并将其数据包转发给私有网络设备
  2. 目的NAT:假设有一个公网IP地址203.0.113.1,将其流量重定向到私有网络中Web服务器192.168.1.10.路由器上的目的NAT配置如下:
    • 入站请求包:
      • 互联网主机发送的数据包,其目的地址是203.0.113.1
      • 路由器将其目的IP地址修改为192.168.1.10,并将数据包转发给Web服务器
    • 出站响应包:
      • Web服务器回复的数据包,其源IP地址是192.168.1.10
      • 路由器将源IP地址修改为203.0.113.1,并将数据包发回互联网主机

可以静态设置,也可以使用UPnP这样一个协议动态设置,还可以通过一个中继服务器

优点

  1. 节省IPv4地址:通过共享公共IP地址,减少了对IPv4地址的需求,延缓了地址耗尽的问题
  2. 增强安全性:隐藏了内部网络结构,防止外部直接访问内部设备,提高了安全性
  3. 灵活性:支持内部网络设备无缝更改IP地址,而无需在外部重新配置

缺点

  1. 端到端通信的限制:NAT打破了IP地址的端到端的连接性,某些协议和应用可能需要特殊配置才能正常工作
  2. 性能开销:NAT设备需要维护地址映射表,处理大量连接时可能会增加路由器的负载
  3. 复杂性增加:NAT配置和管理可能增加网络的复杂性,特别时在处理大型网络时

NAT与IPv6:IPv5提供了足够的地址空间,不需要NAT解决地址不足问题。IPv6的设计目标是恢复IP地址的端到端可达性,鼓励使用全球唯一的地址进行通信。然而,过渡阶段仍可能使用NAT64等技术帮助IPv4和IPv6网络之间的互通

4.3.7 IPv6地址

格式:IPv5地址是128位长,通常表示为8组16进制数,每组用冒号分割,如2001:0db8:85a3:0000:0000:8e2e:0370:7334

表示法:可以省略前导零和连续的零(使用双冒号表示)

优点

  • 地址空间大
  • 简化的头部:处理效率更高
  • 增强的安全性:内置IPsec支持
  • 自动配置:支持无状态地址自动配置(SLAAC),简化网络管理
  • 改进的多播和任播:更好地支持组播和任播通信

ICMPv6:ICMP的新版本

  • 附加了报文类型,‘Packet Too Big’
  • 多播组管理功能

4.4 SDN:数据平面

本科考试好像不考,只做[了解](#4.1.3 SDN)

4.5 路由选择算法

负责确定数据包从源到目的地的最佳路径

4.5.1 链路状态路由算法

基于Dijkstra算法,每个路由器维护整个网络的拓扑视图。路由器使用链路状态信息构建一张图,然后运行Dijkstra算法找到最短路径

工作原理

  • 链路状态广告(LSA):每个路由器将其链路状态信息广播给所有其他路由器
  • 拓扑数据库:每个路由器构建一个拓扑数据库,包含网络的完整图
  • 路径计算:使用Dijkstra算法计算到所有其他节点的最短路径

优点

  • 快速收敛:拓扑变化后能够快速收敛
  • 无环路:避免了路由环路问题

缺点

  • 复杂性高:需要维护整个网路的拓扑视图,计算复杂度高
  • 资源消耗大:需要更多的内存和计算资源

示例:常见的链路状态路由协议包括OSPF(Open Shortest Path First)和IS-IS(Intermeidate System to Intermediate System)

Dijkstra算法步骤:

这里举例说明了 ,如果图中有七点就代表有七步
在这里插入图片描述

4.5.2 距离矢量路由算法

基于贝尔曼-福特算法的一种分布式路由选择算法。每个路由器维护一张路由表,包含每个可能的目的地距离(通常是跳数)和下一跳路由器的信息

工作原理

  • 路由更新:路由器周期性地向其所有相邻路由器发送自己的路由表
  • 表更新:收到路由表后,路由器根据最短路径更新自己的路由表

优点

  • 简单、易于实现
  • 适用于小规模网络

缺点

  • 路由环路:可能出现路由环路
  • 收敛慢:拓扑变化后,算法需要较长时间才能收敛

示例:常见的距离矢量路由协议包括RIP(Routing Information Protocal)

4.5.3 混合路由算法

结合距离矢量和链路状态算法的优点,在初始阶段使用链路状态信息构建拓扑图,然后使用距离矢量算法进行路由更新

优点

  • 结合两种算法的优点
  • 能够快速收敛,同时减少计算复杂度

缺点

  • 实现和维护复杂
  • 需要协调两种算法的不同特性

示例:EIGRP(Enhanced Interior Gateway Routing Protocal)

4.6 自治系统内部的路由选择

在网络层中,自治系统内部的路由选择涉及选择和维护网络中不同路由器之间的最佳路径。自治系统(Autonomous System, AS)是由的单一技术管理并对外表现为单一实体的一组IP网络和路由器。AS内部的路由选择由内部网关协议(IGP, Interior Gateway Protocal)负责。常见的IGP包括RIP、OSPF和IS-IS

IGP包含了上面说到的路由选择算法

主要IGP

  1. 路由信息协议(RIP):RIP是一种基于距离矢量的路由协议,使用跳数作为度量来选择最佳路径
    • 特点:
      • 跳数限制:最大跳数为15,跳数为16表示网络不可达
      • 更新频率:每30s广播(最多25个子网)整个路由表,增加了网络带宽消耗
      • 收敛速度:相对较慢,适用于小型网络
    • 工作原理:
      • 路由更新:每个路哟求周期性地向相邻路由器发送包含整个路由表的更新
      • 路由选择:接收到更新后,路由器根据最短跳数更新其路由表
    • 缺点:
      • 规模限制:适用于小型网络,不适合大型网络
      • 慢收敛:网络拓扑变化时,收敛速度慢
      • 路由环路:可能会出现路由环路问题
  2. 开放最短路径优先(OSPF):OSPF是一种链路状态路由协议,使用Dijkstra算法来计算最短路径树
    • 特点:
      • 层次结构:支持多区域的层次结构,提高了可扩展性
      • 快速收敛:链路状态更新迅速,收敛速度块
      • 认证:支持路由更新的认证,提高了安全性
    • 工作原理:
      • 链路状态广告(LSA):路由器通过链路状态广告通告其链路状态
      • 拓扑数据库:每个路由器维护一个拓扑数据库,包含整个网络的拓扑视图
      • 路径计算:使用Dijkstra算法计算到每个目的地的最短路径
    • 优点:
      • 可扩展性
      • 无环路
      • 收敛速度快
    • 缺点:
      • 复杂性
      • 资源消耗
  3. 中间系统到中间系统(IS-IS):IS-IS是一种链路状态路由协议,最初为OSI协议涉及,但也用于IP路由
    • 特点:
      • 层次结构:类似于OSPF,支持多区域的层次结构
      • 灵活性
      • 稳定性

路由选择过程

无论使用哪种IGP,路由选择过程一般包括以下步骤:

  1. 网络发现:路由器通过发送和接收路由更新或链路状态广告来发现网络拓扑
  2. 路由计算:根据收到的信息计算每个目的地的最佳 路径
  3. 路由表更新
  4. 数据包转发

4.7 ISP之间的路由选择:BGP

边界网关协议(Border Gateway Protocal, BGP)是互联网的核心路由协议,负责在不同AS之间交换路由信息。BGP是一种路径矢量协议,专为互联网上大规模路由而设计。BGP的设计目标是提供高效、可扩展和灵活的路由选择机制

基本概念

  1. AS:
    • 一个AS是由单一管理实体控制的一组IP网络,使用唯一的AS编号进行标识
    • BGP用于在不同的AS之间交换路由信息
  2. BGP邻居(Peers):
    • BGP通过建立邻居关系与其他路由器交换路由信息
    • 邻居关系通过手动配置,使用TCP端口179进行通信
  3. 路径矢量:
    • BGP使用路径矢量机制,每条路由条目包含一个AS路径,记录了该路由经过的所有AS
    • 路由器使用AS路径避免路由环路

工作原理

  1. 建立邻居关系:
    • 路由器通过TCP端口179建立BGP会话,交换BGP OPEN消息建立邻居关系
    • 建立邻居关系后,路由器交换完整的BGP路由表
  2. 路由传播:
    • BGP路由器通过BGP UPDATE消息传播路由信息
    • BGP路由包含前缀、路径属性(如AS路径、下一跳,MED等)
  3. 路由选择:
    • BGP路由根据路径属性选择最佳路由,常见的属性包括AS路径长度,下一跳、Local Preference等
    • BGP遵循多个标准进行路由选择,优先级如下:
      • 优先选择最高的Local Preference
      • 优先选择最短的AS路径
      • 优先选择最低的MED(Mutiple Exit Discriminator)
      • 优先选择最近的IGP度量
      • 优先选择最早学习到的路径(避免频繁的路径变化)
  4. 保持连接:
    • BGP通过KEEPALIVE消息维持邻居关系,默认每60s发送一次
    • 若三次KEEPALIVE消息未收到回应,BGP会话被视为断开

特点

  1. 可扩展性:BGP设计用于大规模互联网,可以处理数十万条路由条目
  2. 策略路由:允许网络管理员根据策略额商业考虑选择路径,如流量工作、负载均衡等
  3. 稳定性和可靠性:通过路径矢量机制和多级路由选择标准,提供稳定可靠的路由选择

部署场景

  1. 跨ISP路由
  2. 企业多宿主连接
  3. 数据中心互连

4.8 SDN:控制平面

[本科考试不考](5.5 SDN控制平面_哔哩哔哩_bilibili)

5.The Data Link Layer

5.1 引论和服务

  • 数据链路层:负责在同一物理链路上的相邻节点之间传输数据

  • 链路层服务:

    • 成帧:将数据封装成帧进行传输
    • 链路访问:管理设备如何接入和使用物理链路
    • 可靠传输:在相邻节点间(一个子网内)进行可靠的转发,也可以不实现,看情况(无线可能就要做可靠传输的保证)
    • 流量控制:防止发送方发送数据过快导致接收方超载
    • 错误检测和纠正:确保数据在传输过程中没有发生错误或纠正已检测到的错误
    • 全双工和半双工:
      • 半双工:链路可以双向传输,但一次只有一个方向
  • 广域网(WAN):点到点链路

  • 局域网(LAN):多点连接方式

适配器通信

5.2 错误检测和纠正

EDC = 错误检测和纠正位(冗余位)

  • 这些位附加在数据后面,形成一个冗余数据块,用于检测和纠正传输过程中可能发生的错误
  • EDC长度越长,错误检测和纠正能力越强,但也会增加传输的开销和复杂性

D = 数据(由错误检测保护,可以包含头部字段)

  • 实际传输数据,包含数据包的有效负载和头部字段
  • EDC是为确保D的完整性而添加的冗余信息

错误检测并非100%可靠

错误检测:识别数据传输中出现的错误,常见的错误检测方法有一下几种

  1. 校验和(Checksum):
    • 这是将数据块的所有字节或字组组成一组数字,然后取这些数字的和作为校验和
    • 校验和在数据传输时和数据一起发送,接收方重新计算校验和并与收到的checksum比较,以检测错误
  2. 奇偶校验(Parity Check):
    • 通过在数据中增加一个奇偶位,使得整个数据块的1的数量成为偶数或奇数
    • 单个奇偶校验位可以检测奇数位的错误,但无法检测出偶数位的错误
  3. 循环冗余校验(CRC, Cycle Redundancy Check):
    • CRC是一种更强大的错误检测机制,通过对数据执行多项式除法生成一个校验码,冗余位为得到的remainder,然后对D和EDC能够进行整除
    • 数据和校验码一起发送,接收方用相同的多项式对接收到的数据进行验证
    • 能有效检测和纠正多种错误模式,非常适用于实际网络环境
      在这里插入图片描述

后面加0的个数 = G的位数 - 1

错误纠正:常见的错误纠正方法包括:

  1. 前向纠错(Foward Error Correction, FEC):
    • 通过在数据中增加冗余信息,使得接收方能够检测和纠正一定数量的错误
    • 常用方法包括海明码(Hamming Code)、里德-所罗门码(Reed-Solomon Code)等
    • Hamming Code能够纠正单个比特错误,检测出两个比特错误
  2. 自动重传请求(Automatic Repeat reQuest, ARQ):
    • 不直接纠正错误,而是通过请求发送方重传错误的数据块来实现数据纠正
    • 常见协议包括Stop-and-Wait ARQ、Go-Back-N ARQ和Selective Repeat ARQ
    • 适合需要告可靠性传输的环境,如TCP/IP协议中的TCP

具体机制与应用

  1. 海明码(Hamming Code):
    • 通过在数据中插入额外的校验位,确保每个数据块的若干位能够形成特定的二进制序列
    • 例如,海明(7,4)码可以纠正单个比特错误,适用于短数据块的纠错
  2. 里德-所罗门码(Reed-Solomon Code):
    • 一种基于符号的纠错码,特别适合处理突发错误
    • 广泛应用于光盘、卫星通信和无线网络等领域

5.3 多点访问协议

5.3.1 概述

信道:数据传输的通路

  • 链路类型:

    • 点对点链路:仅连接两个节点的链路(使用点对点协议,PPP, Point-to-Point)
    • 广播链路:连接多个节点的链路,数据可以广播给所有连接的节点
  • 广播信道的碰撞:在广播信道上,当两个或多个节点同时发送数据时,会发生数据碰撞,导致数据包损坏

  • 数据链路层的两个子层:

    • LLC:负责逻辑链路的建立、维护和释放。
    • MAC:负责介质访问控制,决定如何在物理链路上传输数据
  • 多重访问协议的三大类:

    • 信道划分协议:如TDMA(通过时间划分信道)和FDMA(通过频率划分信道),将信道分为多个独立的子信道
    • 随机访问协议:如ALOHA和CSMA,节点在发送数据时检测信道是否空闲,空闲时发送数据,碰撞后重传
    • 轮流协议:如令牌环协议,节点按顺序轮流发送数据,避免碰撞

多点访问协议(Multiple Access Protocols)用于管理共享通信信道的访问。MAP旨在协调多个设备如何访问同一通信信道,以避免冲突和碰撞。常见的MAP有三大类:信道划分协议、随机访问协议、控制访问协议

信道划分协议:通过将信道划分成多个子信道,使得每个子信道由几点独占,避免碰撞

  1. 频分多址(FDMA, Frequency Division Multiple Access):
    • 将信道的频谱划分为若干频带,每个频带分配一个节点
    • 适用于模拟信号的无线通信,如早期的移动通信系统
  2. 时分多址(TDMA, Time Division Multiple Access):
    • 将信道时间划分为若干时隙,每个时隙分配一个节点
    • 适用于数字信号的无线通信,如GSM移动通信系统
  3. 码分多址(CDMA, Code Division Multiple Access):
    • 每个节点使用唯一的扩频码在整个信道上同时传输数据
    • 数据在接收端通过相同的扩频码进行解码
    • 适用于现代的无线通信系统,如3G移动通信系统

随机访问协议:允许网络中的节点在任意时间尝试发送数据,但提供了检测和解决冲突的机制

  1. ALOHA
    • 纯ALOHA
      • 每个节点在有数据要发送时,直接发送
      • 如果发送碰撞,节点等待一段随机时间后重传
      • 简单但效率较低,信道利用率大约为18%
    • 时隙ALOHA
      • 时间被分成固定长度的时隙,节点只能在时隙开始时发送数据
      • 减少碰撞的概率,提高了效率,信道利用率为37%
  2. CSMA(Carrier Sense Multiple Access):
    • 无碰撞避免的CSMA
      • 节点发送前”监听“信道,只有在信道空闲时才发送数据
      • 如果发生碰撞,节点等待一段随机事件后重传
    • 带碰撞避免的CSMA(CSMA/CA. Carrier Sense Multiple Access with Collision Avoidance):
      • 节点在发送前不仅监听信道,还执行”回退算法“来避免碰撞
      • 用于无线网络
    • 带碰撞检测的CSMA(CSMA/CD, Carrier Sense Multiple Access With Collision Detection):
      • 节点在发送数据前监听信道,若检测到碰撞则立即停止发送,等待随机时间后重传
      • 用于有线网络

控制访问协议:通过集中或分布式的方法控制节点对信道的访问,确保不会并发送冲突

  1. 令牌传递协议:
    • 网络中的节点按顺序传递给一个特殊的数据包(令牌)
    • 只有持有令牌的节点才能发送数据,发送完成后将令牌传递给下一个节点
    • 适用于环形或总线拓扑结构,如令牌环网(Token Ring)和FDDI(光纤分布式数据接口)
    • 令牌可能会消失,导致系统故障
  2. 轮询协议(Polling):
    • 一个主节点轮询各个从节点,询问它们是否有数据要发送
    • 从节点只有在被轮询时才能发送数据
    • 控制集中,但主节点成为单点故障

5.3.2 时隙ALOHA

是一种改进的随机访问协议,用于在共享信道上管理多个节点的数据传输。

通过将时间划分为固定长度的时隙,减少了数据碰撞的概率,从而提高了信道的利用率

基本原理

  1. 时间划分:整个事件划分成一个个相等的时隙,每个时隙的长度等于一个数据帧的传输事件
  2. 时隙同步:所有节点的时钟都同步,使得节点能够在时隙的边界开始发送数据,这种同步可以通过某种全局时钟信号实现
  3. 发送规则:每个节点在有数据要发送时,必须等待下一个时隙开始,然后在时隙边界立即发送数据

详细步骤

  1. 准备数据
  2. 等待时隙
  3. 发送数据
  4. 碰撞检测:由于所有节点都在时隙边界发送数据,若两个或更多节点在同一时隙发送数据,就会发生碰撞
  5. 确认与重传:节点等待ACK信号,如果未收到,说明发生了碰撞,节点将等待下一个随机时间后重传数据

优点

  • 效率提高:相比纯ALOHA,时隙ALOHA的信道利用率更高,因为在时隙边界发送数据减少了碰撞的概率

缺点

  • 时钟同步要求:所有节点必须精确同步时钟, 这在某些情况下可能较难实现
  • 仍有碰撞

性能分析

  • 吞吐量:在时隙ALOHA中,每个时隙只有一个节点可以成功发送数据,若有N个节点,假设每个节点在每个时隙开始时发送数据的概率为p,成功传输的概率为Np(1-p)N-1
  • 最优吞吐量:当N趋向无穷大,最大吞吐量为1/e大约为0.37,即约37%得时隙会成功传输数据

5.3.3 CSMA/CA

Carrier Sense Multiple Access with Collision Avoidance 是一种用于无线网络的多点访问协议,通过在发送数据之前避免碰撞来提高通信效率和可靠性

为什么不做CD,因为在无线网络中电磁波随距离衰减严重,不好做CD

基本原理:通过监听信道状态来避免碰撞,并在发送数据之前执行一系列操作以减少碰撞的可能性,它主要包括以下步骤:

  1. 侦听信道:节点在发送数据前首先侦听信道是否空闲
  2. 等待随机时间:如果信道空闲,节点等待一个随机时间(退避时间)后再尝试发送数据
  3. 发送RTS/CTS:在某些实现中,如IEEE 802.11,使用RTS(Request to Send) 和 CTS(Clear to Send)机制进一步减少碰撞
  4. 发送数据:确认信道空闲后,节点发送数据

详细步骤

  1. 信道侦听(Carrier Sensing):
    • 节点在发送数据之前,侦听信道是否空闲
    • 如果信道忙碌,节点等待信道变空闲
  2. 随机退避(Random Backoff):
    • 如果信道空闲,节点不会立即发送数据,而是等待一个随机的退避时间
    • 退避时间通常是一个随机数乘以基本时间单位(称为时隙时间)
    • 这样可以避免多个节点同时检测到信道空闲并立即发送数据,导致碰撞
  3. 发送RTS/CTS(可选):
    • RTS/CTS机制用于减少隐藏节点问题(即两个节点都认为信道空闲,但实际上它们之间的通信会发生碰撞)
    • 节点首先发送RTS帧,请求发送许可
    • 目标节点收到RTS后,如果信道空闲,则发送CTS帧,给予发送许可
    • 其他节点在听到RTS或CTS后,将在通信期间保持静默
  4. 数据传输:
    • 如果在等待退避时间后信道仍然空闲,节点开始发送数据帧
    • 发送完成后,接收节点发送ACK确认帧,确认成功接收数据
  5. 重传机制:
    • 如果未收到ACK帧,发送节点假设发送碰撞,将重新执行退避算法,等待更长的随机时间后重试

关键机制

  1. 退避算法:
    • 使用指数退避算法(Binary Exponential Backoff, BEB),每次碰撞后,退避窗口加倍
    • 初始退避窗口较小,随着碰撞次数增加,退避窗口变大,减少再次碰撞的概率
  2. RTS/CTS机制:
    • 通过RTS/CTS机制减少隐藏节点问题,确保发送节点和接收节点周围的所有节点都知道正在通信,避免冲突

优点

  • 减少碰撞
  • 适用于无线网络
  • 提高传输效率

缺点

  • 开销增加:RTS/CTS帧和ACK帧增加了额外的开销

延迟增加:退避时间和信道侦听增加了数据传输的延迟

5.3.34 CSMA/CD

Carrier Sense Multiple Access with Collision Detection 是一种用于有线网络的多点访问协议。它主要用于以太网,旨在提高网络传输效率和可靠性,通过在检测到碰撞后立即采取措施来减少碰撞的影响。

基本原理:CSMA/CD协议的基本原理是节点在发送数据之前侦听信道,如果信道空闲则开始发送数据,并在发送期间继续侦听信道,以检测是否发生碰撞。如果检测到碰撞,立即停止发送并采取措施来解决碰撞

详细步骤

  1. 信道侦听(Carrier Sensing ):
    • 节点在发送数据之前,首先侦听信道是否空闲
    • 如果信道忙碌,节点等待信道变空闲再继续
  2. 发送数据:
    • 如果信道空闲,节点开始发送数据
    • 在发送数据的过程中,节点继续侦听信道以检测是否发生碰撞
  3. 碰撞检测:
    • 如果节点在发送数据时检测到信道上有其他信号干扰, 表示发生了碰撞
    • 检测碰撞的标志包括信号幅度的显著变化或在发送过程中接收到其他信号
  4. 碰撞处理(Collision Handling):
    • 检测到碰撞后,节点立即停止发送数据
    • 节点发送一个短暂的干扰信号(也称”碰撞信号“),以通知网络中其他节点发生了碰撞
  5. 随机退避:
    • 在发送碰撞信号后,节点等待一个随机的退避时间,再次尝试发送数据
    • 退避时间通常是一个随机数乘以基本时间单位(称为时隙时间)
    • 使用指数退避算法(Binary Exponential Backoff, BEB),每次碰撞后,退避窗口加倍,以减少再次碰撞的概率

优点

  • 碰撞检测:通过检测碰撞立即采取措施,可以快速响应并减少碰撞带来的影响
  • 高效

缺点

  • 有限距离:由于碰撞检测需要在信号传播延迟内完成,因此只适用于距离有限的有限网络
  • 碰撞后开销:发生碰撞后需要退避时间,增加了延迟和开销

5.4 LANs

5.4.1 MAC

MAC地址

  1. 什么是MAC地址:
    • MAC地址(Media Access Control Address):是网路接口卡(NIC)的硬件地址,用于唯一标识网络设备。每个网络接口(如以太网卡、无线网卡)都有一个唯一的MAC地址
    • 格式:MAC地址通常由48位组成,通常标识为12个十六进制字符(如:00:1A:2B:3C:4D:5E),中间以冒号或连字符分隔。
    • 广播地址:FF:FF:FF:FF:FF:FF
  2. 作用:
    • 局域网通信:MAC地址在LAN中用于数据帧的源地址和目的地址,确保数据帧能在同一LAN内正确传输
    • 硬件标识:它是硬件层次的地址,于IP地址不同,MAC地址在设备制造时烧录进网卡,是全球唯一的
  3. 工作原理:
    • 数据帧传输:当一台设备要向同一局域网内的另一台设备发送数据时,它使用目标设备的MAC地址作为数据帧的目的地址。网络交换机根据目的MAC地址将数据帧转发到目标设备

5.4.2 ARP

ARP(Address Resolution Protocol)协议

  1. 定义:是一种用于将IP地址解析为MAC地址的协议。在网络通信中,设备需要知道目标设备的MAC地址才能发送数据帧,而ARP协议实现了从IP地址到MAC地址的映射
  2. 工作过程:
    • ARP请求:当设备A需要知道设备B的MAC地址时,首先在本地ARP缓存中查找。如果找不到,设备A会发送一个广播ARP请求帧到LAN,询问“谁是IP地址的为x.x.x.x的设备?请提供你的MAC地址”
    • ARP响应:网络中所有设备都会收到这个ARP请求帧,只有IP地址为x.x.x.x的设备B会响应。设备B发送一个ARP响应帧,包含其MAC地址,直接回复给设备A
    • 缓存结果:设备A收到ARP响应后,将IP地址与MAC地址的对应关系存入本地ARP缓存,以便下次直接使用,减少网络流量
  3. ARP缓存:
    • 缓存机制:设备会将最近解析过的IP地址和MAC地址对存储在本地ARP缓存中,一段时间后缓存条目会过期,需要重新进行ARP解析
    • 缓存刷新:ARP缓存定期刷新以确保地址映射的准确性,防止因网络拓扑变化而导致的通信失败

ARP协议的类型

  • ARP请求:广播消息,用于查询某个IP地址对应的MAC地址
  • ARP响应:单播消息,用于恢复ARP请求,提供对应的MAC地址
  • RARP(Reverse ARP):反向ARP协议,用于查询MAC地址对应的IP地址(已经很少使用,主要被DHCP取代)
  • Proxy ARP:代理ARP协议,用于路由器代替另一个设备回应ARP请求,实现跨网段的通信

ARP协议提供了网络层和链路层之间的地址转换,使得基于IP的网络哦层通信得以在物理链路层上进行

5.4.3 交换机

是链路层中的重要网络设备,用于将多个设备连接到一个LAN,并哦给通过智能数据转发机提高网络效率

基本概念

  1. 什么是交换机:工作在链路层的网络设备,用于在多个网络设备之间转发数据帧。它根据每个设备的MAC地址来确定数据帧的转发路径,从而提高网络效率和性能
  2. 主要功能:
    • 帧转发和过滤:根据目标MAC地址,将数据帧转发到正确的端口,避免不必要的网络流量
    • MAC地址学习:通过读取数据帧中的源MAC地址,建立并维护一个MAC地址表,用于知道帧转发
    • 全双工通信:支持全双工模式,允许设备同时进行发送和接收操作,减少冲突,提高吞吐量

工作原理

  1. MAC地址表:交换机通过读取数据帧中的源MAC地址和相应的端口号,动态地构建和维护一个MAC地址表(也称为CAM表,Content Addressable Memory表)。这个表用于记录每个MAC地址对应的交换机端口
  2. 帧转发过程:
    • 接收帧:交换机从一个端口接收到数据帧
    • 检查MAC地址表:
      • 源MAC地址:交换机检查帧的源MAC地址,并将其记录到MAC地址表中,关联到接收帧的端口
      • 目标MAC地址:交换机查找MAC地址表,查看目标MAC地址对应的端口
    • 转发或丢弃:
      • 已知目标地址:如果目标MAC地址在MAC地址表中,交换机将数据帧转发到对应的端口
      • 未知目标地址:如果目标MAC地址不在表中,交换机将帧广播到除接收端口以外的所有端口
      • 自环:如果源和目标MAC地址相同,帧被丢弃以防止环路

交换机的类型

  1. 不可管理型交换机:
    • 特点:即插即用,无需配置
    • 使用场景:家庭网络、小型办公室
    • 功能:基本的帧转发和MAC地址学习,不提供高级功能
  2. 可管理型交换机:
    • 特点:可以通过命令行接口(CLI)或Web界面进行配置
    • 适用场景:企业网络、大型数据中心
    • 功能:支持VLAN、链路聚合、QoS(质量服务)、SNMP(简单网络管理协议)等高级网络管理功能

交换机高级功能

  • VLAN
    • 定义:通过逻辑分割,创建多个虚拟网络,提升网络安全性和管理灵活性
    • 作用:隔离广播域,减少广播流量,提高网络性能和安全性
  • 链路聚合(Link Aggregation):
    • 定义:将多个物理链路聚合为一条逻辑链路,提供更高的带宽和冗余
    • 作用:提高带宽利用率和链路冗余性,防止单点故障
  • QoS:
    • 定义:优先处理关键流量,确保网络性能
    • 作用:为语音、视频等关键应用提供优先级,确保其稳定运行
  • STP(生成树协议)
    • 定义:防止网络环路,确保网络拓扑无环
    • 作用:在冗余链路存在时,阻塞多余链路,形成无环路的生成树,防止广播风暴

交换机与其他网络设备的对比

  • 交换机和集线器(Hub)
    • 交换机:智能设备,基于MAC地址表进行转发,提供高效的数据传输
    • 集线器:非智能设备,将受到的数据帧广播道所有端口,导致网络冲突和低效
  • 交换机和路由器
    • 交换机:工作在链路层,用于局域网内部的帧转发
    • 路由器:工作在网络层,用于不同网络之间的数据包转发,基于IP地址进行路由选择

5.4.4 以太帧

以太帧是以太网中用于数据传输的基本单位,定义了数据在LAN中如何传输。

基本结构

  1. 前导码(Preamble):
    • 长度:7字节
    • 作用:用于同步发送方和接收方的时钟信号,帮助接收设备检测到帧的开始
  2. 帧起始定界符(SFD, Strat Frame Delimiter):
    • 长度:1字节
    • 作用:标识帧的开始,紧跟在前导码之后
  3. 目的地址(Destination MAC Address):
    • 长度:6字节
    • 内容:目标设备的MAC地址
    • 作用:指定接收该帧的网络设备,可以是单薄地址、广播地址或组播地址
  4. 源地址(Source MAC Address):
    • 长度:6字节
    • 内容:发送设备的MAC地址
    • 作用:标识发送该帧的网络设备
  5. 类型/长度字段(Type/Length):
    • 长度:2字节
    • 内容:
      • 类型字段:用于以太网Ⅱ帧,表示上层协议类型(IPv4为0x0800,IPv6为0x0806)
      • 长度字段:用于IEEE 802.3帧,表示数据字段的长度
    • 作用:指示帧的数据部分是何种协议,或数据部分长度
  6. 数据和填充:
    • 长度:46到1500字节
    • 内容:实际传输的数据,如果数据不足46字节,会填充字节使帧的最小长度达到64字节(含头部和校验和序列)
    • 作用:承载实际传输的数据
  7. 帧校验序列(FCS, Frame Check Sequence):
    • 长度:4字节
    • 内容:CRC码
    • 作用:用于校验帧在传输过程中是否发生错误。发送方计算并添加CRC校验码,接收方根据接收到的数据重新计算CRC并与FCS字段比较,如果不匹配,则认为帧有错误并丢弃

以太帧类型

  1. 以太网Ⅱ帧:
    • 使用类型字段来指示上层协议类型
    • 类型字段值大于1500(十六进制0x6000)
    • 广泛应用于现代以太网
  2. IEEE 802.3帧
    • 使用长度字段来指示数据部分的长度
    • 长度字段值小于等于1500(十六进制0x05DC)
    • IEEE 802.2 LLC(逻辑链路控制)头部通常紧随其后,用于进一步指示上层协议

最小和最大长度

  • 最小长度:64字节
  • 最大长度:1518字节,对于以太网Ⅱ帧,数据部分最大为1500字节

5.5 链路虚拟化

本科不教的内容

5.6 数据中心网络

也不做深入探讨

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值