计算机网络简要复习纲要(前六章)

计网《自顶而下》简要书本概述(不知道要考什么内容的复习篇,只有前六章,截止到链路层,是复习计网的过程中根据书上内容整理的)

written by 冯海芮

文章目录

第一章 计算机网络和因特网

1.1 简要概念解释
端系统(主机)

​ 主机可以分为客户端(client)和服务端(server)

通信链路 传输速率(比特/秒度量)
分组交换机

​ 典型两类型:路由器(router)、链路层交换机(link-layer switch)

协议(protocol)

​ 定义:协议定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送和/或接收一条报文或其他事件所采取的动作

​ 典型两重要协议:TCP(传输控制协议)、IP(网际协议)

​ 协议标准:RFC(请求评论),定义HTTP(用于web)、SMTP(用于电子邮件)等

​ 涉及两个或多个远程通信实体的所有活动都受协议的制约

分布式应用程序

​ 涉及多个相互交换数据的端系统的应用程序,如王者荣耀

套接字接口

​ 端系统提供,规定了在一个端系统中运行的程序向因特网基础设施请求往另一个端系统的特定程序交付数据的方式,是一套发送程序必须遵循的规则集合。

1.2 网络边缘
接入网

​ 边缘路由器:端系统到任意其他远程端系统路径上的第一台路由器

家庭接入:DSL、电缆、FTTH、拨号和卫星

​ 美国住宅接入最流行的两种:数字用户线(DSL)和电缆;DSL借助家庭电话线,电缆借助有线电视

​ 光纤到户(FTTH):本地中心局直接提供一条光纤路径。可分为直接光纤(一户一光纤)、主动光纤网络(AON)和被动光纤网络(PON)

企业(和家庭)接入:以太网和WIFI

广域无线接入:3G和LTE

​ 包括现行的4G和5G技术,都是典型的广域无线接入

物理媒体

​ 分为两种类型:导引型媒体(电波沿着固体媒体前行,如光缆,双绞铜线,光纤)和非导引型媒体(电波在空气或外层空间传播,如无线局域网和卫星频道)。

1.3 网络核心

通过网络链路和交换机交换数据的两种基本方法:分组交换、电路交换。

分组交换

​ 报文(message):能够包含协议设计者需要的任何东西,如执行一种控制技能、包含电子数据等。

​ 分组(packet):源端将长报文划分为较小的数据块,这样较小的数据块就是分组。分组以链路最大传输速率通过链路。

存储转发传输

​ 定义:分组交换机在链路输入端使用的一种机制。指在交换机开始向输出链路传输该分组的第一个比特之前,必须接收到完整的该分组。简单来说,就是分组交换机在一个分组进行传输的过程中,必须先缓存该分组的比特。仅当分组交换器已经接收完该分组所有比特时才开始向出链路进行传输该分组。

​ 计算源到目的端传输整个分组的时间(忽略传播时延,也就是传播所需要的时间):以图为例,一个由两个端系统和一个路由器形成的简单网络

端系统和路由器形成的简单网络

​ 源从0时刻开始传播,路由器于时刻L/R秒接收完整个分组,才开始向目的地进行分组传输;目的地于时刻2L/R秒接收完整个分组。

​ 以此类推,源发送三个分组到目的端,目的端接收完三个分组的总时延是4L/R;同理,若源和目的端之间有n个路由器,则源到目的端的总时延是(n+1)*L/R。

排队时延和分组丢失

​ 输出缓存(输出队列):每个分组交换器都有多条链路与之相连,对每一条相连的链路,分组交换器具有一个输出缓存用于存储分组交换机即将发往那条链路的分组。

​ 排队时延:若分组需要传输到某一链路,但该链路正在传输其他分组时,该分组需要在输出缓存中进行等待——等待时间也就是输出缓存的排队时延。

​ 分组丢失(丢包):到达的分组或正在排队的分组之一被丢弃或丢失。

转发表和路由选择协议

​ 转发表:用于将目的地址(或目的地址的一部分)映射成为输出链路。

​ 转发表工作原理:分组到达路由器后,路由器检查分组的目的地址,并用目的地址搜索其转发表,从而发现适当的出链路,将分组导向该出链路。

​ 路由选择协议:用于自动设置转发表。

电路交换

​ 与分组交换的不同:在端系统间通信会话期间,预留了端系统间沿路径通信所需要的资源。(期间链路不会被占用,不产生等待时延)

电路交换网络的复用

​ 通过频分复用或时分复用实现链路中的电路。

​ 频分复用(FDM)中,链路的频谱由跨越链路创建的所有连接共享。在连接期间链路为每一个连接专用一个频段。(例如无线电广播FM101.7四川交通广播)。频段的宽度称为带宽。

​ 时分复用(TDM)中,时间被划为固定的帧,每个帧被划为固定数量的时隙。通过链路创建连接时,在每个帧中为连接指定一个时隙,该时隙由该连接专用传输数据。

1.4 分组交换网络的时延、丢包和吞吐量
时延概述

​ 时延分为多种,包括节点处理时延、排队时延、传输时延和传播时延。时延总体累计起来叫为节点总时延。

​ 处理时延:检查分组头部和决定分组导向何处所需要的时间,检查比特级差错所需要的时间等

​ 排队时延:在队列中,分组在链路上等待传输所需要的时间。(一般为毫秒到微妙量级)

​ 传输时延:将分组的所有比特推向链路传输所需要的时间。传输时延=L/R,L(比特)为分组长度,R(bps)为链路传输速率。

​ 传播时延:链路起点到链路终点分组交换器之间传播所需要的时间,取决于链路的物理媒体(双绞铜线、光纤等)

​ 总时延 = 处理时延 + 排队时延 + 传输时延 + 传播时延。

排队时延和丢包

​ 排队时延的大小取决于流量到达队列的速率、链路的传播速率和到达流量的性质。

​ 若所有分组到达队列的平均速率 > 传输速率,则队列会趋向于无限增加。我们将前者与后者的比称作流量强度,故设计系统时流量强度不能大于1。流量强度越接近1,平均排队时延越大,平均排队时延的增大比例也越大。

​ 在现实中,因为一个链路前的队列只有有限容量(输出缓存有上限),所以当流量强度接近1时,若到达分组发现满队列,就会因为没有空间存储该分组而将分组丢弃,也就是丢包。

吞吐量

​ 计算机网络的性能测度有时延、丢包和端到端吞吐量。

​ 瞬时吞吐量:接收方主机接收该文件的瞬时速率。

​ 平均吞吐量:接收某一文件用了t秒,文件大小g比特,则平均吞吐量为g/s(bps)。

1.5 协议层次及其服务模型
协议分层

​ 网络设计者以分层的方式,组织协议以及实现这些协议的网络硬件和软件。每个协议属于层次之一。一个协议层总能够用软件、硬件或两者结合的方式实现。

​ 协议分层的缺点:①一个层次可能冗余有较低层的功能;②某层的功能可能需要仅在其它层才出现的信息。

​ 各层的所有协议称为协议栈。因特网的协议栈由五个层次组成:物理层、链路层、网络层、运输层和应用层。

​ 值得注意的是,因特协议栈并非唯一的协议栈,例如20世纪70年代提出的OSI模型,也叫开放系统互联模型,他就多了表示层和会话层两个层次。具体两个层次的作用不过多赘述。

协议栈层次结构

应用层

​ 应用层是网络应用程序以及他们的应用层协议存留的地方,包括有许多协议,例如HTTP(提供web文档的请求和传送),SMTP(提供电子邮件报文的传输)和FTP(提供两个端系统之间的文件传送)。应用层协议分布在多个端系统上。我们将一个端系统中的应用程序使用协议与另一个端系统的应用程序交换的信息分组称为报文。

运输层

​ 运输层在应用程序端点之间传送应用层报文。因特网中有两种运输协议——TCP和UDP,任意使用两者之一都可以运输应用层报文。运输层的分组在本书中称为报文段。其中TCP提供面向连接服务,包括应用层报文向目的地的确保传递和流量控制(发送方与接收方的速率匹配),同时将长报文划分为短报文,提供拥塞控制机制,用来抑制拥塞时的传输效率。UDP提供无连接服务,是不提供不必要服务的服务,没有可靠性、流量控制和拥塞控制机制。

网络层

​ 网络层负责将网络层的分组(也叫作数据报)从主机一端移动到另一主机端。运输层协议会向网络层递交运输层报文段和目的地址。网络层协议包括IP(也叫网际协议,定义在数据报中的各个字段以及端系统和路由器如何作用于这些字段),也包括路由选择协议等

链路层

​ 链路层的服务将分组从一个节点(主机或路由器)移动到路径上的下一个节点。在每一个节点,网络层将数据报下传给链路层,链路层沿着链路将数据报传递给下一个节点,在下一个节点链路层将数据报上传给上一个节点。我们将链路层分组称作

物理层

​ 物理层的任务是将链路层的帧中的一个个比特从节点移动到下一个节点。该层协议仍与链路有关,并进一步与链路的实际传输媒体相关。

封装

​ 下图为源端到目的端传输报文的物理路径图,图中显示了它所经过的协议。

源端到目的端的路径图

​ 封装:应用层报文被传送给运输层后,运输层会收取并加上运输层首部消息被运输层使用,同时共同构成运输层报文段;这一过程就是封装。运输层首部消息包括差错监测位消息等等。同理,网络层会在运输层报文段的基础上添加网络层首部消息形成网络层数据报;链路层会在网络层数据报的基础上添加链路层首部消息形成链路层帧。因此,一个分组往往含有两个部分——首部字段和有效载荷字段。有效载荷字段来自上一层的分组。

