第一章 计算机网络概述
所有连接到因特网的设备都称为主机host或端系统end system。
网络:由若干端系统和连接这些端系统的通信链路(communication link)和分组交换机(packet switch)构成。
多个网络可以通过路由器进行互联,形成一个覆盖范围更大的网络,即互联网。
链路的传输速率以比特/秒(bps)度量。
当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节。由此形成的信息包称为分组packet。
分组交换机的常用类型:
- 路由器router
- 链路层交换机 link-layer switch
从发送端系统到接收端系统,一个分组所经历的一系列通信链路和分组交换机称为通过该网络的路径route/path。
协议
协议(protocol)定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送或接收一条报文或其他事件所采取的动作。
Q:什么是Internet?
A:从具体构成角度,因特网是由端系统,通信链路和分组交换机组成的连接数以亿计的计算机设备的大型网络系统。通过网络协议定义通信实体之间交换的报文格式和次序,以及报文发送或接收一条报文或其他事件所采取的动作。
从服务角度,因特网包含使用通信设施进行通信的分布式应用,而通信基础设施为这些应用提供编程接口,将发送和接收数据的app与互联网连接起来。
网络边缘
主机(即端系统)分为:客户端和服务器。
网络边缘包括:主机和应用程序(在客户端或服务器上)。
接入网、物理媒体:有线、无线的通信链路。
端系统位于网络边缘,运行应用程序。
客户端/服务器模型CS model:客户端向服务器请求、接收服务。
对等模式P2P:没有专门服务器,需要通信的客户端之间请求、接收服务。
可靠数据传输服务
目标:在端系统间传输数据。
握手:在数据传输之前的准备。
TCP-传输控制协议服务:可靠数据传输服务,面向连接。
不可靠数据传输服务
目标:在端系统之间传输数据,不使用连接。
UDP-用户数据报协议:无连接,不可靠数据传输。
接入网(Access networks)和物理媒体
DSL:数字用户线。
拨号调制解调器Dialup via modem:56Kbps速率直接连接至路由器(通常更低),不能同时上网的打电话,不能总是在线。
物理媒体:
- 导引型媒体:信号沿着固体媒介导引
- 非导引型媒体: 开放的空间传输电磁波或者光信号
无线链路类型:地面微波,LAN,wide-area,卫星。
网络核心
网络核心是路由器构成的网状网络。
电路交换Circuit Switching
为每个呼叫预留一条专有电路。
电路建立:如同打电话先要通过拨号在通话双方间建立起一条通路一样,数据通信的电路交换方式在传输数据之前也要先经过呼叫过程建立一条端到端的电路。它的具体过程如下:
- 发起方向某个终端站点(响应方站点)发送一个请求,该请求通过中间节点传输至终点。
- 如果中间节点有空闲的物理线路可以使用,接收请求,分配线路,并将请求传输给下一中间节点;整个过程持续进行,直至终点。如果中间节点没有空闲的物理线路可以使用,整个线路的连接将无法实现。仅当通信的两个站点之间建立起物理线路之后,才允许进入数据传输阶段。
- 线路一旦被分配,在未释放之前,其他站点将无法使用,即使某一时刻,线路上并没有数据传输。
数据传输:电路交换连接建立以后,数据就可以从源节点发送到中间节点,再由中间节点交换到终端节点。反向亦可。
这种数据传输有最短的传播延迟,并且没有阻塞的问题,除非有意外的线路或节点故障而使电路中断。但要求在整个数据传输过程中,建立的电路必须始终保持连接状态,通信双方的信息传输延迟仅取决于电磁信号沿媒体传输的延迟。
电路拆除:当站点之间的数据传输完毕,执行释放电路的动作。
该动作可以由任一站点发起,释放线路请求通过途经的中间节点送往对方,释放线路资源。被拆除的信道空闲后,就可被其他通信使用。
频分复用FDM和时分复用TDM
FDM就是将用于传输信道的总带宽划分成若干个子频带(或称子信道),每一个子信道传输1路信号。
频分复用要求总频率宽度大于各个子信道频率之和,同时为了保证各子信道中所传输的信号互不干扰,应在各子信道之间设立隔离带(条件之一)。
频分复用技术的特点是所有子信道传输的信号以并行的方式工作,每一路信号传输时可不考虑传输时延。
TDM就是将提供给整个信道传输信息的时间划分成若干时间片(简称时隙),并将这些时隙分配给每一个信号源使用,每一路信号在自己的时隙内独占信道进行数据传输。
时分复用技术的特点是时隙事先规划分配好且固定不变,所以有时也叫同步时分复用。
其优点是时隙分配固定,便于调节控制,适于数字信息的传输;
缺点是当某信号源没有数据传输时,它所对应的信道会出现空闲,而其他繁忙的信道无法占用这个空闲的信道,因此会降低线路的利用率。
Q:How long does it take to send a file of 640,000 bits from host A to host B over a circuit-switched network?
❖ All links are 1.536 Mbps
❖ Each link uses TDM with 24 slots/sec
❖ 500 msec to establish end-to-end circuit
A:
Each link uses 1 slot. So 1 link is:1536Kbps/24 = 64Kbps
Time spent on link: 640Kbits/64Kbps = 10s
Total time: 10s+0.5s=10.5s
电路交换不适合计算机之间的通信:
- 建立连接的时间长
- 通信有突发性,电路交换浪费的片很多
分组交换Packet Switching
以packet为单位,网络资源不再分为一个个片,传输时使用全部带宽。
存储转发传输
存储转发传输指:在交换机能开始传输该分组的第一个bit之前,必须接收完整个分组。
考虑一个情况:一个长度为Lbits的分组,在一个Rbps速率的链路传输,经过N-1个路由器,经过的端到端时延是多少?
在数据的第一个bit到达路由器时,路由器不能立刻将这个bit转发到下一个路由器上,而是要等待Lbits全部存储在路由器中,路由器才能转发数据。所以在第一个路由器将产生L/Rs的转发延迟。
在2L/Rs时刻,第一个路由器已经转发完了整个分组,并且第二个路由器已经接收了这个分组。
以此类推,当有N-1台路由器时,有以下公式:
d_{e2e}=N\frac{L}{R}
排队时延和分组丢失
对于每条相连的链路,分组交换机具有一个输出缓存。如果到达的分组需要传输到某条链路,但是该链路正忙于传输其他分组,该到达分组必须在输出缓存中等待。这个等待的事件就叫排队时延(queuing delay)。
如果缓存空间已满,则新到达的分组会被丢弃,称为丢包现象。
分组交换和电路交换的对比
考虑一个情况,假设多个用户共享一条1Mbps的链路,用户时而以100kbps速率产生数据,时而静止。该用户仅有10%时间活跃。
对于电路交换,必须在所有时间为每个用户预留100kbps。所以只能支持10个并发用户。
对于分组交换,如果有35个并发用户,有11个或更多的同时活跃用户概率约为0.0004。当有10个或更少的同时活跃用户时,到达的聚合数据速率小于等于该链路的速率1Mbps。因此后者情况下几乎没有时延,性能和电路交换一样。但是它允许更多的用户。
分组交换适合对于突发数据的传输,它的建立简单,不用呼叫。但是过度使用会导致分组的延时和丢失,造成网络拥塞。
如果想提供和电路交换类似的服务性能,需要保证带宽。
网络的网络
网络结构1:用单一的全球传输ISP互联所有接入ISP。
网络结构2:数十万接入ISP和多个全球ISP。
网络结构3:ISP与其他本地ISP。
一般来说,一个分组要从本地ISP经由网络结构3,2,1,2,3,本地,传输到另一台端系统。
四种分组延时
节点处理延时
检查bit级差错。检查分组首部,决定将分组转发到哪个后继节点。
排队延时
在输出链路上等待传输的时间,依赖于路由器的拥塞程度。
传输延时
将分组发送到链路上的时长:L/R。
传播延时
传播延时=物理链路的长度/信息在物理媒体上传播的速度。
总结:d_{nodal}=d_{proc}+d_{queue}+d_{trans}+d_{prop}
流量强度
令a表示分组到达队列的平均速率(a的单位是分组/秒,即pkt/s)。前面讲过R是传输速率,即从队列中推出比特的速率(以bps即b/s为单位)。为了简单起见,也假定所有分组都是由L比特组成的。则比特到达队列的平均速率是La bps。
比率La/R被称为流量强度。如果流量强度大于1,那么队列内容会无限增加,因此平均排队时延将趋向于无穷大。
然后考虑流量强度小于1的情况,这时如果分组是周期性到达的,则没有排队时延。但实际情况下,分组几乎是突发到达的,没有任何规律。因此流量强度和排队时延的只有一个大致的关系。如下图:
Traceroute诊断
对于每个路由器:
- 沿着目的的路径,向每个路由器发送3个探测分组
- 向发送方返回一个分组
- 发送方对发送和返回之间的间隔计时
吞吐量Throughput
吞吐量:在源端和目标端之间传输的速率(数据量/单位时间) - 瞬间吞吐量: 在一个时间点的速率
- 平均吞吐量: 在一个长时间内平均值
吞吐量瓶颈
在因特网环境下,每个连接的端到端吞吐量为:min\{R_c, R_s, R/n\}
,Rc为接收方吞吐量,Rs为发送方吞吐量,R为当前考虑的端系统的共享链路容量,n为当前考虑的端系统数量。
协议层次
层次化方式实现复杂网络功能:
- 将复杂网络功能分成明确的层次,每一层实现一个或一组功能,这些功能为上层提供服务
- 本层协议实体交互,执行本层的协议动作,目的是实现本层功能,上层通过接口调用服务
- 本层协议直接利用了下层服务
分层处理的好处:
- 应付复杂的系统
- 概念化:结构清晰,便于标识网络组件,描述其相互关系
- 结构化:更易于维护和升级,改变某一层服务的实现,不影响系统的其他层次
可能不好的地方:功能会在不同的层次中重复出现,因而产生了额外开销。
因特网协议栈
应用层:支持网络应用。
传输层:在网络层的基础上细分为进程到进程,将不可靠通信变为可靠通信。
网络层:为数据报从源到目的选择路由,端到端通信。
链路层:相邻网络节点之间的数据传输。
物理层:在线路上传输比特。
ISO/OSI参考模型:又称为开放系统互联模型,加入了表示层和会话层,如果必要,在因特网协议的应用实现。
第二章 应用层
网络应用在不同的端系统上运行。
网络核心中没有应用层功能。
网络应用的体系架构
C/S体系结构
C/S体系结构是客户端-服务器体系结构,它由以下两部分组成
- 服务器:一直在线,固定的IP地址和公开的端口号,服务器厂扩展
- 客户端:与服务端通信,间歇在线,动态IP,不直接和其他客户端通信
纯P2P结构
P2P是客户端到客户端的通信,几乎不存在真正意义上的一直运行的服务器。每一个节点既是客户端又是服务端,参与的主机间歇性连接并且可以改变IP地址。具有高扩展性但是难以管理。
CS和P2P的混和结构
例如即时通信:
- 两个用户聊天是P2P结构
- 用户上线时,在中心服务器上注册自己的IP,或者在中心服务器上找到好友的IP是属于C/S结构
进程通信
在同一个主机内,使用进程间通信机制通信(操作系统定义)。不同主机的进程间通过传递消息通信。
P2P架构的应用也有客户端进程和服务器进程之分。
Sockets套接字
进程通过Socket套接字收发信息。
套接字是同一台主机内应用层与运输层之间的接口。因此套接字也成为应用程序和网络之间的应用程序编程接口API。
进程编址
进程为了接收报文,必须有一个标识,这个标识要定义两种信息:
- 主机的地址
- 在目的主机中之顶接收进程的标识符
在因特网中,主机由其唯一的32比特的IP地址标识。因为一般来说一台主机能运行许多网络应用。为了确定进程在网络中的位置,必须用端口号来标识。
应用层协议
应用层协议定义了运行在不同端系统上的应用进程如何相互交换报文:
- 报文类型:请求、应答
- 报文中的各个字段及其描述
- 字段值的含义
- 进程何时、如何发送报文以及对报文进行响应的规则
应用层协议分为公开协议和私有协议。
应用需要传输层提供的服务
数据丢失率:有些应用需要可靠数据传输,有些应用能容忍一定比例的数据丢失。
延迟:一些应用出于有效性考虑,对数据传输有严格的时间限制。
吞吐:一些应用必须需要最小限度的吞吐,从而使得应用能够有效运转。一些应用能充分利用可供使用的吞吐。
安全性:机密性、完整性、可认证。
传输层提供的协议服务
TCP服务:可靠数据传输服务。具有流量控制,即发送方的传输数据不会淹没接受方的接受能力。拥塞控制,当网络出现拥塞时,能抑制发送方。不保证时间、最小吞吐和安全。TCP还是一种面向连接的服务,要求在客户端进程和服务器进程间建立连接。
UDP服务:不可靠数据传输。
UDP必要性
能区分不同进程,IP服务不行。
无需建立连接,适合事务性应用。
不做可靠性工作,适合实时性强正确性弱的应用。
没有拥塞和流量控制,应用能够按照设定的速度发送数据。
Web和HTTP
Web页:由HTML文件、JPEG图像、JAVA小程序等对象组成。Web页含有一个基本的HTML文件,该基本HTML文件包含对若干对象的引用。
HTTP:超文本传输协议,Web的应用层协议。采用CS模式,客户端请求、接收并显示Web对象,服务器对请求进行响应,发送对象。
HTTP概况
HTTP使用TCP协议:
- 客户端发起一个与服务器的TCP连接,建立套接字,端口号为80
- 服务器接受客户的TCP连接
- 在浏览器和Web服务器交换HTTP报文
- TCP连接关闭
服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息。假如某个特定的客户在短短的几秒内两次请求同一个对象,服务器并不会因为刚刚为该客户提供了该对象就不再做出反应,而是重新发送该对象,就像服务器已经完全忘记不久之前所做过的事一样。所以说HTTP是无状态的,服务器不维护关于客户的任何信息。
维护状态的协议很复杂!
- 必须维护历史信息(状态)
- 如果服务器/客户端死机,它们的状态信息可能不一致,二者的信息必须是一致
- 无状态的服务器能够支持更多的客户端
非持续连接和持续连接
非持续连接:每个请求/响应经过一个单独的TCP连接发送。
持续连接:所有的请求及其响应经过相同的TCP连接发送。
HTTP1.0使用非持续连接,1.1默认使用连接。
非持续HTTP
对于非持续连接,假设用户输入URLwww.someschool.edu/someDept/home.index
,那么:
- HTTP客户端在端口号80发起一个到
www.someschool.edu
服务器的连接 - 位于主机
www.someschool.edu
的HTTP服务器在80号端口等待连接,接受连接并通知客户端 - HTTP客户端向TCP连接的套接字发送HTTP请求报文,报文表示需要对象
someDept/home.index
- HTTP服务器接收到请求报文,检索对象并将其封装在响应报文中,用套接字发送给客户端
- 服务器HTTP关闭TCP连接
- HTTP客户端收到包含html文件的响应报文,并显示html,并找到引用对象
- 如果需要检索其他对象,重复上述步骤
响应时间模型:往返时间RTT是一个小的分组从客户端到服务器,再回到客户端的时间(传输时间忽略)。
一个RTT用来发起TCP连接,另一个RTT用来HTTP请求并等待HTTP响应,以及传输文件所用时间。因此非持续HTTP的一次请求对象需要2RTT+t(文件传输)的时长。
非持续HTTP的缺点:
- 每个对象都要2个RTT
- 操作系统必须为每个TCP连接分配资源,但浏览器通常打开并行TCP连接以获取多个引用对象
持续HTTP
服务器在发送响应后,仍保持TCP连接。
持续HTTP分为流水方式和非流水方式。流水方式是串行完成任务,每个引用对象花费一个RTT,流水方式则将请求按照流水线方法发送,平均一个引用对象小于一个RTT。
HTTP报文
HTTP请求报文
提交表单输入
POST方式:网页通常包括表单输入,包含在实体主题中的输入被提交到服务器。
URL方式:用GET方法,输入通过请求行的URL字段上载www.somesite.com/animalsearch?monkeys&banana
方法类型
HTTP/1.0:
- GET
- POST
- HEAD
HTTP/1.1在上述基础上多了:
- PUT
- DELETE
HTTP响应报文
用户-服务器状态:cookies
服务器希望限制用户的访问,或者希望把内容与用户身份联系起来。为此,HTTP使用了cookies。
cookies4个组成部分:
- 在HTTP响应报文中有一个cookie的首部行
- 在HTTP请求报文含有一个cookie的首部行
- 在用户端系统中保留有一个cookie文件,由用户的浏览器管理
- 在Web站点有一个后端数据库
简而言之,Cookies帮助网站维护用户的状态。
Web缓存
目标:不访问原始服务器,就满足客户的请求。
用户的浏览器将通过缓存访问Web,浏览器将所有的HTTP请求发给缓存,如果缓存中存在相应对象,则直接返回;如果不存在,则访问原始服务器。
缓存既是客户端又是服务器。安装缓存能够降低客户端的请求相应时间,减少一个机构内部网络与Internet接入链路上的流量。大量使用缓存,可以使较弱的ISP也能提供有效内容。
条件GET方法
目标:如果缓存中的对象拷贝不是最新的,就不发送对象。
缓存器:在HTTP请求中指定缓存拷贝的日期。
服务器:如果缓存器指定的对象没有被修改过,则只返回头部304 not modified;如果修改过,则返回数据。
FTP文件传输协议
用户或主机通过FTP客户端的FTP用户接口和FTP服务器进行文件传输。FTP的客户端和服务端分别与其本地的文件系统关联。
FTP使用TCP协议,它的控制连接与数据连接是分开的。控制连接端口号为21,数据连接为20。
客户端通过控制连接获得身份确认,并发送命令浏览远程目录。
服务器收到一个文件传输命令时,打开一个到客户端的数据连接,传输完成后关闭连接。
控制连接仅发送指令,是宽带外的传输。FTP服务器是有状态的服务器,维护用户的状态信息。
电子邮件
电子邮件由三个主要部分组成:
- 用户代理
- 邮件服务器
- 简单邮件传输协议:SMTP
用户代理又名“邮件阅读器”,负责撰写、编辑和阅读邮件。输出和输入邮件保存在服务器上。
邮件服务器
邮件服务器内的邮箱管理和维护发送给用户的邮件。
输出报文队列保持待发送邮件报文。
邮件服务器之间使用SMTP协议来发送email报文。
SMTP
使用TCP在CS间传送报文,端口为25。
SMTP是一种直接传输的协议,传输有三个阶段:
- 握手
- 传输报文
- 关闭
报文必须为7位ASCII码。
SMTP使用持续性连接,使用CRLF.CRLF决定报文的尾部。
HTTP是一个拉协议,即用户从Web上拉取信息。
SMTP是一个推协议,邮件服务器把文件推到别的服务器上。
HTTP:每个对象封装在各自的响应报文中。
SMTP:多个对象包含在一个报文中。
邮件报文格式
首部,空行,主体,只能说ASCII码字符。
MIME:多媒体邮件扩展(multimedia mail extension), RFC 2045, 2056
在报文首部用额外的行申明MIME内容类。
邮件访问协议
用户代理通过SMTP将邮件发送给发送方的邮件服务器,发送方邮件服务器同样使用SMTP将邮件发送给接收方的邮件服务器。
然而,如果接收方用户想要访问邮件,就不能使用推协议SMTP。这里有三种常用协议:
- POP3:邮局访问协议,确认用户身份并下载
- IMAP:Internet邮件访问协议,特性更多,在服务器上处理存储的报文
- HTTP:不赘述,使用方便
POP3使用:
- 下载并删除模式。如果改变客户机,则用户本人无法再阅读邮件。
- 下载并保留模式。不同的客户机上为报文的拷贝。
POP3在会话中是无状态的。
IMAP将每个报文与一个文件夹联系起来。允许用户用目录来组织报文,读取报文组件。IMAP是有状态的。
DNS域名系统
DNS的必要性:
- IP地址可以标识主机、路由器,但是IP地址不好记忆
- DNS负责将人类对计算机的“字符串标识”转化为二进制网络地址,即能进行主机名到IP地址转换的目录服务
DNS提供的服务:
- 主机名到IP地址的转换
- 主机别名
- 邮件服务器别名
- 负载分配
DNS集中式设计的问题:
- 单点故障,如果集中式站点崩溃,整个因特网瘫痪
- 通信容量,集中式站点要处理所有的DNS查询
- 远距离的集中式数据库,地理位置过远导致的时延
- 维护,需要维护庞大的数据库和频繁的数据更新
分布式、层次数据库
大致说来,有3种类型的DNS服务器:根DNS服务器、顶级域(Top Level Domain, TLD) DNS服务器和权威DNS服务器。它们按照层次结构组织。
假定一个DNS客户要决定主机名www. amazon, com的IP地址。粗略说来,将发生下列事件。
客户首先与根服务器之一联系,它将返回顶级域名com的TLD服务器的IP地址。
该客户则与这些TLD服务器之一联系,它将为 amazon, com 返回权威服务器的IP地址。
最后,该客户与amazon, com权威服务器之一联系,它为主机名www. amazon, com返回其IP地址。
根名字服务器提供TLD服务器的IP地址。
TLD服务器提供权威DNS服务器的IP地址。
权威DNS服务器提供上具有公共可访问主机的DNS记录及其映射的IP地址。
本地DNS服务器:不属于该服务器的层次结构。当一个主机发起一个DNS查询时,查询被送到其本地DNS服务器。本地DNS服务器起着代理的作用,将查询转发到层次结构中。
递归查询和迭代查询
当与本地名字服务器不能解析名字时,联系根名字服务器,顺着根-TLD找到权威名字服务器。
递归查询:将名字解析的负担都放在当前联络的名字服务器上。
根服务器的负担很重。因此采用迭代查询。
迭代查询:根服务器不返回最终结果,而是下一个DNS服务器的地址。最有由权威名字服务器直接返回解析结果。
当前联络的服务器给出可以联系的服务器的名字。
DNS缓存
一旦名字服务器学到了一个映射,就将该映射缓存起来。TLD服务器通常都在本地服务器中缓存着。
可能存在的问题:如果情况变化,缓存结果和权威资源记录不一致。
解决方案:TTL(默认2天)
DNS记录
DNS记录维护域名-IP地址的映射关系。称为RR。
RR格式:(域名,生存时间,type类别,value值)
Type有四种:
- A,Name为主机,Value为IP
- NS,Name为域名,Value为该域名的权威DNS域名
- CNAME,Name为规范名字的别名,Value为规范名字
- MX,Value为name对应的邮件服务器的名字
DNS协议,报文
查询和响应报文的报文格式相同。
插入记录
在上级域的名字服务器中增加两条记录,指向这个新增的子域的域名和域名服务器的地址。
在新增子域的名字服务器上运行名字服务器,负责本域的名字解析。
P2P文件传输
集中目录
peer连接时访问集中服务器,通过服务器发送自己的IP地址和内容。
集中目录有单点故障、性能瓶颈和版权问题。
泛洪查询Gnutella
不存在中心服务器。开放文件共享协议。一个对等方通常连接的节点少于10个。
Gnutella协议使用户向相邻节点发送查询报文,相邻节点再将这个查询报文转发给它的相邻节点。如果民众,则以反方向返回查询命中报文。称为泛洪查询。
通过限制范围使得泛洪查询能够中止。
对等方X必须首先发现某些已经在覆盖网络中的其他对等方:使用可用对等方列表。
自己维持一张对等方列表(经常开机的对等方的IP)联系维持列表的Gnutella站点。
X接着试图与该列表上的对等方建立TCP连接,直到与某个对等方Y建立连接。
X向Y发送一个Ping报文,Y转发该Ping报文。所有收到Ping报文的对等放以Pong报文响应。
X收到许多Pong报文,能建立其他的TCP连接。
层级网络
每个对等方要么是一个组长,要么隶属于一个组长
对等方与其组长之间有TCP连接,组长对之间有TCP连接
组长跟踪其所有的孩子的内容
组长与其他组长联系
- 转发查询到其他组长
- 获得其他组长的数据拷贝
扩展性
从一台服务器分发大小为F的文件到N个peer需要多少时间。
CS模式:
- 由服务器发送给peer,服务器必须顺序传输N个文件拷贝。耗时NF/u,这里的u是服务器上载速度。
- 客户端下载一个文件拷贝,带宽最小的客户端下载速度为dmin,耗时F/dmin。
- 因此cs方法耗时一定大于等于上述两者的较大值。
P2P模式:
- 服务器最少需要上载一份拷贝。耗时F/us。
- 客户端下载拷贝,耗时F/dmin。
- 所有客户端总下载量NF,最大上载带宽是us+u1+u2+...+un,耗时NF/(us+u1+u2+...+un)。
- p2p方法耗时大于等于上述三者的较大值。
因此扩展节点对于CS模式会导致服务器上载速度变慢,对P2P影响较小。因为文件数变多的同时,带宽也在变大。
BitTorrent
BitToiTent是一种用于文件分发的流行P2P协议。参与一个特定文件分发的所有对等方的集合被称为一个洪流。在一个洪流中的对等方彼此下载等长度的文件块。当一个对等方首次加入一个洪流时,它没有块。随着时间的流逝,它累积了越来越多的块。当它下载块时,也为其他对等方上载了多个块。一旦某对等方获得了整个文件,它也许(自私地)离开洪流,或(大公无私地)留在该洪流中并继续向其他对等方上载块。同时,任何对等方可能在任何时候仅具有块的子集就离开该洪流,并在以后重新加入该洪流中。
当一个新的对等方Alice加入该洪流时,追踪器随机地从参与对等方的集合中选择对等方的一个子集(为了具体起见,设有50个对等方),并将这50个对等方的IP地址发送给Alice。Alice持有对等方的这张列表,试图与该列表上的所有对等方创建并行的TCP连接。
Alice一开始没有块,通过主键积累获得4个块之后,向洪流申请稀缺的块,以补齐洪流中的稀缺资源。
其他peer向Alice申请稀缺块时,Alice选择4个peer发送块,同时4个peer汇报给Alice最大带宽服务,其他peer被Alice阻塞,不提供贷款。每隔10秒重新评估一次,选择提供自己最大带宽的4位发送块。称为tit-for-tat发送策略。
每隔30秒,随机选择其他peer节点,发送块,以疏通这个节点。
Skype
层级网络结构。拥有客户端SC节点和超级节点SN。超级节点之间相连,每个客户端都根一个超级节点相连。
启动Skype时,SC节点在SN节点的列表中注册并上线。
创建会话时,SC联系SN申请被呼叫方的ID,SN联系其他SN找到被呼叫方的地址然后返回给原SC。
SC通过TCP协议呼叫被呼叫SC。
第三章 传输层
传输层概述
传输服务和协议
为运行在不同主机上的应用进程提供逻辑通信。传输协议运行在端系统:
- 发送方:将应用层的报文分成报文段,然后传递给网络层
- 接收方:将报文段重组成报文,然后传给应用层
网络层提供主机之间的逻辑通信,传输层提供进程间的逻辑通信,它依赖于网络层的服务,并对网络层的服务增强,如:数据丢失,乱序,加密。
传输层的协议有:
- TCP:可靠保序的传输,具有多路复用、解复用、拥塞流量控制,连接等功能
- UDP:不可靠不保序的传输,具有多路复用、解复用
两个协议都不保证延时和带宽。
多路复用和解复用
在发送方主机多路复用,从多个套接字接收来自多个进程的报文,根据套接字对应的IP和端口号对报文段用头部加以封装。
在接收方主机多路解复用,根据报文段头部信息中的IP端口,将接收到的报文段发给正确的套接字和对应的应用进程。
多路解复用工作原理
主机收到IP数据报,每个数据报有源IP地址和目标地址,每个数据段承载一个传输层报文段。每个报文段有一个源端口号和目标端口号。主机联合使用IP地址和端口号将报文段发送给合适的套接字。
UDP多路解复用:创建一个UDP套接字时,运输层自动地为该套接字分配一个端口号。
主机A的运输层创建一个运输层报文段,其中包括应用程序数据、源端口号(19157)、目的端口号(46428)和两个其他值。
运输层将得到的报文段传递到网络层。网络层将该报文段封装到一个IP数据报中,并尽力而为地将报文段交付给接收主机。如果该报文段到达接收主机B,接收主机运输层就检查该报文段中的目的端口号(46428)并将该报文段交付给端口号46428所标识的套接字。
一个UDP套接字是由一个二元组全面标识的,该二元组包含一个目的IP地址和一个目的端口号。因此,如果两个UDP报文段有不同的源IP地址和/或源端口号,但具有相同的目的IP地址和目的端口号,那么这两个报文段将通过相同的目的套接字被定向到相同的目的进程。
源端口号作为返回地址的一部分。
TCP多路解复用:TCP套接字是由一个四元组(源IP地址,源端口号,目的IP地址,目的端口号)来标识的。主机使用全部4个值来将报文段定向(分解)到相应的套接字。两个具有不同源IP地址或源端口号的到达TCP报文段将被定向到两个不同的套接字,除非TCP报文段携带了初始创建连接的请求。
用户数据报协议UDP
报文可能丢失,乱序。UDP是无连接的协议,不存在握手,每个UDP报文段都被独立地处理。
要在UDP上实现可行可靠传输需要在应用层增加可靠性,或者应用特定的差错恢复机制。
UDP通过不建立连接,以及很小的报文段头部,无控制使得可以快速发送报文段。
UDP校验和
检测在被传输报文段中的差错。
发送方:
- 将报文段内容视为16bit的整数
- 校验和:所有的报文段的16bit的加法和,按位取反
- 发送方将校验和放在UDP的检验和字段
接收方:
- 计算接收到的报文段的校验和
- 检查计算出的检验和是否与校验和字段的内容相等,如果不相等就是出错,如果相等则没有检测到差错(但是可能存在没检测到的错误)
计算求和是,如果产生超出范围的进位,则必须回卷到末尾再次相加,称为进位回卷。
可靠数据传输原理
信道的不可靠特点决定了可靠数据传输协议( rdt )的复杂性。
Rdt1.0:在可靠信道上的可靠数据传输
假设信道完全可靠,不存在比特出错和分组丢失。
那么发送方直接将数据发送到下层信道,接收方从下层信道接收数据。
Rdt2.0:具有bit差错的信道
下层信道可能将bit翻转,这时候需要用校验和来检测bit差错。
利用发送ACK、NAK的通信方式告知发送方分组是否被正确接收。
流程如下:
- 发送方建立差错控制编码,存放在分组头部
- 接收方使用控制编码检错
- 接收方反馈给发送方控制报文ACK、NAK
- 发送方收到ACK,则发送结束;收到NAK则重新发送
Rdt2.0具有致命缺陷,即ACK、NAK通信可能也出错。
Rdt2.1:处理出错的ACK/NAK
在数据分组中添加一新字段,让发送方对其数据分组编号,即将发送数据分组的序号放在该字段。于是,接收方只需要检查序号即可确定收到的分组是否是重传来的。
流程如下:
- 发送方给分组编号,传输给接收方
- 接收方判断文件是否出错,返回ACK或者NAK
- 如果发送方收到的不是ACK,那么重传分组
- 接收方如果收到的分组编号和上次收到的分组编号一致,说明这是一次重传,选择正确的分组保留一遍即可
Rdt2.2:无NAK协议
和2.1相同,但只是用ACK。对每个ACK需要编号。
接收方对最后正确接收的分组发ACK+序号。
当发送方收到重复的ACK,则重传当前分组。
Rdt3.0:具有bit差错和分组丢失的信道
新假设:下层信道可能丢失分组。
方法:发送方等待接收ACK,如果超时还没收到ACK则重传。
接收方必须明确指明被接收的序列号。
rdt3.0在链路容量较大的情况下性能很差。
通过流水线提高链路利用率,在一次RTT时间内完成多个分组的发送:
流水线发送必须增加序号的范围,发送方和接收方要有确认缓冲区。
GBN协议
在回退N步协议中,允许发送方发送多个分组而不需等待确认。但他受限于流水线中未确认的分组数不能超过最大值N。
这个N被称为窗口长度,因此GBN协议也常被称为滑动窗口协议。
一个分组的序号承载在首部的一个固定长度的字段中,假设bit位数为k,则序号范围是0~2^k-1。序号空间被看作是这个范围的环。
GBN发送方必须响应三种类型的事件:
- 上层调用
- 收到一个ACK
- 超时事件
GBN接收方的动作:
- 如果序号为n的分组被正确接收到,并且顺序正确,则接收方为分组n发送一个ACK,并将该分组中的数据部分交付到上层
- 其他情况下,丢弃该分组,为最近按序接收的最后一个分组重新发送ACK
如图所示,GBN维护一个长度为4的滑动窗口:
- 首先发送方连续发送分组0123
- 接收方成功接收0,1,并成功发送回ACK0,ACK1
- 接收方收到ACK0,发送分组4,接收到ACK1,发送分组5
- 由于分组2丢失,接收方收到了发送分组3,但是上一个分组序号是1,因此丢弃3号,发送回ACK1
- 后续接收到45时,由于上一个按序的分组序号是1,全部丢弃,发送回ACK1
- 这时,发送方没有收到ACK2,分组2重发
- 接收方收到分组2,返回ACK2
- 发送方在接收到ACK2前重新发送分组345
...
SR选择重传
当窗口长度和带宽时延积都很大时,GBN协议性能会不佳。单个分组的差错就能够引起GBN重传大量分组,许多分组根本没有必要重传。随着信道差错率的增加,流水线可能会被这些不必要重传的分组所充斥。
SR通过让发送方仅重传那些它怀疑在接收方出错的分组,避免不必要的重传。
SR接收方将确认一个正确接收的分组而不管其是否按序。失序的分组将被缓存直到所有丢失分组(即序号更小的分组)皆被收到为止,这时才可以将一批分组按序交付给上层。
SR协议的窗口大小最大为2^(n-1),n为bit位数。而GBN的窗口大小最大为2^n-1。
GBN适用于出错率低的场景,因为其算法比SR简单。
SR适用于延迟大、贷款大的场景,代价比GBN小。
面向连接的传输TCP
序号和确认号
TCP报文段首部中两个最重要的字段是序号字段和确认号字段。这两个字段是TCP可靠传输服务的关键部分。
序号是报文段首字节在字节流的编号,确认好是期望另一方收到的下一个字节的序号。
没有规定接收方如何处理乱序报文段。
TCP的RTT和超时
超时定时器应该比RTT长。但是应该适中,如果太短则会导致不必要的重传,太长则对丢失反应过慢。
SampleRTT:测量从报文段发出到收到的确认的时间。
对多值求平均。
EstRTT_n=(1-a)*EstRTT_{n-1}+a*SampleRTT
a一般取0.125。
一般设置超时时间为RTTn+安全边界时间。
DevRTT_n=(1-b)*DevRTT_{n-1}+b*|SampleRTT-EstRTT|
超时间隔为:
Timeout = EstRTT+4*DevRTT
可靠数据传输
TCP在IP不可靠服务基础上建立了rdt:
- 管道化(流水线)的报文段
- 累计确认(GBN)
- 单个重传定时器(GBN)
- 对于乱序没有规范
通过超时、重复确认触发重传。
对于忽略了重复确认、流量拥塞控制的TCP发送方而言:
- 从应用层接收数据后,创建报文段并添加序号,启动定时器并发送
- 如果超时没收到确认则重传窗口内序号最小的报文段,重新启动定时器
- 收到确认后,更新已被确认的报文序号,如果还有未被确认的报文段,重新启动定时器
ACK = Seq + Bytes
快速重传
超时周期往往太长,可以通过重复的ACK来检测报文段丢失。
如果发送方收到统一数据的3个冗余ACK,重传最小序号的段。
一次发送多个分组,如果其中一个分组丢失,则接收方在每次收到后面的分组时都会返回丢失分组的前一个ACK序号。如果发送方收到连续3个一样的ACK序号则立即重传。可以减少延时。
流量控制
接收方控制发送方,不让发送方发送的太多、太快以至于让接收方的缓冲区溢出。
接收方在其向发送方的TCP段头部的rwnd字段“通告”其空闲buffer大小,发送方限制未确认的字节个数≤接收方发送来的rwnd值。
TCP连接管理
在正式交换数据之前,发送方和接收方握手建立通信关系:
- 同意建立连接
- 同意连接参数
三次握手建立连接:
- 客户端向服务器发送TCP SYN段
- 服务端收到SYN,回复SYNACK
- 客户端收到SYNACK,回复ACK段,这个段可以包含数据
关闭连接:
- 客户端向服务器发送TCP FIN控制段
- 服务器收到FIN,回复ACK,准备关闭连接并发送FIN
- 客户端收到ACK,进入等候阶段,将会在收到FIN的时候回复ACK
- 服务端收到ACK,关闭连接
第三次握手主要为了防止已失效的连接请求报文段突然又传输到了服务端,导致产生问题。
比如客户端A发出连接请求,可能因为网络阻塞原因,A没有收到确认报文,于是A再重传一次连接请求。
连接成功,等待数据传输完毕后,就释放了连接。
然后A发出的第一个连接请求等到连接释放以后的某个时间才到达服务端B,此时B误认为A又发出一次新的连接请求,于是就向A发出确认报文段。
如果不采用三次握手,只要B发出确认,就建立新的连接了,此时A不会响应B的确认且不发送数据,则B一直等待A发送数据,浪费资源。
拥塞控制原理
拥塞:“太多的数据需要网络传输,超过了网络的处理能力”,与流量控制不同
拥塞的表现:
- 分组丢失 (路由器缓冲区溢出)
- 分组经历比较长的延迟(在路由器的队列中排队)
原因:
- 对资源(带宽、缓存)需求的总和大于可用资源
- 网络中资源供应不足,导致网络吞吐量随着负荷上升而下降
拥塞控制就是防止过多的数据涌入网络。
拥塞控制方法
端到端拥塞控制:端系统根据延迟和丢失事件判断是否有拥塞,TCP采用此方法。
网络辅助的拥塞控制:路由器反馈给端系统信息,提供发送端应该采用什么速率。
TCP拥塞控制
感知拥塞
如果某个段超时了,那么就判定为拥塞,因为拥塞概率大于出错概率。
如果收到了某个段的3次重复ACK,说明网络轻微拥塞。
控制速率
维持一个拥塞窗口的值CongWin,发送端限制已发送但是未确认的数据量小于等于CongWin。
超时:CongWin变为1MSS,进入SS阶段升到上一个CongWin的一半,然后进入CA阶段
三个重复ACK:CongWin将为一半,进入CA阶段
SS阶段:每个RTT加倍
CA阶段:每个RTT+1
发送端控制发送但是未确认的量同时也不能够超过接收窗口,满足流量控制要求SendWin=min{CongWin, RecvWin}同时满足拥塞控制和流量控制要求.
慢启动:
- 启动时CongWin=1MSS
- 指数型增加发送速率知道发生丢失
AIMD:
- 丢失事件后将CongWin将为1,然后SS直到上一个CongWin的一半
- 进入CA阶段
TCP吞吐量
假设W为发生丢失时的窗口尺寸,那么平均窗口尺寸是0.75W,平均吞吐量是0.75W/RTT。
TCP公平性
公平性目标: 如果 K个TCP会话分享一个链路带宽为R的瓶颈,每一个会话的有效带宽为 R/K。
如果有两个会话竞争TCP,那么两个连接在CA阶段的CongWin都+1,吞吐量也按照1:1增加。发生丢失时,二者都减半。然后继续达到CA模式。最终它们的吞吐量会趋于1:1。
第四章 网络层
网络层的主要任务是实现网络互联。
网络层解决的问题:
- 网络层向运输层提供什么服务(可靠/不可靠)
- 网络层寻址问题
导论
网络层服务
在发送主机和接收主机对之间传送段。在发送端将段封装到数据报中,在接收端将段上交给传输层实体。网络层协议存在于每一个主机和路由器。由路由器检查每一个经过它的IP数据报的头部。
网络层功能
转发:将分组从路由器的输入接口转发到合适的输出接口。
路由:使用路由算法决定分组的路径。
连接建立
在分组传输之前,在两个主机之间,在通过一些路由器所构成的路径上建立一个网络层连接。
与传输层的服务区别
网络层服务体现在主机间,涉及到其中的路由器。而传输层服务只体现在进程之间,跟路由无关。
网络服务模型
网络层对于单个数据报提供可靠传输、可接受延迟保证的服务。对于数据报流提供保序、保证最小带宽、保证分组之间的延迟差的服务。
虚电路和数据报的分组传输方式
虚电路提供有连接的服务。数据报提供无连接的服务。
路由器组成
路由:运行路由选择算法/协议生成路由表。
转发:从输入到输出链路交换数据报,根据路由表进行分组转发。
输入端口功能
物理层:Bit级接收。
数据链路层:链路层协议动作、解封装。
分布式交换:根据数据报头部信息查找合适的输出端口。
最长前缀匹配
当给定目标地址查找转发表时,采用最长地址前缀匹配的目标地址表项。
交换结构
将分组从输入缓冲区传输到合适的输出端口。
交换速率:分组按照该速率从输入传输到输出,通常是链路速率的若干倍。N个输入端口:N被输入线路速率。
三种交换结构:
- 内存
- 总线
- 互联网络
第一代路由器通过内存交换,由CPU直接控制。分组被拷贝到系统内存,CPU从头部提取目标地址查找转发表。找到对应的输出端口,拷贝到输出端口。转发速率被内存的带宽限制,一次只能转发一个分组。
通过总线交换的方式会产生交换速度受限于总线带宽的问题。
通过互联网络的交换可以同时并发转发多个分组,克服带宽限制。
输出端口
当数据报从交换机构的到达速度比传输速率快就需要输出端口缓存。由调度规则选择排队的数据报进行传输。
缓存值,N为流的数量,C为链路容量,缓存大小等于
\frac{RTT*C}{\sqrt{N}}
调度机制
选择下一个通过链路传输的分组。
FIFO、优先权、RR、WFQ(带权的RR,受到服务时间和权重成正比)。
IP:因特网协议
IP分片和重组
网络链路有MTU(最大传输单元),大的IP数据报在网络上被分片,具有相同的ID,不同的偏移量,最后一个分片记为0。
分片重组在目标主机上进行。IP头用于标识、排序相关分片。
比如4000字节的数据,其中20字节为头部,MTU为1500字节,则:
- 第一片:20字节头部,1480字节数据,偏移量0
- 第二片:20字节头部,1480字节数据,偏移量1480/8=185
- 第三片:20字节头部,1020字节数据,偏移量2960/8=370
IPv4地址
IP地址是由4组8位bit,也就是32位bit标识的,对主机或者路由器的接口编址。
一个IP和一个接口相关联。
子网
IP地址:
- 子网部分占据高位bits
- 主机部分占据低位bits
子网内的节点的IP地址高位部分相同。
子网内各主机可以在物理上相互直接到达。
要判断一个子网,将每一个接口从主机或者路由器上分开,构成了一个个网络的孤岛,这个孤岛就是一个子网。
CIDR无类域间路由
子网部分可以在任意的位置,地址格式a.b.c.d/x,x是子网号的长度。
获得IP地址
两种方法:
- 系统管理员将地址配置在一个文件中
- DHCP,从服务器动态获得一个IP
DHCP:允许主机在加入网络的时候,动态地从服务器那里获得IP地址:
可以更新对主机在用IP地址的租用期-租期快到了
重新启动时,允许重新使用以前用过的IP地址
支持移动用户加入到该网络(短期在网)
DHCP返回:
- 分配的IP
- 第一跳路由器的IP地址(默认网关)
- DNS服务器的域名和IP地址
- 子网掩码
通过从ISP获得地址块中分配的一个小地址快得到网络的子网。
层次编址:将多个子网汇聚在一个大的子网中。通过将网络前缀缩短实现。
通过ICANN分配地址、管理DNS和分配域名,使得ISP获得一个地址块。
NAT网络地址转换
连接内网和外网。NAT需要构建NAT转换表,既要存广域网(WAN,外网)也要存局域网(LAN,内网)的ip地址和端口号。
动机: 本地网络只有一个有效IP地址,因为所有子网的数据报最终都要通过一个端口路由到外部:
- 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备--省钱
- 可以在局域网改变设备的地址情况下而无须通知外界
- 可以改变ISP(地址变化)而不需要改变内部的设备地址
- 局域网内部的设备没有明确的地址,对外是不可见的--安全
实现NAT路由器必须有:
- 外出数据包:替换源地址和端口号为NATIP和新的端口号
- 记住每个转换替换对
- 进入数据包:替换目标IP地址和端口号,通过上述记住的表实现
NAT的问题:
- 路由器只应该对第3层做信息处理,而这里对端口号(4层)作了处理
- 违反了end-to-end 原则
-
- 端到端原则:复杂性放到网络边缘
-
- 无需借助中转和变换,就可以直接传送到目标主机
-
- NAT可能要被一些应用设计者考虑, eg, P2P applications
-
- 外网的机器无法主动连接到内网的机器上
NAT穿越:如果客户端要连接在NAT后面的服务器,应该如何操作。
方案1:静态配置NAT。转发进来的对服务器特定端口连接请求。(打表)
方案2:IGD协议,允许有NAT服务的主机可以获知网络的公共IP地址,列举存在的端口映射并删改。
方案3:中继,NAT后面的服务器建立和中继的连接,中继和客户端连接,然后两个连接之间桥接。
ICMP
互联网控制信息协议,由主机、路由器、网关用于传达网络层控制信息,如:错误报告、Echo请求和回复。
ICMP处在网络层,但是是在IP协议的上面,ICMP消息由IP数据报承载。
Traceroute
跟踪一个分组从原点到终点的路径,使用了ICMP时间超过差错报告报文。
源主机发送一系列UDP给目标主机
第一个:TTL =1
第二个:TTL=2, etc.
以及一个不可达的端口号
当nth数据报到达nth路由器,路由器抛弃数据报,然后发送一个给源的ICMP报文 (type 11, code 0),报文包括了路由器的名字和IP地址。
当ICMP报文到达,源端计算RTT。对于一个n,Traceroute尝试3次。
如果UDP段最终到达目标主机,目标返回给源主机ICMP“端口不可达”报文。源主机获得这个报文时停止。
IPv6
IPV4地址用完了,从根本上增加ip地址数目,之前讲的NAT和CIDR也只是在IPV4的基础上扩展了IPV4地址数目,治标不治本。
如果是ipv6的数据报到了ipv4,就用ipv4重新封装,把ipv6数据报前面加上ipv4伪装成ipv4数据报继续传输,直至到了ipv6路由再解开ipv4伪装,中间IPv4路由器的通信称为隧道。
路由选择算法
网络的图抽象
对于两个网络间,将路由器视为结点,路由器之间的链路视为边。那么有:
图G=(N,E)
路由器集合N={u,v,w,x,y,z}
带权无向链路集合E={...}
最优化原则
汇集树:一个结点到其他结点的最优路径形成的树。
路由选择算法的原则
正确性(correctness):算法必须是正确的和完整的,使分组一站一站接力,正确发向目标站;完整:目标所有的站地址,在路由表中都能找到相应的表项;没有处理不了的目标站地址;
简单性(simplicity):算法在计算机上应简单:最优但复杂的算法,时间上延迟很大,不实用,不应为了获取路由信息增加很多的通信量;
健壮性(robustness):算法应能适应通信量和网络拓扑的变化:通信量变化,网络拓扑的变化算法能很快适应;不向很拥挤的链路发数据,不向断了的链路发送数据;
稳定性:产生的路由不应该摇摆;
公平性:对每一个站点都公平;
最优性:综合指标最优;
路由算法分类
全局:所有的路由器拥有完整的拓扑和边的代价的信息。LS算法。
分布式:路由器只知道与它有物理连接关系的邻居路由器的相应信息。DV算法。
静态:路由随时间变化缓慢;
动态:变化很快,根据链路代价变化,自适应。
链路状态路由选择
通过Dijkstra算法找到最短路径。
符号:
- c(i,j):从i到j的链路cost
- D(v):从源结点到v的路径cost
- p(v):从源节点到v路径的v的前一个结点
- N':当前已经知道最优路径的结点集合
对于每一个结点,使用(D(v),p(v))标记。
初始化:
- 除了源结点,所有的结点都是临时结点
- 更新与源相邻的结点cost,其余不相邻的均为无穷
然后,从所有临时节点中找一个cost最小的临时节点,将它变成永久结点。维护所有在临时结点中的结点,更新它们的D(v)。
对于n个结点,算法的复杂度为O(n^2),可以优化到nlogn。
如果cost是拥塞程度,最优路径会一直改变。
距离矢量路由选择
根据贝尔曼福德算法,dx(y)=min{c(x,v)+dv(y)}。
每一个结点通过测量得到和自己邻居的距离,然后等待获取邻居的距离矢量表,更新自己的距离矢量,如果DV表变更了,把表转发给邻居。
DV无穷计算问题
好消息传播得很快,坏消息传播很慢。
例如:
- ABCDE构成5点4线的连接
- 此时A突然下线,和B断联,B通过C得知A的距离
- C和A不是邻居,通过B得知A的距离
- 无限次计算下去,才知道A断联了
这样会花费很久才知道一个结点是不可达的。
水平分裂算法
同上情况,C要经过B才能到达A,那么C给B报告它到A的距离为INF,但是报告给D的是真实距离。
D要经过C才能到达A,报告给C的是距离A为INF,报告给E的是真实距离。
B测量出到A的距离是INF,询问C的DV表,也得知是INF,所以B到A为INF。
C从BD得知距离A是INF,所以C到A也是INF。
以此类推,坏消息通过一次交换的速度传播。
水平分裂会在某些存在环路的情况下失败。
LS DV比较
消息复杂度,LS发送报文O(nE)个,DV之和邻居交换信息。
收敛时间LS更快,DV可能存在环路、无限计算问题。
健壮性而言,LS更强,结点会通告不正确的链路待见,错误信息之影响局部。
DV的结点会通告全网不正确的路径代价,因此错误会扩散到全网。
层次路由
平面路由的问题
- 规模巨大的网络中,路由信息的存储、传输和计算代价巨大
-
- DV: 距离矢量很大,且不能够收敛
-
- LS:几百万个节点的LS分组的泛洪传输,存储以及最短路径算法的计算
- 管理问题:
-
- 不同的网络所有者希望按照自己的方式管理网络
-
- 希望对外隐藏自己网络的细节还希望和其它网络互联
层次路由:将互联网分成一个个AS(路由器区域),一个AS用AS Number(ASN)唯一标示,一个ISP可能包括1个或者多个AS。
于是路由变成了AS内部路由和AS间路由。不同的AS可能运行着不同的内部网关协议。
网关路由器:AS边缘路由器,可以连接到其他AS。
因特网路由协议
内部网关协议IGP包括:
- RIP:路由信息协议
- OSPF:开放最短路径优先
- IGRP:内部网关路由协议
RIP
DV:在邻居间每个30秒交换通告报文,如果有路由改变或者对方请求的情况下,立即发送。
RIP允许一条路由最多包含15个路由器,也就是距离16表示不可达。每个通告包括最多25个目标子网。
如果180秒没有收到通告信息,说明邻居或者链路失效。
通告报文通过UDP报文传送,周期重复。
OSPF
Open标准:公开可获得。
使用LS算法,LS分组在一个AS内部分发,全局网络拓扑、代价在每一个结点中都保持。
OSPF通告信息中携带:每一个邻居路由器一个表项,通告会通过泛洪传遍AS全部。在IP数据报上直接传送OSPF报文。
OSPF具有RIP没有的高级特性:
- 安全
- 允许有多个相同代价的路径(多个解)
- 对于每一个链路,对于不同的TOS有多重代价矩阵
层次性OSPF路由
2个级别的层次性: 本地, 骨干
- 链路状态通告仅仅在本地区域Area范围内进行
- 每一个节点拥有本地区域的拓扑信息,关于其他区域,知道去它的方向,通过区域边界路由器(最短路径)
ISP间路由协议:BGP
BGP:自治区域间路由协议标准。
eBGP:从相邻AS获得子网可达信息。
iBGP:将获得的子网可达信息传遍AS内部的所有路由器。
基于距离矢量算法。
BGP会话: 2个BGP路由器(“peers”)在一个半永久的TCP连接上交换BGP报文。
转发表表项由BGP,OSPF共同决定。
热土豆路由
选择具备最小内部区域代价的网关作为出口,不关心AS间代价。
为什么内部网关协议和外部网关协议如此不同
AS间协议的管理员需要控制通信路径,AS内则不用,越快越好。
AS间的规模较大,要通过协议支持全网转发,AS内规模小,所以不用。如果AS规模变大,拆分成好几个AS即可。
AS间协议的策略重要性大于性能,AS内则相反。
组播路由
广播路由是一对多的通信,一个范围内所有的终端。小范围容易实现,但选择性差,每个主机都会收到自己不需要的包,增加处理开销以及无效数据流的传递。且对于大范围网络代价太高。
https://blog.csdn.net/weixin_45555522/article/details/123886839
第五章 链路层和局域网
网络层解决了一个网络如何到达另外一个网络的路由问题,
在一个网络内部如何由一个节点(主机或者路由器)到达另外一个相邻节点
- 链路层的点到点传输层功能
导论
数据链路层负责从一个节点通过链路将(帧中的)数据报发送到相邻的物理节点。
数据报(分组)在不同的链路上以不同的链路协议传送:
- 第一跳链路:以太网
- 中间链路:帧中继链路
- 最后一跳802.11
规定了解读方式:多少个电信号算一组?每个信号位有何意义?
链路层服务
成帧、链路接入:
- 将数据报封装在帧中,加上帧头、帧尾部
- 如果采用的是共享性介质,信道接入获得信道访问权
- 在帧头部使用MAC地址表示源和目的(与IP不同)
rdt服务。在高差错、无线链路上出错率高,如果在链路层不做差错控制工作,漏出去的错误比较高;到了上层如果需要可靠控制的数据传输代价会很大。
流量控制、错误检测、差错纠正、半双工数据传输。
以太网规定,一组电信号构成一个数据包,叫做”帧”(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。
“标头”包含数据包的一些说明项,比如发送者、接受者、数据类型等等;”数据”则是数据包的具体内容。
“标头”的长度,固定为18字节。”数据”的长度,最短为46字节,最长为1500字节。因此,整个”帧”最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
链路层在哪里实现
在主机、路由器、交换机的每个端口上实现链路层。
适配器上或者芯片组上也能实现链路层。
主机系统总线、硬件、软件固件综合体。
适配器通信
发送方:
- 在帧中封装数据报
- 加上差错控制编码,实现RDT和流量控制功能等
接收方:
- 检查有无出错,执行RDT和流量控制功能等
- 解封装数据报,将其交给上层
差错检测和纠正
错误检测
EDC 差错检测和纠正位,D 数据由差错检测保护,可以包含头部字段。
更长的EDC字段可以得到更好的检测和纠正效果
奇偶校验
单bit奇偶校验检测单个bit级的错误。二维奇偶校验检测和纠正单个bit错误。
事先通信双方约定是采用奇校验还是偶校验,假设采用偶校验,则发送方在信息后面附加一位使所有信息(包括校验位)中一共有偶数个1,在接收方检验信息中1的个数,若为奇数个则判定出错。只能检错不能纠错,当发生偶数个错误时,不能检测出来。
发展出了二维的双向奇偶校验。将要发送的d位数组成m行n列的二维矩阵,并使用m+n+1个校验位编码。码距上升为4,可纠正1位错误。
CRC循环冗余校验
将数据bitD看成二进制数据,配合生成多项式G,可以检测出多处错误。
对G(x)=x^4+x^3+1
生成多项式,得到的数码为11001。
要求一个数1000 0000的冗余校验码,在它后面补4个0,然后模2规则除以11001,得到的余数写在原来的8位数后面。
传输后,如果要校验数据,则将12位数据除以11001,如果余数为0则没有错误。
CRC能检查所有的r位及以下的错误,对于大于r位的错误也有很小概率检查不出。
多点访问协议
两种类型的链路:
- 点对点
- 广播:让多个发送和接收节点都连接到相同的、单一的、共享的广播信道上
因为所有的节点都能够传输帧,所以多个节点可能会同时传输帧。当发生这种情况时,所有节点同时接到多个帧;这就是说,传输的帧在所有的接收方处碰撞(collide)了。通常,当碰撞发生时,没有一个接收节点能够有效地获得任何传输的帧;在某种意义下,碰撞帧的信号纠缠在一起。因此,涉及此次碰撞的所有帧都丢失了,在碰撞时间间隔中的广播信道被浪费了。
在理想情况下,对于速率为R bps的广播信道,多路访问协议应该具有以下所希望的特性:
- 当仅有一个结点发送数据时,该节点具有Rbps的吞吐量
- 当有M个节点发送数据时,每个节点吞吐量位R/M bps
- 协议是分散的,不会因为某个主节点故障导致系统崩溃
- 协议实现简单
MAC协议
信道划分:把信道划分成小片,分配片给节点专用。
随机访问:信道不划分,允许冲突,冲突后恢复。
依次轮流:节点轮流使用信道,但是数据传输较多的节点获得较长的信道使用权。
TDMA
时分复用,信道按站点数n将时间分为n片,站点轮流使用时间片。但是如果其中有若干站点没有传输任务,那么就会造成时隙空闲。
FDMA
信道的有效频率范围被分为一个个频段。每个站点被分配一个固定的频段。同样,如果站点没有传输任务,则造成频段空闲。
CDMA
码分多路访问,所有站点在整个频段上同时传输,用编码原理区分。在信号同步很好,线性叠加的时候可以实现完全无冲突。类比于不同的人在用不同的语言同时对话。
随机存取协议
所有用户都可以随机发送信息,发送时可以占用全部带宽,理论上个人使用时比静态分配信道的速度更快。
时隙ALOHA假设所有帧是等长的,时间被划分为相等的时隙,每个时隙可以发送一帧,节点只在时隙开始时发送帧。节点在时钟上是同步的,如果两个或多个节点在一个时隙传输,所有的节点都能检测到冲突。
运行时,当节点获取新的帧,在下一个时隙传输。传输时没有检测到冲突,成功。如果检测到冲突,失败。节点在每一个随后的时隙以概率p重传帧直到成功。
优点
- 节点可以以信道带宽全速连续传输
- 高度分布:仅需要节点之间在时隙上的同步
- 简单
缺点
- 存在冲突,浪费时隙
- 即使有帧要发送,仍然有可能存在空闲的时隙
- 节点检测冲突的时间小于帧传输时间
- 时钟同步
效率:
一个节点成功传输的概率是p(1-p)^{N-1}
,任何一个节点成功的概率是Np(1-p)^{N-1}
,N为无穷大时极限为1/e=0.37。即最好情况信道利用率为37%。
纯ALOHA无需节点在时间上同步,有帧需要传输时马上传输。
这样冲突的概率会增加,效率更差,为18%。
CSMA载波侦听多路访问,在传输前线侦听信道,如果空闲则传送整个帧,反之推迟。
CSMA冲突由传播延迟造成,两个节点可能侦听不到正在进行的传输。
冲突:整个冲突帧的传输时间都被浪费了。传播延迟决定了冲突的概率。
CSMA/CD冲突检测:没有传完一个帧就可以在短时间内检测到冲突,冲突发生时则立刻中止传输,减少信道浪费。
有线局域网中容易实现,检测信号强度或者通过周期的过零点。
轮流MAC协议选出一个代表,让他控制所有的传输
轮询开销在随着服务的节点越多,需要用于查询是否发送数据发送的数据帧也就越多,会造成一定开销;
等待延迟就是因为这是轮流“邀请”,所以难免某个节点需要发送数据,但是主节点还在较远的需要里有需求的节点那边,导致需求得不到立即响应;
单点故障很好理解,就是代表挂了;
令牌传递:控制令牌循环从一个节点到下一个节点传递。
在节点之间没有收发数据的需求时,令牌在节点之间循环。
发送数据的流程
----》当一个节点需要时就可以获得这个令牌。然后修改这个令牌的状态(空闲->占用)
----》再将令牌与数据帧结合,让其在节点构成的环之间流动
----》不是目的地的节点收到令牌也不接受,直接略过,目标节点收到信息并复制一份到本地(传输完成),因为是个闭环,所以发送节点最后得到令牌
----》最后,发送令牌的节点对令牌的内容进行检查,如果发现数据出错还要重新发一遍
缺点:
- 令牌开销耗费带宽
- 延迟,抓住令牌才能传输
- 单点故障:令牌丢失,系统无法传输;重新生成令牌很复杂
链路层地址
MAC地址
以太网数据包的”标头”,包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?
以太网规定,连入网络的所有设备,都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。长度为6字节,共48比特,通常用十六进制表示法,地址的每个字节被表示为一对十六进制数
每个适配器具有一个唯一的MAC地址,不随位置发生变化(就像人的身份证,而IP则像人的邮政地址)
一台路由器的每个接口都有一个ARP模块和一个适配器;
MAC地址分配:当一个公司要生产适配器时,它支付象征性的费用购买一块MAC地址空间,IEEE分配这块地址时,固定前24比特,让公司自己为每个适配器生成后24比特的唯一组合
ARP协议
通过MAC,我们定义了地址。但是我们紧接着就有一个问题,那就是一块网卡怎么会知道另一块网卡的MAC地址?
答案就是ARP协议。
每个节点的ARP模块都在它的RAM中有一个ARP表,包含IP地址到MAC地址的映射关系,每个表项还包含TTL字段,表示表项过期时间(ARP表是自动创建的,如果某节点与子网断开连接,它的表项最终会从留在子网中的节点的表中删除。通常一个表项的过期时间是20分钟)
主机向其ARP模块提供一个IP地址,ARP模块返回IP地址对应的MAC地址。
在同一个LAN中,A要发送帧给B,但是B的MAC地址不在A的表中。那么A广播包含B的IP的ARP查询包,B接收到ARP包,回复A自己MAC地址。A在自己的ARP表中添加映射关系直到信息超时。
ARP是即插即用的,节点自己创建表项,无需管理员干预。
DHCP:动态主机配置协议
前文说过
以太网
目前最主流的LAN技术。
以太网提供无连接,不可靠服务。
以太帧结构
前导码:7B+1B帧首定界符,(以太网2.0则是8位前导码)用来同步接收方和发送方的时钟速率,使得接收方将自己的时钟调到发送端的时钟。
地址:6字节源MAC地址、目标MAC地址。
类型:2B指出高层协议。
数据:46-1500B。
CRC:4B校验码。
当长度字段位置上的值大于最大帧长度(即1518B)时,就认为该帧采用Ethernet II帧格式,否则就认为该帧为IEEE 802.3格式。
以太网的MAC协议:采用二进制退避的CSMA/CD介质访问控制形式。
以太网CSMA/CD算法
适配器获取数据报,创建帧。
发送前:侦听信道CS,空闲传送帧,忙则等候。
发送过程中,冲突检测CD:有冲突则放弃,之后重发。
发送方适配器检测到冲突,除了放弃外,哈发送一个Jam信号,所有听到冲突的适配器也发送:为了让所有站点都直到冲突。
放弃后,适配器进入指数退避状态:在第m次失败后,适配器随机选择一个0-2^{m-1}的整数K,等待512K位时,然后转到步骤2。
Jam Signal: 使其它发送方明确知道发生碰撞,48bits。
对于10Mbps的以太网,一个位时位0.1us,对于K=1023,就是50ms。
指数退避的目标:
- 适配器试图适应当前负载,在一个变化的碰撞窗口中随机选择时间点尝试重发。如果高负载,重传窗口时间大,减少冲突但等待时间长;如果低负载等待时间少,但是容易冲突。
CSMA/CD的效率:
e=\frac{1}{1+5t_{最远的两个节点传播时间}/t_{最大帧传输时间}}
效率在tprop为0时接近1,不会有冲突。
当ttrans接近无穷大时接近1,一旦一个站点永远抓住信道,则一直发送。
曼彻斯特编码
曼彻斯特编码技术
- 在每一位时间的中间,信号有一个跳变(“高→低”或“低→高”)
- 这个跳变既可作为同步信号,也可表示数据
- 由高到低的跳变用来表示“1”,由低到高的跳变用来表示“0”
- 也称为“自同步码”
- 曼彻斯特编码的直流分量是固定的,当媒体上的信号产生冲突时,直流电平会产生变化,可以用作检测冲突的依据
链路层交换机
Hubs集线器
Hubs本质是物理层的中继器:
- 从一个端口收,转发到其他端口
- 速率一致
- 没有帧缓存
- 在hub端口上没有CSMA/CD机制
- 提供网络管理功能
一个Hub集线器和若干Host组成了一个碰撞域,在一个碰撞域,同时只允许一个站点在发送。
交换机
交换机端口执行以太网协议,对帧进行存储和转发。
对于到来的帧,检查帧头,根据目标MAC地址进行选择性转发,转发时使用CSMA/CD控制。通常一个交换机端口对应一个独立网段。
透明:可以再抽象上无视交换机。
交换机无需配置。
交换机对其下的每个主机提供的服务:缓存到来的帧,对每个帧进入的链路使用以太网协议,没有碰撞;全双工。这种情况下,每条交换机到主机的链路都是一个独立碰撞域,不会产生冲突。并且数据的双向传播也不会产生冲突。
交换机通过学习得到哪些主机(mac地址)可以通过哪些端口到达
- 当接收到帧,交换机学习到发送站点所在的端口(网段)
- 记录发送方MAC地址/进入端口映射关系,在交换表中
交换机表初始为空源地址为DD-DD-DD-DD-DD-DD的帧从接口x到达时,如果不存在则新建一项;存在则更新当前时间;
如果一段时间后,在x接口没有来自DD-DD-DD-DD-DD-DD的帧,则将该表项删除;
如果在转发时,发现目标MAC地址不在转发表内,则执行泛洪。找到并记录进转发表。
交换机和路由器的区别
- 都是存储转发设备,但是交换机是链路层设备,路由器是网络层设备
- 都有转发表,但是交换机维护的是转发表,执行过滤、学习和生成树算法;路由器执行路由选择算法,是对于图拓扑结构找到一条最优路径
- 交换机是即插即用的,路由器不是,要配置子网前缀
PPP点对点传输协议
一个发送方,一个接收方,一个链路,比广播链路容易:
- 没有媒体访问控制
- 不需要显式MAC寻址,例如,拨号链路,ISDN线路
流行的点到点DLC协议:
- PPP点到点协议
- HDLC高级数据链路控制
满足需求
简单对于链路层的帧,无需纠错,无需序号,无需流量控制。封装成帧帧定界符。
在数据链路帧中封装网络层数据报,同时携带任何网络层协议(不仅仅是IP)的网络层数据。能向上复用。
位透明性:必须在数据字段中携带任何位模式。
差错检测错就丢弃。
检测连接状态链路是否正常工作。
不提供纠错恢复、流量控制、顺序传输和多点连接服务。
PPP帧格式
Flag,Address,Control:各占1B,不变。
协议:2B帧传送到的上层协议。
信息
校验位:2or4B。
Flag:1B。
字节填充
问题:如何判断01111110是数据还是flag?
发送方在每个01111110数据字节后添加额外的01111110字节,如果接收方收到的数据在一行中有两个01111110字节:丢弃第一个字节,继续数据接收。如果只有一个,就是flag。
PPP数据控制协议
在交换网络层数据之前,数据链路peer必须配置PPP链路(最大帧长度,校验),利用IP控制协议信息来学习/配置网络层信息(IP地址)。
问题
比较电路交换和分组交换
电路交换一旦建立了电路,传输速度是占满带宽的,比分组交换快,能支持实时传输。但是电路交换中的建立电路和拆除电路需要额外时间,资源利用率低。
分组交换的设计简单,资源利用率高,但是会产生延时,拥塞,丢包等问题。
为什么会产生传输延迟
因为路由器在接收分组的时候,必须将整个分组全部接收后才能开始转发。大小为L的分组,传输速率为R时,在一个路由器上会产生L/R的传输延迟,然后路由器接受完整个分组,开始转发分组的第一个bit。
UDP的必要性
UDP不需要建立连接,仅在IP基础上多路复用产生端口号,比TCP更快地快速传输数据。
为什么说HTTP是无状态的
HTTP不记录客户端的任何信息。对于同一客户端的不同请求会都按照新请求对待。
为什么维护用户的状态很复杂
- 必须维护历史信息
- 如果服务器/客户端死机,它们的状态信息可能不一致,二者的信息必须是一致
- 只能支持很少客户端,无状态的服务器则不然
SMTP和HTTP的区别
SMTP是邮件传输协议,报文只能包含7位ASCII码组成的数据。
HTTP是超文本传输协议,报文可以包含其他二进制数据。
SMTP是推协议,邮件服务器将报文推送到其他服务器。
HTTP是拉协议,用户从Web上拉取信息。
HTTP将每个对象包含在不同数据报中,SMTP则将多个对象包含在一个数据报里。
SMTP报文的格式
首部,空行,主体,只能是7位ASCII码字符。
DNS的必要性
IP难以记忆,需要建立主机名对IP的映射。
客户访问一个主机名的DNS解析流程
根域名ip返回顶域名ip,顶域名ip返回权威域名ip,权威域名ip返回主机ip。
DNS的递归查询和迭代查询
递归查询从根域名获取最终结果,迭代查询每个等级的域名只返回下一等级的结果。
如何防止无限泛洪查询
设置泛洪范围,转发次数。
一个新节点加入BitTorrent后会发生什么
逐渐积累4个块,优先选择最稀有的块。
优先将稀缺块给提供过自己带宽大小的前四位节点,每隔10秒重新评估一次。
每隔30秒,随机选择节点发送块疏通。
UDP和TCP的多路复用/解复用的区别
UDP套接字是二元组标识的,TCP套接字是四元组标识的。UDP会将两个不同源但是同目的的报文段送交给同一个套接字,TCP则会送给不同套接字。
CheckSum计算方法
数据按16bit分段,进位回滚地相加。取反码就是checksum。
为什么使用Checksum,而不是直接用进位回滚的和
如果直接使用 sum ,那么对于大小端不同的系统,会得到不同的求和结果,但使用反码可以让结果一致。
rdt2.0问题
没有考虑到ACK、NAK也会丢失、出错。
GBN、SR的窗口大小选择
Nbit数据号
GBN:2^N-1
SR:2^{N-1}
为什么TCP要三次握手
如果只有两次握手会仅在服务端维护一个半连接,客户端不知道有没有连接成功。发送的重新连接请求可能会被服务器认为是一个新的连接而不是重连。导致服务器维护很多个没有意义的连接。
为什么TCP是公平的
拥塞控制原理导致多个TCP会话最终稳定状态的有效带宽是R/K。
用K=2的情况可以说明。
转发和路由的区别
转发是一次动作,将数据报从设备的一条链路发送到另一条链路。
路由是通过路由选择算法,找到一条最合适的网络层传输路径。
网络层服务和传输层服务的区别
针对IP(Host)和针对端口(进程)的区别。
NAT穿越问题和解决方法
外网的机器无法主动连接到内网的机器上。
- 手动打表,在NAT路由器上配置特定端口的连接
- 允许有NAT服务的主机可以获知网络的公共IP地址,列举存在的端口映射并删改
- 通过NAT桥接两个连接
LS震荡问题
如果选择的路径代价是拥塞程度,最优路径可能会一直在改变。
DV无穷计算问题
如果一个节点断开连接,由于每个点中的路由表可以互相发送,需要计算很多次才能发觉其断开连接。
LS DV在不同场景的优劣
DV在消息复杂度上胜出。
LS在时间复杂度和健壮性上胜出。
为什么内部网关协议和外部网关协议如此不同
内部网不需要控制通信路径,越快越好;内部网规模很小;AS间协议策略大于性能。
时隙ALOHA和ALOHA的效率计算
时隙ALOHA:一个节点成功传输的概率是$$p(1-p)^{N-1}$$,任何一个节点成功的概率是$Np(1-p)^{N-1}$,N为无穷大时极限为1/e=0.37。即最好情况信道利用率为37%
ALOHA:冲突率翻倍,利用率为18%。
以太网运行CSMA/CD算法流程
适配器获取数据报,创建帧。
发送前:侦听信道CS,空闲传送帧,忙则等候。
发送过程中,冲突检测CD:有冲突则放弃,之后重发。
发送方适配器检测到冲突,除了放弃外,哈发送一个Jam信号,所有听到冲突的适配器也发送:为了让所有站点都直到冲突。
放弃后,适配器进入指数退避状态:在第m次失败后,适配器随机选择一个0-2^{m-1}的整数K,等待512K位时,然后转到步骤2。
路由器和交换机的区别
- 都是存储转发设备,但是交换机是链路层设备,路由器是网络层设备
- 都有转发表,但是交换机维护的是转发表,执行过滤、学习和生成树算法;路由器执行路由选择算法,是对于图拓扑结构找到一条最优路径
- 交换机是即插即用的,路由器不是,要配置子网前缀
PPP数据跟FLAG一致的解决方法
对于FLAG(1B数据,0111 1110),如果数据中也出现了0111 1110,那么在发送时,在0111 1110后再加上1B:0111 1110。
这样接收方在一行内如果读到两次0111 1110,就舍弃前一个,正确读到数据。如果只存在1个0111 1110,就当作FLAG处理。
为什么说交换机可以即插即用
交换机执行自学习的转发表配置。
收到数据,会在转发表加入来源的ip和自己的来源端口号;
如果转发时没有在转发表内找到自己的端口号和转发IP的配对,则进行泛洪查询,找到目标后转发,然后将映射添加入转发表。
每隔一段时间会删除转发表内的记录,重新学习。
TCP数据受MTU限制的最小值和最大值
6-1460B
为什么不值得在链路层上恢复错误
因为错误恢复会在TCP上进行。
为什么局域网有较高的带宽而广域网有较低的带宽是合理的
局域网传输距离较短,网络相对简单,路由节点较少,封装和解封装较少。广域网,距离上远远大于局域网。数据传输过程中要经过很多节点,封装与解封装次数很多。
使用分层体系结构的好处和可能的缺点是什么
分层处理的好处:
- 应付复杂的系统
- 概念化:结构清晰,便于标识网络组件,描述其相互关系
- 结构化:更易于维护和升级,改变某一层服务的实现,不影响系统的其他层次
可能不好的地方:功能会在不同的层次中重复出现,因而产生了额外开销。