第二章 应用层

2.1 应用层协议原理
体系结构

​ 应用层体系结构规定了如何在各种端系统上组织该应用系统。目前主流的两种体系结构:客户—服务器体系结构和对等(P2P)体系结构。

​ 客户—服务器体系结构:(典型例子web应用程序)有一个始终打开的主机作为服务器,接受许多来自其他的客户主机的请求,客户之间不直接通信。这种体系结构的服务器往往是配备大量主机的数据中心,否则容易出现单独服务器跟不上所有客户请求的情况。

​ P2P体系结构:在这种结构中,应用程序在间断连接的主机之间直接通信,这些主机称为对等方。P2P具有自扩展性,每增加一个对等方虽然会因为请求文件产生更多工作负载,但也会因为能够给其他对等方分发文件为系统增加服务能力。但因为其高度非集中式结构,面临安全性、性能和可靠性的问题。

进程通信

​ 进行通信的是进程而不是程序。两个不同端系统上的进程通过跨越计算机网络交换报文而相互通信,发送进程生成报文并向网络发送;接收进程接收报文并可能通过回送报文进行响应。

客户和进程服务器

​ 定义:在一对进程之间的通信场景中,发起通信(即在会话开始时发起与其他进程的联系)的进程被标识为客户;在会话开始时等待联系的进程标识为服务器

进程与计算机网络之间的接口

​ 进程通过一个套接字的软件接口向网络发送报文和从网络接收报文,如图所示。套接字是同一台主机内应用层和运输层之间的接口,也称作为应用程序编程接口。

​ 应用程序开发者只能控制套接字在应用层的内容。

套接字

进程寻址

​ 因特网中,主机由IP地址标识。

​ IP地址:32比特的量,能够唯一标识主机。

​ 目的端口号:用于发送进程制定运行在接收主机的接收进程。目前已经给流行的应用分配了特定的端口号,如web为端口号80等。

可供应用程序使用的运输服务

​ 运输层协议不止一种,用户开发应用时,需要选择一种可用的特定运输层协议。对应用程序的服务要求大致分为四个方面:可靠数据运输、吞吐量、定时和安全性。

可靠数据运输

​ 定义:确保由应用程序的一端发送的数据正确、完整地交付给了应用程序的另一端的服务。

​ 诸如电子邮件、web文档传输、金融应用等都需要这样的服务,而像交谈式音频/视频相对能够承受一定量的数据丢失。

吞吐量

​ 可用吞吐量:发送进程能够向接收进程交付比特的速率。可用吞吐量会随着网络路径带宽、会话的到达与离开而呈现时间波动。

​ 带宽敏感应用:具有吞吐量要求的应用,要求可用吞吐量在一定速率之上(使用了一种运输层协议能够以特定的速率提供确保的可用吞吐量的服务)

​ 弹性应用:根据当时可用的带宽的多少利用可供使用的带宽的应用。(诸如电子邮件、文件传输、web传送等)

定时

​ 简单来说,就是保证时延较低。对非实时应用,对端对端时延没有明确约束但较低时延更好。

安全性

​ 安全性服务,比如说加密发送进程传输的数据等。

运输服务

​ 因特网为应用程序一般提供两个运输层协议——TCP和UDP。TCP和UDP都没有提供加密机制,因此其明文口令极可能被中间链路嗅探,因此产生了SSL(TCP的加强版,且加强是在应用层实现的)。SSL在能实现TCP的功能之外,额外提供了关键的进程到进程的安全性服务

TCP服务

​ TCP服务模型主要包括面向连接服务和可靠数据传输服务,此外具有拥塞控制机制,能够在网络拥堵时控制发送进程的速率,限制TCP连接,达到公平分享网络的目的

UDP服务

​ UDP服务模型不提供不必要服务,是仅提供最小服务的轻量级运输协议,无连接(不保证进程到达,提供不可靠数据传送)也没有拥塞机制。

应用层协议

​ 应用层协议定义了运行在不同端系统的应用程序进程如何互相传递报文,包括:

  1. 交换的报文类型,例如请求报文和响应报文
  2. 各种报文类型的语法,例如报文中的各个字段以及这些字段是怎么描述的
  3. 字段的语义,也就是字段中信息的含义
  4. 确定一个进程合适以及如何发送报文,对报文进行响应的规则
2.2 Web和HTTP
HTTP概况

​ Web的应用层协议是超文本传输协议(HTTP)

​ Web页面(也叫Web文档)由对象组成,一个对象只是一个文件(如JPEG图形,HTML文件等,且这些文件可以通过URL寻址)。多事Web页面含有一个HTML基本文件和几个引用对象。

​ Web浏览器实现了HTTP的客户端,Web服务器实现了HTTP的服务端。。

​ HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。

​ HTTP使用TCP作为它的支撑运输层协议。因此,HTTP不用担心数据丢失和TCP从数据丢失和乱序故障中恢复的细节。

​ HTTP服务器不保存关于客户的状态信息(任何信息),是无状态协议

​ Web服务器总是打开的,并由一个固定IP地址接收请求

非持续连接和持续连接

​ 非持续连接:在客户发出一系列请求且服务器对每个请求进行响应时,每个请求/响应对都分别经过一个单独的TCP连接发送

​ 持续连接:在上述情况中,一系列请求及其响应全部都经过相同的TCP连接发送

往返时间(RTT):一个短分组从客户端到服务器然后再返回客户端所花费的时间。(包括分组传播时延、排队时延和处理时延)

​ 非持续时延的缺点:①必须为每一个请求的对象建立和维护一个全新的连接,对每个连接都要分配TCP缓冲区和保持TCP变量,带来Web服务器负担 ②每个对象都会经受两倍RTT的交付时延,一个RTT用来创建连接,另一个用来请求和接收对象,时间较冗长

HTTP报文格式

​ HTTP规范(RFC 1945;RFC 2616;RFC 7540)包含了对HTTP报文格式的定义。报文分两种:请求报文和响应报文。

HTTP请求报文

​ 如图为HTTP请求报文的一个典型案例

HTTP请求报文格式

​ HTTP请求报文的第一行叫做请求行,后继的行叫做首部行

​ 请求行有三个字段:方法字段,URL字段和HTTP版本字段。方法字段包括GET、POST、HEAD、PUT和DELETE。绝大多数HTTP请求报文使用GET。GET方法请求时,URL字段带有请求对象的表识。版本字段则显示浏览器实现的是HTTP/1.1版本。

​ 首部行:HOST用来指明对象所在主机,Connection表示服务器使用的连接状态(如果值为close,表示发送完请求对象后关闭连接,不采用持续连接),User-agent用来指明用户代理,也就是服务器发送请求的浏览器类型(Mozilla/5.0指的是Firefox浏览器),Accept-language便是用户想要得到的该对象的语言版本,如fr表示法语版本。

​ 如图是HTTP请求报文的通用格式:

HTTP请求报文通用格式

GET方法请求时:实体体为空

HEAD方法请求时:服务器会用一个HTTP报文响应,但不返回请求对象,常用来调试跟踪

POST方法请求时:常在提交表单时使用,实体体包含用户在表单中输入的值

PUT方法请求时:常与Web发行工具联合使用,允许用户上传对象到指定路径

DELETE方法请求时:允许用户或者应用程序删除Web服务器上的对象

HTTP响应报文

​ 如图为HTTP响应报文的一个典型案例

HTTP响应报文案例

​ 与HTTP请求报文相似,HTTP响应报文包含三个部分:初始状态行、首部行和实体体。

​ 状态行有三个字段:协议版本字段(图中版本为HTTP/1.1),状态码(图中状态码为200)和相应状态信息(OK)。如案例中所显示的意思就是服务器使用的版本为HTTP/1.1,目前使用一切正常。

​ 实体体是报文的主要部分,它包含了报文所请求对象的本身。

​ 首部行:Connection字段表示告诉客户发完报文之后连接的状态(其中close表示关闭此连接),Date首部行指示服务器产生并发送响应报文的时间;Server首部行指示报文的提供端(如例子中显示该报文是由仪态Apache web服务器产生的,类似于请求报文的user-agent);Last-Modified首部行指示对象创建或最后一次修改的时间;Content-Length首部行指示被发送对象的字节数;Content-Type首部行指示实体体的对象类型(如案例中就是HTML文本)

​ 如图是HTTP响应报文的通用格式:

HTTP响应报文通用格式

​ 常见状态码和相关短语:

​ ①200 OK:请求成功,信息随着返回的响应报文一起返回

​ ②301 Moved Permanently:请求的对象已经被永久转移,新的URL定义在响应报文的Location首部行中,用户会自动获取新的URL

​ ③400 Bad Request:通用差错代码,指示请求不能被服务器理解

​ ④404 Not Found:被请求的文档不在服务器上

​ ⑤505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本

用户与服务器之间的交互:cookie

​ HTTP服务器是无状态的,但web站点希望有对用户的识别(例如限制访问或希望与用户身份进行联系),进而就使用了cookie。

​ cookie在[RFC 6265]中定义,允许站点对用户进行追踪。

​ cookie技术有4个组件:①HTTP响应报文中的一个cookie首部行 ②HTTP请求报文中的一个cookie首部行 ③在用户端系统中保留的一个cookie文件,并由浏览器进行管理 ④位于Web站点的后端数据库

​ cookie可以用于标识一个用户。用户首次访问站点时,需要提供一个用户标识;在后继回话中。浏览器向服务器传递cookie首部行从而向服务器标识用户,在无状态的HTTP之上建立用户会话层

Web缓存

​ Web缓存器(代理服务器):能够代表初始Web服务器来满足HTTP请求的网络实体,具有自己的磁盘存储空间并能够在存储空间中保存最近请求过的副本

​ 部署Web缓存器的原因:①大大减少客户请求的响应时间 ②大大减少一个机构的接入链路到因特网的通信量,降低带宽费用

条件GET方法

​ 引入高速缓存之后,会有例如缓存器中存放的对象副本陈旧,在服务器中的对应对象已经被修改的情况。为解决这种情况的产生,HTTP引入条件GET方法机制,用于缓存器证实它的对象是最新的。

​ HTTP请求报文为条件GET报文的条件:①请求报文使用GET方法 ②请求报文中包含“If-Modified-since: ”首部行。

​ 响应报文中,若状态行为304 Not Modified,则缓存器可以使用该对象,能向请求的浏览器转发该缓存的对象副本。

2.3 因特网中的电子邮件

​ 因特网电子邮件系统有三个主要组成部分:用户代理、邮件服务器和简单邮件传输协议(SMTP)。

​ SMTP是因特网电子邮件的主要应用层协议,使用TCP可靠数据传输传输协议。

SMTP

​ SMTP是因特网电子邮件的核心,用于从发送方的邮件服务器到接收方的邮件服务器。

​ SMTP限制邮件报文的体部分转化为简单的7位ASCII码。

​ SMTP不会使用中间邮件服务器发送邮件,也不会在中间的邮件服务器存留。在发送失败时会不断在发送服务器上进行新的发送尝试直到成功或删除邮件并告诉发送方

与HTTP的对比

​ HTTP从web服务器向web客户(通常为浏览器)传送文件;SMTP从一个邮件服务器向另一个邮件服务器传送文件。当两者进行文件传送时,持续的HTTP和SMTP都是用持续连接。

​ 区别1: HTTP是一个拉协议,在方便时,在web服务器上装载信息,用户借助HTTP从服务器上拉取这些信息;SMTP是一个推协议,是发送邮件服务器吧文件推向接收邮件服务器。

​ 区别2: SMTP要求每个报文(包括实体体)都采用7比特ASCII码,即使包含非ASCII码也需要重新编码,而HTTP则没有这个限制。

​ 区别3:在处理一个既包含文本又包含图形或其他媒体类型的文档时,HTTP将每个对象封装到它自己的HTTP响应报文中,而SMTP则是把所有报文对象放在一个报文中。

邮件报文格式

​ 首部行必须包括“From: ”和“To: ”首部行,部分也包含“Subject: ”首部行或其它首部行。这些首部行是邮件报文本身的一部分。

​ 首部行结束后,紧接着一个空行,然后是ASCII码表示的报文体。

​ From首部行表示来自的服务器;To首部行表示接收的服务器;Subject首部行表示报文的主题

邮件访问协议

​ 邮件访问采用客户-服务器体系结构。客户-服务器体系结构

​ 为解决接受客户的PC端(或其它用户代理)从接收邮件服务器中拉取自己的邮件,我们借助一些特殊的邮件访问协议解决,如第三版的邮局协议(POP3)、因特网邮件访问协议(IMAP)以及HTTP等。

POP3

​ POP3协议主要由两种配置方式:下载并保留和下载并删除。

​ 这种协议不会给用户提供任何创建远程文件夹并为报文指派文件夹的方法

IMAP

​ IMAP协议相对于POP3协议更为复杂,能够为用户提供创建文件夹以及将文件夹从一个移动到另一个的操作;此外,它允许用户代理获取报文某些部分的命令(例如我只要一个邮件中的文字部分,不要其音频)

基于web的电子邮件

​ 基于web的电子邮件的用户代理与服务器之间可以用HTTP而不是POP3或IMAP,但是邮件服务器之间还是SMTP。

2.4 DNS:因特网的目录服务

​ 主机的两种标识方式:主机名(www.facebook.com)、IP地址。

DNS提供的服务

​ 域名系统(DNS)是 ①一个由分层的DNS服务器实现的分布式数据库 ②一个使得主机能够查询分布式数据库的应用层协议。

​ DNS能够进行主机名到IP地址的转换,DNS协议运行在UDP上,其服务器一般是运行BIND软件的UNIX机器。。

​ DNS虽然是应用层协议,但通常被其他应用层协议所使用。

​ 除了进行主机名到IP地址的转换,DNS还提供其他服务,如①主机别名 ②邮件服务器别名 ③负载分配

主机别名

​ 有复杂主机名的主机可能拥有几个别名,此时复杂主机名也叫规范主机名,DNS可以获得主机别名对应的规范主机名以及主机的IP地址。

邮件服务器别名

​ 邮件服务器的主机名可能十分复杂,有着更为简洁的邮件服务器别名(如yahoo.com),电子邮件应用程序可以借助DNS,对提供的主机别名进行解析,从而获得主机的规范主机名及其IP地址。

负载分配

​ DNS可用于在冗余的服务器之间进行负载分配。一个站点被冗余的分布在多台服务器上,每台服务器运行在不同的端系统上,有着不同的IP地址。这些IP地址的集合与同一个规范主机名相联系,而DNS数据库中存储着这些IP地址集合。当客户向某集合的名字发出请求时,DNS会让整个IP地址集合响应,但在每个回答中循环地址次序。

DNS工作机理概述

​ 一种简单设计是因特网上只使用一种DNS服务器,这种服务器包含所有映射。但这种集中式设计存在巨大问题:①单点故障,一旦出问题,因特网随之崩溃 ②通信容量,一个服务器需要接受所有主机的HTTP请求报文和电子邮件报文服务 ③远距离集中式,设置在任意一点,地球上对应的较远的点就会面临严重时延 ④维护,这个服务器需要经常为新添加的主机进行更新。

​ 从上述可知,集中式数据库对于DNS来说完全不具有可扩展能力,因此,DNS采用了分布式设计方案。

分布式、层次数据库

​ DNS采用大量DNS服务器,以层次方式组织并分布在了全世界范围。没有一台DNS服务器具有所有主机的映射,但所有映射分布在全球范围内的DNS服务器上。DNS服务器大致有三种——根DNS服务器、顶级域(TLD)DNS服务器和权威DNS服务器。

DNS服务器

​ 简单举例,我要找www.amazon.com的IP地址,我会先与根服务器之一取得联系——返回com的顶级域DNS服务器的IP地址,随后与TLD服务器取得联系,返回amazon.com的权威服务器的IP地址,最后与amazon.com的权威服务器联系,返回www.amazon.com的IP地址。

  1. 根服务器:根服务器提供TLD服务器的IP地址
  2. TLD服务器:对于每个顶级域和国家的顶级域都有TLD服务器或集群。常见的有例如com,org,edu,gov,uk,fr,ca等
  3. 权威服务器:具有公众可访问主机的组织机构必须提供公众可访问的DNS记录,这些记录将主机名字映射到IP地址。
  4. 本地DNS服务器:本地DNS服务器严格意义上不属于服务器的层次结构,但对于层次结构至关重要。每个ISP(网络供应商)都具有一个本地DNS服务器,当主机与ISP连接时,该ISP提供一个主机的IP地址。本地DNS服务器起着代理的作用,并将DNS请求转发到DNS服务器层次结构中。

递归查询与迭代查询:在DNS查询的实践中,通常遵循从请求主机到本地服务器是递归查询;其余查询是迭代查询的模式。

DNS缓存

​ 为改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS广泛使用了缓存技术。

​ 缓存原理:在一个请求链中,当某DNS服务器接收到一个DNS回答(例如包含某主机名到IP地址的映射)时,他能够将映射缓存到本地服务器中。(这种映射不是永久的,所以DNS服务器会定期丢弃缓存信息)

DNS记录与报文

​ 共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(RR)。RR提供了主机名到IP地址的映射,每个DNS回答报文包含一条或多条资源记录。

​ 资源记录是一个四元组,结构形式为[Name,Value,Type,TTL]。在这样的四元组中,TTL表示记录的生成时间(同时决定了资源记录应当从缓存中删除的时间),而Name值和Value值都取决于Type值。

  1. 如果Type=A,则Name为主机名,Value为主机名对应的IP地址,这个资源记录提供了标准的主机名到IP地址的映射
  2. 如果Type=NS,则Name为域,Value值为如何知道该域中主机IP地址的权威DNS服务器的主机名,这个记录用于沿着查询链来路由DNS查询
  3. 如果Type=CNAME,则Name为主机名的别名,Value为Name的主机的规范主机名。这个记录用于向查询的主机提供一个主机名对应的规范主机名
  4. 如果Type=MX,则Name为邮件服务器的别名,Value为Name的邮件服务器的规范主机名。
2.5 P2P文件分发

​ 上述的应用协议(包括HTTP,DNS和电子邮件)都采用的客户-服务器体系结构,极大依赖于总是打开的基础设施服务器。

​ 研究一个自然的P2P应用——从单一服务器向大量主机(称为对等方)分发一个大文件

P2P体系结构的可扩展性

​ 分发时间:所有N个对等方得到该大文件的副本所需要的时间。简化假设:因特网核心具有足够带宽(所有瓶颈都在网络接入链路)、服务器和客户没有参与其他网络应用(上传和下载访问带宽能全部用于分发该文件)。

​ 我们假设服务器上载速率为us,第i对等方的上载速率为ui;服务器下载速率为ds,第i对等方的下载速率为di;文件总比特数为F,N为需要该文件的对等方的数目。

​ 对于客户-服务器体系,分发时间≥max{NF/us,F/dmin},其中dmin指的是具有最小下载速率的对等方的下载速率,其值=min{d1,d2,d3,······dN}。

​ 对于P2P结构,每个对等方可以帮助服务器分发该文件,当对等方接收到某些文件数据时,它能够使用自己的上载能力重新将数据分发给其他对等方。由此可知分发时间≥max{F/us,F/dmin,NF/(us+u1+····+un)}

BitTorrent

​ BitTorrent是一种用于文件分发的流行P2P协议。

​ 洪流(torrent):指参与一个特定文件分发的所有对等方的集合

​ 块(chunk):在一个洪流中的对等方彼此下载等长的的文件块,典型块长度为256KB。首次加入洪流的对等方没有块,随着时间累积不断增加块(可能在仅有块的子集时离开洪流)

​ 追踪器:一个重要基础设施节点。当对等方加入洪流时,向追踪器注册自己,并周期性告诉追踪器他在洪流中。通过此方式,追踪器跟踪参与在洪流的对等方。

​ 对等方的邻近对等方随时间波动。当新的对等方加入洪流时,追踪器随机向参与对等方的集合中选择对等方的子集,并将该子集的IP地址发送到新入对等方。对等方尝试与列表上的IP地址之间建立TCP连接,连接成功则可称之为邻近对等方。

​ 最稀缺优先:针对对等方没有的块在她邻居中决定最稀缺的块,并优先请求这些没有的块。

​ 另一种P2P应用:分布式散列表(DHT):一种简单的数据库,其数据库记录在一个P2P系统的多个对等方上。

2.6 视频流和内容分发网

​ CDN的两种服务器安置原则:深入(在接入ISP中部署服务器集群,但高分布式设计使得维护和管理成为挑战)、邀请做客(在少量关键位置建立大集群来邀请ISP做客,较低维护和管理成本,但端用户较高时延和较低吞吐量)。

​ CDN,指内容分发网。CDN管理分布在多个物理地址上的服务器,在它的服务器上存储视频的副本,并试图将每个用户的请求定向到一个能够提供最好的用户体验的CDN位置。

第三章 运输层

3.1 概述和运输层服务

​ 运输层协议为运行在不同主机上的应用程序之间提供逻辑通信功能.

​ 因特网有两种协议,TCP和UDP,每种协议都能为调用的应用程序提供一组不同的运输层服务

运输层与网络层的关系

​ 运输层所提供的的服务受制于网络层所能提供的服务。如果网络层协议无法为主机之间发送的运输层报文段提供时延或带宽保证,运输层协议也无法为进程之间发送的应用程序报文提供时延或带宽保证。

​ 但值得一提的是,运输层也能够提供一些网络层协议不能再网络层提供相应服务的服务。举例而言,即便网络层协议会导致分组丢失、篡改或冗余,运输层协议也能够为应用程序提供可靠数据传输服务;即便网络层不能保证运输层报文段的机密性,运输协议也能够借助加密来实现机密性的保证。

概述

​ 传输控制协议——TCP:为调用它的应用程序提供了一种可靠的、面向连接的服务。

​ 用户数据报协议——UDP:为调用它的应用程序提供一种不可靠的、无连接的服务。

​ 因特网网络层协议(IP):服务模型为尽力而为交付服务,IP尽其最大的力在通信的主机之间交付报文段,但不做任何确保,不确保报文段的交付,不确保报文段的按序交付,不确保报文段的完整性。因此,IP是一种不可靠服务。

​ UDP和TCP的最基本责任:将两个端系统之间IP的交付服务扩展为运行在端系统上的两个进程之间的交付服务。

​ 将主机间交付扩展为进程间交付被称为运输层的多路复用与多路分解

​ 最低限度的运输层服务(同时也是UDP所能提供的仅有的两种服务):进程到进程的数据交付和差错检查。

​ TCP能够提供的附加服务:可靠数据传输、拥塞控制。

3.2 多路复用与多路分解

​ 多路复用与多路分解服务是所有计算机网络都需要的服务。

多路分解:在接收端,运输层检查报文段中的字段,标识出接收套接字,进而将报文段定向到该套接字。将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。

多路复用:在源主机中从不同套接字中收集数据块,并为每个数据块封装上首部信息(用于后续分解)从而生成报文段,然后将报文段传递到网络层的工作称为多路复用。

​ 多路复用的要求:①套接字具有唯一标识符 ②每个报文段有特殊字段来指示该报文段所要交付到的套接字(ps:这些特殊字段是源端口号字段和目的端口号字段)

​ 端口号:16比特的数字,大小在0~65535之间。当我们开发简单应用程序时,必须为其分配一个端口号。

​ 周知端口号:1~1023范围内的端口号,这些端口号是受限制的,保留给诸如HTTP(端口号80)和FTP(端口号21)这些周知应用层协议所使用的。

无连接的多路复用和多路分解

​ 创建UDP套接字时,运输层会在1024~65536区间范围内为该套接字分配一个端口号,该端口号是当前未被该主机中任何其他UDP端口使用的号。(我们也可以使用套接字bind()方法为创建的UDP套接字关联一个特定的端口号)

​ 一个UDP套接字由一个二元组全面标识,该二元组包含一个目的IP地址和一个目的端口号。因此,如果两个UDP报文段有两个不同的源端口号和源IP地址,但具有相同的目的IP地址和目的端口号,他们会通过相同的套接字被定向到相同的目的进程。

​ 源端口号作为“返回地址”的一部分使用

面向连接的多路复用和多路分解

​ TCP套接字由四元组标识(源IP地址,源端口号,目的IP地址,目的端口号)。到达主机后,主机会使用全部四个值将报文段定向到相应套接字,两个具有不同源地址或源端口号的到达TCP报文段将被定向到两个不同的套接字(这与UDP不同),除非TCP报文段携带了初始创建连接的请求。

​ 连接建立请求的目的端口号为12000。

​ 服务器主机支持多个并行的TCP套接字,每个套接字与一个进程相联系,并由其四元组标识每个套接字。

3.3 无连接运输:UDP

​ UDP从应用程序得到数据,附加上用于多路复用/多路分解服务的源和目的地端口号字段以及其他小字段,然后将形成的报文段交给网络层。如果报文档到达接收主机,UDP使用目的端口号将报文段中的数据交付给正确的应用程序。

​ 称为无连接的原因:发送报文段之前,发送方和接收方的运输层实体之间没有握手

​ 很多应用更适合用UDP的原因:

  1. 关于发送什么数据以及何时发送的应用层控制更为精密,使用UDP会在应用程序传递给UDP时直接打包进UDP报文段,而TCP有拥塞控制,会在极其拥塞时遏制运输层传输,不会顾及可靠运输需要多久时间。对于一些实时应用来说,他们通常要求最小的发送速率,不希望有过多的延迟,并能够容忍一部分数据丢失。
  2. 无需连接建立,TCP需要经过三次握手连接才进行数据传输,而UDP不需要做任何准备,因此不会产生建立连接的时延
  3. 无连接状态,TCP需要在端系统中维护连接状态,这一连接状态包括接收和发送缓存、拥塞控制参数以及序号和确认号的参数,而UDP不需要追踪维护连接状态和这些参数
  4. 分组首部开销大,TCP报文段有20个字节的首部开销,而UDP只有8个

​ 通过在应用程序中建立可靠性机制,我们可以在UDP应用中实现可靠数据传输(但这个是增加服务,不属于UDP功能)

UDP检验和

​ UDP检验和提供差错监测功能,也就是检验和用于确定UDP报文段从源到目的地移动过程中的比特是否发生改变。

​ 发送方会对报文段的所有16比特字的和进行反码运算,求和时的溢出会被回卷,得到的结果放在UDP报文段中的检验和字段。

3.4 可靠数据传输原理

​ 可靠数据传输为上层实体提供的服务抽象:数据可以通过一条可靠的信道进行传输。借助可靠信道,传输数据比特就不会受到损坏(由0变1或相反)或丢失,并且所有数据都按照它的发送顺序进行交付。

​ 单向数据传输:数据传输是单向的,从发送端到接收端的。

3.4.1 构造可靠数据传输协议
经完全可靠信道的可靠数据传输:rdt1.0

​ 最简单情形:底层信道完全可靠,接收方接收数据速率与发送方发送速率一样

​ 有限状态机(FSM)

​ rdt1.0的发送端只通过send接收较高层的数据,借助make_pkt产生数据分组,并将分组发送到信道

​ 接收端通过rdt_rcv从底层信道接收分组,并借助extract从分组中取出数据,并借助deliver将数据传到较高层。

rdt1.0

经具有比特差错信道的可靠数据传输:rdt2.0

​ 肯定确认——ACK;否定确认——NAK

​ 自动重传请求协议——基于通过ACK和NAK,这些控制报文使得接收方可以让发送方知道哪些内容被正确接收,哪些内容接收有误并需要重复的重传机制的可靠传输协议

​ 处理存在比特差错需要的三种协议功能:

  1. 差错检测,需要一种机制使得接收方能够监测何时出现了比特差错
  2. 接收方反馈,从接收方向发送方回送ACK和NAK分组(理论上分组只需要一个比特长)
  3. 重传,接收方收到有差错的分组,需要发送方重传该分组

rdt2.0

​ 停等协议:停止等待协议,发送方不会发送新数据,除非发送方确认等待方已正确接收。

​ 在上述基础上,rdt2.0并没有考虑ACK或NAK分组受损的情况,基于此,我们在数据分组中添加一段字段,让发送方对数据分组编号,接收方只需要检查序号即可确定分组是否重传。——为此引申出rdt2.1:

rdt2.1

经具有比特差错的丢包信道的可靠数据传输:rdt3.0

​ 增添定时器功能,用于在一个给定的时间量过期之后,中断发送方。发送方需要做到:①每次发送分组时,启动定时器 ②响应定时器中断 ③终止定时器

rdt3.0接收方

​ rdt3.0的运行大致如下:

比特交换协议

3.4.2 流水线可靠数据传输协议

​ rdt3.0是个停等协议,但是停等协议的性能极低,对信道的利用率极低。为此我们设置允许发送方发送多个分组而无需确认,并称之为流水线技术。

​ 流水线技术相比于停等协议,可带来以下影响:

  1. 必须增加序号的范围,因为每个输送中的分组必须有一个唯一的序号,并且也许有多个正在输送中的未确认报文
  2. 协议的发送方和接收方两端也许不得不缓存多个分组,发送方最低限度应当能够缓存那些已经发送但没有确认的分组,接收方也许需要缓存那些已经正确接收的分组
  3. 所需序号范围以及对缓冲的要求取决于数据传输协议如何处理丢失、损坏和延时过大的分组。此处有两种基本方法:回退N步(Go-Back-N),选择重传(SR)
3.4.3 回退N步(GBN协议,也被叫做滑动窗口协议)

​ GBN协议允许发送方发送多个分组而不需等待确认,但是也受限于在流水线中未确认的分组数目不能超过最大允许数N。

滑动窗口协议

​ 由图可知,基序号base为最早未被确认的分组,nextseqnum为最小的未使用序号,基于此可以将分组化成四个部分。

​ N被叫做窗口长度,指的是流水线中同时能够发送的分组数目最大允许数。

​ 分组的序号承载在k比特数目的分组序号段中,序号范围为[0,2k-1],序号空间是2k的环

​ GBN的发送方需要响应三种类型事件:

  1. 上层的调用,上层调用send时,发送方会先检查发送窗口是否已满(也就是已发送但未被确认的分组数是否达到N),若已满则返回上层让其稍后再试;若未满则产生分组并发送,更新相应变量
  2. 收到一个ACK,GBN协议采取累计确认方式,表示接受方已经正确接收到序号n以及n以前在内的所有分组
  3. 超时事件,如果发生超时,发送方会重传所有已经发送但还没有被确认的分组。

​ GBN协议的接受方会按序接收分组,并丢弃所有失序分组。这种方式的接收缓存简单,不需要缓存任何失序分组,但会导致随后对该分组的重传可能会丢失或出错,造成更多重传。

3.4.4 选择重传

​ GBN协议避免了停等协议的信道利用率问题,但是单个分组的差错就可能会造成大量的重传,尤其是在窗口长度和带宽时延极大时性能尤显低下。

​ 选择重传在此基础上让发送方只重传它怀疑接收方出错的分组,避免了不必要的重传,个别的,按需的重传要求接收方逐个确认正确接收的分组。

​ 在选择重传中,我们仍使用N来限制流水线中未完成、未被确认的分组数。

流水线

​ 下图是SR的发送方和接收方的操作

SR接收方与发送方操作

​ 对于SR发送方,他

  1. 若从上层收到数据,检查下一个可用于该分组的序号,若位于窗口内,打包发送,否则打回或缓存
  2. 若超时,重新发送(注意这里每个分组有自己的逻辑定时器,超市后只发送一个分组)
  3. 收到ACK,若分组序号在窗口内,将分组标记为已接收,若序号恰好为base,则窗口后移至最小未被接收的分组处。

​ 对于SR接收方,序号在rcv_base到base+N-1区间正确接收时,选择ACK回送发送方,若以前没接收过,缓存分组。若分组序号恰为基序号,将分组与之前缓存的和base连接在一起的分组交付给上层,窗口移动到最小未交付序号;序号在base-N到base-1之间正确接收时,产生ACK;其他情况忽略分组。

​ 对于SR而言,窗口长度必须小于等于序号空间的一半

3.5 面向连接的运输:TCP
3.5.1 TCP连接

​ TCP连接是点对点的连接,也就是单个发送方和单个接收方之间的连接。

​ 三次握手:客户先发送一个特殊的TCP报文段,服务器用另一个特殊报文段响应;最后,客户用第三个特殊报文段响应。前两个响应不具有“有效载荷”,不包含应用层数据。

​ 发送缓存:发起三次握手期间设置的缓存之一,接收套接字传递的数据流。

​ 最大报文段长度MSS:限制TCP从缓存中取出并放入报文段中的数据数量,取决于最初确定的由本地发往主机的发送的最大链路层帧长度。

​ TCP提供累计确认

3.5.3 往返时间的估计与超时

​ 超时间隔必须大于该连接的往返时间(RTT)

估计往返时间

​ 取报文段样本RTT为某报文段发出到该报文段的确认被收到的时间量,并取均值(取均值方式为八分之七的过去均值+八分之一的新值,这里的八分之一是推荐值)

​ 样本RTT偏离均值的程度DevRTT=(1-0.25)DevRTT+0.25*|样本RTT-均值|。注意这里的0.25是推荐值,不固定

设置和管理重传超时间隔

​ 超时间隔为RTT均值+4*DevRTT。

3.5.4 可靠数据传输

​ TCP协议使用单一定时器,避免了定时器的管理开销

​ 简化的TCP发送方工作(在无流量和拥塞控制的限制下,且数据长度小于MSS,即不超过一个数据报):

TCP发送方操作建议流程程序图伪代码

​ 注意上述第三个事件中,因为TCP是累计确认,所以收到y的ACK,代表序号在y以前的都已经接收到了

​ TCP在遇到超时重传时,会让定时器的时间设置翻倍(但当遇到其他事件时仍为此前的推算值)

​ TCP是GBN和SR的混合体,不属于其中任何一个

3.5.5 流量控制

​ 流量控制服务:用来消除发送方使接收方缓存溢出的可能性,是一个速度匹配服务

​ TCP通过让发送方维护一个叫做接收窗口的变量,来提供流量控制。接收窗口会给发送方一个关于接收方还有多少可用缓存空间的指示。接收窗口的值是动态的,其值等于(接收缓存-进入缓存读入的最后一个字节编号+从缓存中读出的最后一个字节编号)

3.5.6 TCP连接管理

​ 开始连接时,会有三次握手,其中第一个报文段叫做SYN报文段,第二个叫做SYNACK报文段,第三个对服务器的允许连接报文段进行确认,SYN比特置为0(前两个为1)。第三个可以携带客户到服务器的数据。

​ 结束连接时,客户向服务器发送FIN(FIN比特为1),服务器返回ACK,并发送自己的终止报文段FIN,客户接受到后返回ACK,至此连接所用的资源被释放。

3.6 拥塞控制原理

​ 拥塞产生的原因:链路本身的容量限制(尤其是共享式输出链路);路由器的有限缓存容量;多跳路径的供给载荷

​ 拥塞导致的代价:

  1. 当分组的到达速率接近链路容量时,分组会经历巨大时延
  2. 发送方必须执行重传以补偿因为缓存溢出而丢弃的分组
  3. 发送方在遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本
  4. 当一个分组沿一条路径被丢弃时,每个上游服务器用于转发该分组到丢弃该分组而使用的传输容量被浪费
拥塞控制

​ 根据网络层是否为运输层拥塞控制提供显式帮助,主要由两种:端对端拥塞控制(网络层没有为运输层拥塞控制提供显式帮助,即使存在拥塞,端系统必须通过对网络行为的观察来推断,例如TCP中报文段的丢失(通过三次冗余或超时)),网络辅助的拥塞控制(路由器向发送方提供关于拥塞状态的显式反馈信息,主要由两种反馈方式——直接反馈信息和标记分组字段表示拥塞产生,后一种至少需要经过一个完整往返)。

3.7 TCP拥塞控制

​ TCP的指导性原则:

  1. 一个丢失的报文段意味着拥塞,因此在丢失报文段时应当降低TCP发送方的速率
  2. 一个确认报文段指示该网络正在向接收方交付发送方的报文段,因此,当对先前未确认的报文段确认到达时,能够增加发送方速率
  3. 带宽探测

​ TCP拥塞控制算法的三个主要部分:慢启动、拥塞避免和快速恢复。快速恢复是推荐部分,但不必须;慢启动和拥塞避免是强制部分,而慢启动能够比拥塞避免更快的增加cwnd长度

慢启动

​ TCP连接开始时,设置cwnd为一个MSS的较小值,初始速率约为MSS/RTT。

​ 在慢启动状态,cwnd值从一个MSS开始并每当一个传输报文段被确认就增加一个MSS,每经过一个RTT发送速率就翻番——发送速率在慢启动状态指数级增长,直到拥塞或与慢启动阈值(监测拥塞时拥塞窗口值的一半)相关联或检测到三个冗余ACK时停止慢启动

拥塞避免

​ 进入拥塞避免状态时,cwnd值大约为上次遇到拥塞时的值的一半,不能够再翻番,因此每个RTT只将cwnd值增加一个MSS。

​ 超时后,cwnd置为1,阈值更新为cwnd一半;三个冗余ACK时,cwnd减半,并在收到三个冗余ACK后,将阈值记录为cwnd的一半,进入快速恢复

快速恢复

​ 对每一个冗余ACK和引起TCP进入该状态的确实报文段,cwnd值增加一个MSS,并在丢失报文段的一个ACK到达时,降低cwnd进入拥塞避免状态。

TCP吞吐量的宏观描述

​ 平均吞吐量=(0.75*W)/RTT;W值为丢包事件发生时的窗口长度。(高度理想化)

​ 平均吞吐量=(1.22*MSS)/(RTT×根号L),L为丢包率

UDP可能会遏制TCP流量,且多条并行很难保证公平性

第四章 网络层:数据平面

​ 数据平面功能——即网络层中每台路由器的功能。数据平面功能决定了到达路由器输入链路之一的数据报(网络层的分组)如何转发到该路由器的输出链路之一。

​ 控制平面功能——即网络范围的逻辑。控制平面功能控制数据报沿着源主机到目的主机的端对端路径中路由器之间的路由方式。

4.1 网络层概述
转发和路由选择:数据平面和控制平面

​ 网络层需要将分组从一台发送主机移动到另一台接收主机。为此,需要两个重要的网络层作用:转发、路由选择。

转发

​ 当一个分组到达某个路由器的一条输入链路时,该路由器必须将该分组移动到适当的输出链路。转发是在数据平面中实现的唯一功能(尽管是最为常见和重要的功能)。

转发是指将分组从一个输入链路端口转移到适当的输出链路接口的路由器本地动作。转发发生的时间尺度很短(几纳秒),通常用硬件实现。

路由选择

​ 当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算这些路径的算法称为路由选择算法。

路由选择是指确定分组从源到目的地所采取的端到端链路径的网络范围处理过程。路由选择的时间尺度较长(几秒),需要用软件实现

​ 转发表:网络路由器的关键元素。路由器检查到达分组首部的一个或多个字段值,进而使用这些字段值在转发表中索引,通过这种方式来转发分组。这些存储在转发表项的值,指出了分组将被转发的路由器的输出链路接口。

控制平面:传统方法

​ 人为配置转发表内容(理想状态,不现实,而且因为需要人为交互,容易出错)

控制平面:SDN方法

​ 此方法下,每个路由器都有一个与其它路由器的路由选择组件通信的路由选择组件。远程平面路由选择功能与物理的路由器分离,路由选择设备仅执行转发,远程控制器计算并分发转发表。通过交换包含转发表和其他路由选择信息的报文实现路由器和远程控制器的通信。

网络服务模型

​ 网络服务模型定义了分组在发送与接收端系统之间的端对端运输特性。

​ 网络层所能提供的服务可能包括(存在无数可能变种):

  1. 确保交付,确保分组能够到达目的地
  2. 具有时延上界的确保交付,确保分组交付且在特定的主机到主机的时延上界内
  3. 有序分组交付,确保分组以他们发送的顺序到达目的地
  4. 确保最小带宽,模仿在发送和接收主机之间一条特定比特率的传输链路行为。只要发送主机以低于特殊比特率的速率传输比特就能让所有分组最终交付到目的主机
  5. 安全性,网络层能够在源加密所有数据报并在目的地解密分组,从而对所有运输层报文段提供机密性

​ 因特网网络层提供单一服务,叫做——尽力而为服务,传送分组不保证按顺序交付和最终交付,不保证端对端时延和最小带宽

4.2 路由器工作原理

​ 图为通用路由器体系结构的总体视图

通用路由器体系结构

​ 图标识了路由器的四个组件:输入端口(在路由器中执行终结如物理链路的物理功能,与位于入链路远端的数据链路层交互执行链路层功能,执行查找功能,并根据查询转发表决定路由器输出端口),交换结构(将输入端口连接到输出端口,完全在路由器中),输出端口(存储从交换结构中接收的分组,并执行必要的链路层和物理层功能,在输出链路运输分组),路由选择处理器(执行控制平面,在传统路由器中执行路由选择协议;在SDN中负责与远程控制器通信)

4.2.1 输入端口处理与基于目的地转发

​ 前缀:转发表通过分组目的地址的前缀与转发表的表项进行匹配。当存在多个匹配时,采取最长前缀匹配规则(在表中寻找最长的匹配项,向与最长匹配项相关联的链路接口转发接口

​ 三态内容可寻址存储器(TCAM):执行对转发表的快速匹配查询来查找。使用TCAM,32比特IP地址放入内存,TCAM能够在基本常数时间内返回对该地址的转发表项的内容

4.2.2 交换

​ 交换结构位于路由器的核心部位,并根据这种交换结构实现分组从一个输入端口到一个输出端口。交换可以用多种方式进行,例如借助内存,总线,或纵横式设计。

交换结构的三种方式

经内存交换

​ 输入端口与输出端口的交换在CPU(路由选择处理器)的直接控制下完成,类似于传统I/O设备,会在进入输入端口后中断信号,复制到内存,提取目的地址,找到对应输出端口,再将分组复制到输出端口的缓存

经总线交换

​ 输入端口经一根共享总线将分组直接送到输出端口,不需要路由选择处理器干涉。让输入端口为分组预先计划一个交换机内部标签,指示本地输出端口,使分组在总线上传送和传输到输出端口。分组能够被所有输出端口收到,但是只有与标签匹配的端口才能保存分组,随后标签在输出端口去除。

​ 这种方式导致路由器的交换带宽受限于总线速率的限制(因为一次只有一个分组能够跨越总线)

经互联网络交换

​ 克服了单一的共享式的总线带宽设计限制,交叉点通过交换结构控制器,能够在任何时刻开启或关闭。与前两种相比,纵横式设计能够并行转发多个分组,是非阻塞的。

4.2.4 排队

​ 根据结构可以发现,输出端口和输入端口都可能形成队列

​ 对于输入端口而言,交换结构不能较快的(相对于输入链路)是所有分组无时延的通过传送,会导致分组排队;此外,若两个位于输入队列前端的两个分组发往同一输出队列时,其中一个分组被阻塞,必须在输入队列等待(这个时候位于这之后的分组发生线路前部阻塞,哪怕后面的分组对应的输出端口空闲)

​ 对于输出队列而言,当交换结构比端口线路快时,输出队列会排队。在缓存溢出后,采取主动队列管理(例如丢弃一个分组或在其首部增加一个标记,向发送方提供拥塞信号)

​ 缓存容量应当等于平均往返时延(RTT)乘以链路容量

4.2.5 分组调度
先来先服务(FCFS),也叫先进先出(FIFO)

​ 如果链路当前正在忙于传输另一个分组,到达链路输出队列的分组需要排队等待传输;如果没有足够缓存,队列分组丢弃策略决定该分组是否被丢弃或从队列中去除其他分组

FIFO调度规则按照分组到达输出链路队列的相同次序来选择分组进行传输

优先权排队

​ 在优先权排队规则下,到达输出链路的分组被分类放入输出队列中的优先权类。在同一优先权的分组内选择通常以FIFO方式完成;而在不同类之间优先权排队规则将从队列非空的最高优先权类中传输一个分组

​ 非抢占式优先权排队:一旦分组开始传输,就不能打断

循环和加权公平排队

循环排队规则下,分组像优先权排队那样被分类,但是类之间没有明显的优先权服务,循环调度器在这些类之间轮流提供服务。保持工作排队规则让循环排队规则在有类的分组排队等待运输时,不允许链路保持空闲(当寻找给定类的分组没有找到时,保持工作的循环排队规则会立即检查循环序列的下一个类)

加权公平排队规则(WFQ)是一种通用形式的循环排队,与循环调度一样以循环的方式为每个类服务。他和循环排队不同的地方在于每个类在任何时间间隔可能收到不同数量的服务,为此对每个类分配一个权,并保证时间间隔内第i类确保接受的服务部分为权值。

4.3 IPv4,寻址和IPv6,其他

​ MTU(最大传送单元):一个链路层帧能承载的最大数据量

​ 将IP数据报分成多个小的数据报,从而满足能够被链路层帧容纳。每个较小的数据报叫做片,这个过程叫分片。

​ IPv4将数据报分片重新组装的过程放在端系统中

​ IP地址长度为32比特,地址通常按点分十进制记法。

​ 子网:分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的断电。这些隔离的网络的每一个就叫做一个子网。

​ 因特网地址分配策略——无类别域间路由选择。当使用子网寻址时,32比特的IP地址被划分为两个部分,并具有点分十进制形式a.b.c.d/x,其中x指示地址第一部分的比特数。x最高比特也叫作网络地址前缀,剩余32-x用于区分该组织内部设备

​ IP广播地址(255.255.255.255),当主机发出目的地255.255.255.255的数据报时,报文会交付给同一网络所有主机。

DHCP动态主机配置协议

​ 动态主机配置协议(DHCP),允许主机自动获取(被分配)一个IP地址。网络管理员配置DHCP使得给定主机每次与网络连接时得到相同的IP地址,或分配临时IP地址。DHCP允许主机得知子网掩码、第一条路由器(默认网关)与本地DNS服务器地址。

​ DHCP也被叫做即插即用协议或零配置协议,广泛用于住宅接入网、企业网和无线局域网中,是一个客户-服务器协议。

​ DHCP是一个四步骤的过程——DHCP发现(主机的首要任务是发现一个交互的DHCP服务器,通过DHCP发现报文完成,这一过程客户直接广播到子网连接节点),DHCP服务器提供(服务器收到报文后,用DHCP提供报文做出响应,这一过程仍然广播),DHCP请求(客户从接收到的一个或多个服务器中选择一个,并根据选中的服务器提供DHCP请求报文进行响应,回置配置参数),DHCP ACK(服务器用ACK报文进行响应)

网络地址转换

​ NAT,是网络地址转换。NAT路由上有一个NAT转换表,并在表项中包含端口号及地址,能够将家庭网络主机等专用网络地址转换进入到广域网中。

4.4 通用转发和SDN

​ 流表:匹配加动作转发表,表象包括①首部字段值的集合(人分组用以匹配) ②计数器的集合(计数包括已经与流表匹配的分组数量、流表上次更新的时间等) ③分组匹配流表项时所采取的动作的集合(转发到输出端口、丢弃分组、复制分组等)

匹配

​ 流表的匹配抽象允许对三个层次的协议首部字段进行匹配。

​ 源和目的地的MAC地址是与帧的发送和接收接口相关联的链路层地址。

​ 流表可以具有通配符

动作

​ 转发、丢弃、修改字段(被转发到输出端口前,分组首部10个字段可以重写)

第五章 网络层:控制平面

​ 完成转发表和流表如何计算、维护和安装有两种可能的方法:每个路由器控制、逻辑集中式控制

流表

5.2 路由选择算法

​ 路由选择算法:目的是从发送方到接收方的过程中确定一条通过路由器网络的好的路径(等价于路由),通常而言好路径指的是拥有最低开销的路径,但在现实中会有各种额外开销(例如组织x的路由器不转发任何来自y组织的分组)

​ 路由选择算法可以根据算法的集中式和分散式划分:

集中式路由选择算法:用完整的、全局性的网络知识计算出从源到目的地之间的最低开销路径——该算法需要以所有节点之间的连通性及链路的开销为输入,并在真正计算之前通过某种方式获得这些消息。集中式算法聚友关于连通性和链路开销的完整信息。具有全局状态信息的算法叫做链路状态算法(LS算法)。

分散式路由选择算法:路由器以迭代、分布式的方式计算最低开销路径。没有节点拥有完整的网络链路开销信息,但每个节点只需要与其直接相连的链路开销知识即可工作,在经过迭代计算过程以及相邻节点的信息交换,逐渐计算出到达某个目的节点或一组目的节点的最低开销路径。DV算法(距离向量算法)就是一种分散式路由选择算法

​ 此外,路由选择算法也可以根据算法的静动态进行分类:静态路由算法中路由随时间变化很慢,通常人工调整编辑链路开销;动态路由选择算法会随着网络流量负载或拓扑发生变化而改变路由选择协议,能够周期性的运行或直接响应拓扑或链路开销的变化而运行。

​ 路由选择算法还可以根据负载敏感和负载迟钝进行划分:负载敏感算法中链路开销会动态变化以反映底层链路拥塞水平,拥塞与高开销联系会倾向于绕开;现在的RIP、OSPF等因特网路由选择算法更多是负载迟钝算法

链路状态路由选择算法(LS算法)

​ LS算法中网络拓扑和所有链路开销均已知,可用作LS算法的输入。通过每个节点向网络中的所有其他节点广播链路状态分组完成,其中每个链路状态分组包含它连接的链路的标识和开销(这经常用链路状态广播算法完成)。节点广播的结果是所有节点都具有网络的统一、完整视图。

​ 对于LS算法,定义D(v)为算法的本次迭代,指源节点到目的节点v的最低开销路径;p(v)为源到目的节点v沿着当前最低开销路径的前一节点(v的邻居);N‘指节点子集,如果从源到v的最低开销路径已确定,则v在N’中。

​ LS算法由一个初始化步骤和循环组成,循环执行的次数与网络节点的个数相同,一旦终止,则算法计算出了从源节点到网络其他任意节点的最短路径。

​ LS的计算复杂性在最差的情况下为O(n2),因为此时迭代需要搜寻的节点总数为n(n+1)/2

​ LS算法可能会造成振荡(会出现在任何使用拥塞或基于时延的链路测度算法中)

​ 避免自同步的一种方法:让每台路由器发送链路通告的时间随机化

距离向量路由选择算法(DV算法)

​ DV算法是一种迭代的、异步的分布式算法。

​ 分布式:DV算法的每个节点都要从一个或多个直接相连邻居接受某种信息,执行计算,然后将计算结果分发给邻居。

​ 迭代:这个过程会一直持续直至邻居之间没有更多信息交换为止(算法自我终止,无中止信号)

​ 异步:不要求所有节点相互之间步伐统一操作。x节点到y节点的最低开销d(x,y)=min{c(x,v)+d(v,y)}

​ DV算法的每个节点x维护下列路由选择信息对于每个邻居v,从x到直接相连邻居v的开销c(x,v) 节点x的距离向量(包含了x到N中所有目的地y的开销估计值) 它每个邻居的距离向量

​ DV算法中,每个节点不断向它的邻居发送距离向量副本,当节点x从任何一个邻居v处接收到一个新的距离向量,保存v的距离向量并使用方程更新距离向量;若节点的距离向量被更新步骤改变,则向它的每个邻居发送更新后的距离向量,继而让邻居更新——最终开销会收敛至实际最低开销路径

​ 当为了给定目的地y更新转发表时,节点x知道的是沿着最短路径到y的下一跳路由器邻居节点,而不是y

​ DV算法的问题:链路开销更新的不及时可能导致故障(路由选择环路);为解决这个问题,我们增加毒性逆转技术(只能解决两个的环路,不能解决超过三个的),这个技术的思想是对于自己经过的路线,自己看来是设为无穷大,不会重复经过

LS算法与DV算法的比较

​ 报文复杂性上:LS算法需要发送O(|N||E|)个报文(N为节点集合,E为边集合),而DV算法在每次迭代式直接邻居间交换报文,且仅在改变时传播

​ 收敛速度上:LS算法是实现O(|N||E|)个报文的O(|N|2)算法,而DV算法收敛较慢且会遇到路由选择环路

​ 健壮性上:LS算法具有一定的健壮性,在节点出问题时具有一定分离性;DV算法健壮性较低,会将不正确的节点开销值传播整个网络

OSPF:因特网自治系统内部的路由选择

​ 现行的因特网规模庞大,且许多ISP希望能够管理资质,因此需要自治系统来解决

​ OSPF:开放最短路优先,是一种链路优先协议,一台路由器构建一个自治系统的完整拓扑图,路由器向自治系统内所有其它路由器广播路由选择信息,而不仅仅向相邻路由器传播

​ 优点:安全性(能够鉴别OSPF之间的交换,仅有受信任的路由器能参与AS里的OSPF协议),多条相同开销路径(没有单一路径来承载流量),对单播和多播路由选择的综合支持支持在单个AS中的层次结构(能够层次化配置多个区域,每个区域有自己的OSPF路由选择算法)

ISP之间的路由选择:BGP

​ 相同AS内的源和目的地之间进行分组选路时,分组遵循的路径完全由AS内路由选择协议决定,但是当分组跨多个AS进行路由时,需要一个自治系统间路由选择协议。因特网中所有AS运行相同的AS间路由选择协议,成为边界网关协议(BGP)

​ BGP是个异步的分布式协议

作用

​ 用于AS间的路由选择协议,提供两种任务手段——①从邻居AS获得前缀的可达性信息 ②确定到该前缀的“最好的”路由(基于策略和可达性信息决定)

通告BGP路由信息

​ 对每个AS,每台路由器要么是个网关路由器,要么是个内部路由器。内部路由器仅用于连接自己AS中的主机和路由;网关路由器位于AS边缘,用于直接连接在其他AS中的路由器

​ 外部BGP连接(eBGP):跨越两个AS的BGP连接;

​ 内部BGP连接(iBGP):相同AS内的两台路由器的BGP会话;

确定最好路由

​ 路由器通过BGP连接通告前缀时,前缀包括一些BGP属性,成为路由(两个重要属性AS-PATH和NEXT-HOP,前者包含已经通告过的AS列表;后者是起始路由器接口的IP地址)

热土豆路由选择,选择的路由由开始该路由的NEXT-HOP路由器具有最小开销。依据思想:对于路由器,尽可能将分组送出其AS(用可能的最低开销),而不担心其AS外部到目的地的余下部分开销

路由选择算法,对任何给定目的地前缀,进入BGP的路由选择算法的输入是到某前缀的所有路由的集合,该前缀已经被路由器学习和接受。若相同前缀有多条,再优先考虑本地偏好值作为属性之一,其次考虑最短AS-PATH路由(距离测度使用AS跳的调数而不是路由,采用DV);再次考虑热土豆;最后考虑BGP标识

5.5 SDN控制平面

​ SDN体系结构具有四个关键特征:基于流的转发数据平面与控制平面分离(数据平面由网络交换机组成,在流表中采取匹配加动作的规则),网络控制功能(一个SDN控制器以及若干网络控制应用程序),可编程的网络

5.5.1 SDN控制器和SDN网络控制应用程序

​ SDN控制平面可以分为两个部分,即SDN控制器和SDN网络控制应用程序

​ SDN控制器的功能大致可以组织为3个层次:通信层(用于SDN控制器和受控网络设备之间的通信)、网络范围状态管理层(由SDN控制平面最终做出的控制决定,维护流表等表的拷贝)、对于网络控制应用程序层的接口(通过接口与网络控制应用程序交互,允许在状态管理层之间读写网络状态和流表)。

5.5.2 OpenFlow协议

​ 运行在SDN控制器和SDN控制的交换机或其他实现OpenFlow的设备之间,运行在TCP,端口号6653.

第六章 链路层和局域网

6.1 链路层概述

​ 链路层提供的服务可能包括:成帧(将数据报封存成帧格式),链路接入(MAC协议规定帧在链路上传输的规则),可靠交付(保证误差错的经链路层移动每一个网络层数据报,通常用于易产生高差错率的链路),差错检测和纠正(通过机制监测比特差错)

​ 链路层主体部分在网络适配器(也叫网络接口卡)实现。控制器核心是链路层控制器,一个实现链路层服务的芯片。链路层很多功能由硬件实现。

6.2 差错检测和纠正技术

​ 比特级差错监测和纠正:对从一个节点发送到另一个物理上连接的邻近节点的链路层帧中的比特损伤进行监测和纠正。

​ 即使使用这技术,也可能未检出比特差错

若发送信息中有d比特

奇偶校验

​ 偶校验方案发送方只需要包含一个附加比特,使得d+1比特中1的总数为1;奇校验就是有奇数个1.校验比特放在单独的字段中

​ 前向纠错:接收方监测和纠正差错的能力

检验和技术

​ d比特数据被当做一个k比特整数序列处理。检验和就是将这k比特整数加起来,并用得到的和作为差错检验比特

循环冗余检测

​ 也叫CRC,多项式编码。考虑d比特的数据,发送节点将它发送到接收节点。两方先协商一个r+1比特模式,成为生成多项式。生成多项式的最高有效位的比特为1。发送要要对d比特附加上r个附加比特,得到d+r且模二恰好能被生成多项式整除。

4.3 多路访问链路和协议

​ 我们有两种简单的网络链路:点对点链路和广播链路。

​ 点对点链路:由链路一端的单个发送方和链路另一端的单个接收方组成

​ 广播链路:让多个发送和接收节点连接到相同的、单一的、共享的广播信道上。

​ 多路访问问题:如何协调多个发送节点和接收节点对一个共享广播信道的访问。

​ 多路访问协议大致分为三种:信道划分协议、随机接入协议和轮流协议。

​ 对R bps的广播信道,多路访问协议应当有一下希望特性:

  1. 当经由一个节点发送数据时,节点有R bps的吞吐量
  2. 有M个节点发送数据时,每个节点吞吐量为R/M(值平均传输速率而非瞬时)
  3. 协议是分散的,不会因为单节点故障导致系统崩溃 ④协议是简单的,实现不昂贵
信道划分协议

​ 时分多路复用:TDM

​ 频分多路复用:FDM(这两个多路复用第一章有定义)

​ 信道R bps情况下:

​ 时分多路复用消除了碰撞且非常公平,但节点被限制在R/N bps的平均速率,且当他是唯一有分组要发送的节点时他仍要等待它的传输序列

​ 频分多路复用将信道划分为不同频段,公平且消除了碰撞,但他的节点只能使用R/N的带宽

随机接入协议

​ 一个节点总是以信道的全部速率(R bps)进行发送,当有碰撞时涉及碰撞的节点在等待随机时延后重发帧

​ 时隙ALOHA协议与ALOHA协议,

​ 载波侦听多路访问(CSMA)

载波侦听:一个节点在传输前先听信道,如果有另一节点的帧正在信道上发送,节点等待直到检测到一小段时间没有传输

碰撞监测:当一个传输节点在传输时一直侦听信道,如果监测到另一节点正在传输干扰帧,停止传输,等待随机时间后进入侦听—空闲传输循环

​ 广播信道中端对端信道传播时延在性能方面起关键作用

​ 具有碰撞检测的载波多路侦听(CSMA/CD)效率=1/(1+5*信号能量在任意两个适配器间传播的最大时间/传输一个最大长度的以太网帧的时间)

轮流协议

​ 轮训协议:设置一个主节点,主节点轮流询问,告诉可传输的帧。

​ 令牌传递协议:用令牌这样一个小的特殊帧在节点内以固定次序交换。收到令牌后,若没有发送帧或已经发送完最大数目帧,转发给下一个节点。

6.4 交换局域网
6.4.1 链路层寻址和ARP
MAC地址

​ 主机或路由器不具有链路层地址——具有链路层地址的是适配器,也就是网络接口。

​ 链路层交换机的任务是在主机和路由器之间承载数据报;交换机透明的执行这个任务,主机或路由器不需要明确将帧寻址到其间的路由器。链路层地址有多个名字,LAN,MAC等。

​ MAC地址长度为6个字节,具有扁平结构。IEEE管理着MAC地址空间,固定MAC地址的前24个比特。

​ MAC广播帧是48个连续1的字符串

地址解析协议

​ 需要IP地址和MAC地址的转换,所以需要地址解析协议,也就是ARP。

​ MAC地址常用十六进制表示。DNS将主机名解析为IP地址,ARP将IP地址解析为MAC地址(ARP只为同一子网的主机和路由器接口解析IP地址)

​ 内存中存在一个ARP表,包含了IP地址到MAC地址的映射关系(同时包含寿命值TTL,也是删除此映射的时间)

​ 如果ARP表没有相应表项,发送方构造一个ARP分组,目的是询问子网上所有其他主机和路由器,已确定对应要解析的IP地址的MAC地址。查询ARP在一个广播帧中发送,而响应ARP在标准帧中发送;ARP即插即用,自动建立,不需要管理员配置

6.4.3 链路层交换机

​ 交换机本身对子网的主机和路由器透明。

交换机转发和过滤

​ 过滤:决定一个帧应该转发到某个接口还是应当舍弃的交换机功能

​ 转发:决定一个帧应该被导向到那个接口,并把帧移动到那些接口的功能。

​ 上述两个功能借助交换机表完成。交换机表表项包含①一个MAC地址 ②通向MAC的交换机接口 ③表项放置在表中的时间

自学习

​ 交换机是自学习的,机表初始值为空,对接收到的每个入帧都会存储帧的原地址字段MAC值,帧到达的接口和当前时间;经过一段时间后会自删除表地址

链路层交换机性质

传输时一直侦听信道,如果监测到另一节点正在传输干扰帧,停止传输,等待随机时间后进入侦听—空闲传输循环

​ 广播信道中端对端信道传播时延在性能方面起关键作用

​ 具有碰撞检测的载波多路侦听(CSMA/CD)效率=1/(1+5*信号能量在任意两个适配器间传播的最大时间/传输一个最大长度的以太网帧的时间)

轮流协议

​ 轮训协议:设置一个主节点,主节点轮流询问,告诉可传输的帧。

​ 令牌传递协议:用令牌这样一个小的特殊帧在节点内以固定次序交换。收到令牌后,若没有发送帧或已经发送完最大数目帧,转发给下一个节点。

6.4 交换局域网
6.4.1 链路层寻址和ARP
MAC地址

​ 主机或路由器不具有链路层地址——具有链路层地址的是适配器,也就是网络接口。

​ 链路层交换机的任务是在主机和路由器之间承载数据报;交换机透明的执行这个任务,主机或路由器不需要明确将帧寻址到其间的路由器。链路层地址有多个名字,LAN,MAC等。

​ MAC地址长度为6个字节,具有扁平结构。IEEE管理着MAC地址空间,固定MAC地址的前24个比特。

​ MAC广播帧是48个连续1的字符串

地址解析协议

​ 需要IP地址和MAC地址的转换,所以需要地址解析协议,也就是ARP。

​ MAC地址常用十六进制表示。DNS将主机名解析为IP地址,ARP将IP地址解析为MAC地址(ARP只为同一子网的主机和路由器接口解析IP地址)

​ 内存中存在一个ARP表,包含了IP地址到MAC地址的映射关系(同时包含寿命值TTL,也是删除此映射的时间)

​ 如果ARP表没有相应表项,发送方构造一个ARP分组,目的是询问子网上所有其他主机和路由器,已确定对应要解析的IP地址的MAC地址。查询ARP在一个广播帧中发送,而响应ARP在标准帧中发送;ARP即插即用,自动建立,不需要管理员配置

6.4.3 链路层交换机

​ 交换机本身对子网的主机和路由器透明。

交换机转发和过滤

​ 过滤:决定一个帧应该转发到某个接口还是应当舍弃的交换机功能

​ 转发:决定一个帧应该被导向到那个接口,并把帧移动到那些接口的功能。

​ 上述两个功能借助交换机表完成。交换机表表项包含①一个MAC地址 ②通向MAC的交换机接口 ③表项放置在表中的时间

自学习

​ 交换机是自学习的,机表初始值为空,对接收到的每个入帧都会存储帧的原地址字段MAC值,帧到达的接口和当前时间;经过一段时间后会自删除表地址

链路层交换机性质

​ 优点:消除碰撞,异质链路(将链路隔离),管理(易于网络管理)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值