计算机网络由若干 结点
和连接这些结点的 链路
组成。网络中的结点可以是计算机、集线器、交换机或路由器等。
网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网是网络的网络。
互联网可以划分为两大块: 边缘部分
和 核心部分
就是连接在互联网上的所有的主机,这些主机又称为 端系统
,小的端系统可以是一台普通个人电脑和具有上网功能的智能手机,大的端系统是一台非常昂贵的大型计算机。边缘部分利用核心部分所提供的服务,使众多主机之间能够互相通信并交换或共享信息
明确一个概念 —— 主机 A 和主机 B 进行通信。
实际上是指: 运行在主机 A 上的某个程序和运行在主机 B 上的某个程序进行通信。由于“进程”就是“运行着的程序”,因此可以理解为: “主机 A 上的某个进程和主机 B 上的另一个进程进行通信”。
在核心部分起到特殊作用的是 路由器
, 它是一种专用计算机。 路由器是实现 分组交换
的关键构件,其任务是 转发收到的分组
互联网服务提供商 ISP 可以从互联网管理机构申请到许多 IP 地址,同时拥有通信线路 (大 ISP 自己建造通信线路,小 ISP 则向电信公司租用通信线路)以及路由器等连网设备,因此任何机构或个人只要向某个 ISP 缴纳规定的费用,就能从该 ISP 获取所需 IP 地址的使用权,并通过该 ISP 接入到互联网。
现在的互联网已经不再是单个组织所拥有而是全世界无数大大小小的 ISP 共同拥有的,这也就是为什么互联网也称为 "网络的网络" 的原因
- 客户服务器方式 ( C/S 方式 ) : 客户是服务请求方,服务器是服务提供方
- 对等连接方式 (P2P 方式) : 两台主机在通信时不区分哪一个是服务器请求方哪一个是服务器提供方
从通信资源分配角度来看,交换
就是按照某种方式动态地分配传输线路的资源。电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路
,并且在整个通信过程中始终占用该链路。由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到 10%。
电路交换的三个步骤 : “ 建立连接 ” -> “ 通话 ” -> “ 释放连接 ”,电路交换的一个重要特点就是: 在通话的全部时间内,通话的两个用户始终占用端到端的通信资源
分组交换采用的是“存储转发”技术,下图中表示将一个报文划分为几个分组在进行传送。通常我们把要发送的整块数据称为一个 报文,在发送报文之前,先把较长的报文划分成一个个更小的等长数据段。在每一个数据段前面,加上一些必要的控制信息组成的首部, 就构成了一个分组。
分组又称为“包”,首部称为包头。每个分组都有首部和尾部,包含了源地址和目的地址等控制信息,在同一个传输线路上同时传输多个分组互相不会影响,因此在同一条传输线路上允许同时传输多个分组,也就是说分组交换不需要占用传输线路。
位于网络边缘的主机和位于网络核心部分的路由器都是计算机,但是他们的作用却不一样。主机是为用户进行信息处理的,可以和其他主机通过网络交换信息,路由器是用来转发分组的,即进行分组交换的。
路由器收到一个分组,先暂时存储一下,然后检查其首部,也就是包头,查找转发表,按照首部中的目的地址,找到合适的接口转发走出去,把分组交给下一个路由器,这样一步一步的以存储转发的方式,把分组交付给最终的目的主机。
路由器暂时存储的是一个个短分组,而不是整个长报文。短分组是暂时存放在路由器的存储器(内存)中而不是存储在磁盘中。这就保证了较高的交换速率。
采用存储转发的分组交换,实质上是采用了在数据通信的过程中断续分配传输带宽的策略,提高通信线路的利用率。
为了提高分组交换网的可靠性,互联网的核心部分常采用网状拓扑结构,使得发送网络拥塞或者少数结点、链路出现鼓掌时,路由器可灵活转变转发路由,而不避免引起通信的中断。
-
广域网 WAN
-
城域网 MAN
-
局域网 LAN
-
个人区域网 PAN
-
公用网(public network)
-
专用网(private network)
网络中的速率指的是数据的传送速率
,它又称为数据率或比特率。速率的单位是: bit/s。(K=210=1024,M=220,G=230,T=240, ..... ),当提到网络的速率时,往往指的是额定速率或标称速率,而并非网络实际上运行的速率。
带宽本来是指某个信号具有的频带宽度,这种意义的带宽单位是赫。因此,表示某通信道允许通过的信号频带范围就称为该信道的带宽
在计算机网络中,带宽用来表示某通道传输数据的能力。因此网络带宽表示在单位时间内网络中的某信道所能通过的最高数据率。
表示在单位时间内通过某个网络的实际的数据量
是指数据从网络的一端到另一端所需要的时间。它有时也称为延迟或者迟延
(1) 发送时延 : 主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间,计算公式为
(2) 传播时延 : 电磁波在信道中传播一定的距离需要花费的时间,计算公式为
(3) 处理时延 : 主机或者路由器收到分组后,要花费一定的时间进行处理,这就是处理时延
(4) 排队时延 : 分组在经过网络传输时,要经过路由器。但是分组在进入路由器后要先在输入队列中排队等待处理。在路由器确定了转发接口之后,还要在输出队列中排队等待转发。排队时延的长短取决于网络当时的通信量。当网络的通信量很大时会发生队列溢出,使分组丢失,这相当于排队时延为无穷大
总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延
通过应用进程间的交互来完成特定网络应用。比如 DNS、HTTP 协议、SMTP 协议。数据单位为报文。
为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。
运输层包括两种协议:传输控制协议 TCP
,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP
,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
为分组交换网上的不同主机
提供数据传输服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组
或包
进行传送。在 TCP/IP 协议中,由于网络层使用 IP 协议,因此分组也叫做 IP数据包
。网络层的另一任务就是 : 选择合适的路由,使源主机运输层传下来的分组,能够通过网络中的路由器找到目的主机。
常见的协议比如 CMP 、 IP 、 ARP 等协议
网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的IP数据包
封装成帧
,在两个相邻结点间的链路上传送帧。每一帧包括数据和必要的控制信息。硬件地址寻址、差错校验、将比特组合成字节进而组合成帧,用 MAC 地址访问介质
考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。以二进制形式传输数据
其中表示层和会话层用途如下:
-
表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。比如 HTTP、HTTPS 等协议
-
会话层 :建立及管理会话。比如 session、cookie
五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理
在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部和尾部。
路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。
它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。
TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。
还有一种方法,就是分层次画出具体的协议来表示 TCP/IP 协议族,它的特点是 : 一种沙漏形状,中间小两边大,IP 协议在其中占据举足轻重的地位。
物理层的作用及任务就是 : 尽可能地屏蔽掉传输媒体和通信手段的差异,使物理层上面的数据链路层感觉不到这种差异,这样就能使得数据链路层只需要考虑如何完成本层的协议和服务,不需要考虑网路具体的传输媒体和通信手段。
首先,我们先理解一些常用术语,通信的目的是传送信息,数据是运送信息的实体,在 RFC 4949 中给出的定义,数据是使用特定方式表示的信息,通常是有意义的符号序列。信号则是数据的电气或电磁的表现。
信号分为两大类
-
模拟信号——代表信息的参数的取值是连续的。
-
数字信号——代表信息的参数的取值是离散的。
从通信的双方信息交互的方式来看,有三种基本方式:
-
单向通信 : 又称为
单工通信
,只有一个方向的通信而没有反方向的交互,比如无线电广播或有线电广播 -
双向交替通信 : 又称为
半双工通信
,通信的双方都可以发送信息,但是不能双方同时发送,当然也不能同时接收 -
双向同时通信 : 又称为
全双工通信
,通信的双方可以同时发送和接收信息
来自信源的信号常称为 基带信号
,基带信号往往包含有较多的低频成分,甚至有直流成分,而很多信道不能传输这种低频或者直流,所以我们要进行调制
基带信号调制分两大类, 基带调制 和 带通调制
仅仅对基带信号的波形进行变换,使它能够与信道特性相适应。转变后的信号仍是基带信号,这种基带调制一般是把数字信号
转换成另一种数字信号,所以这个过程常常被称为编码
。(数字信号 - 数字信号)
使用载波
进行调制,把基带信号的频率范围搬移到较高的频段,并转换为模拟信号
。(数字信号 - 模拟信号)
最基本的带通调制方法有 : 调幅、调频和调相,复杂点的就正交振幅调制
频分复用的所有用户在相同的时间占用不同的频率带宽资源。
时分复用的所有用户在不同的时间占用相同的频率带宽资源。
使用频分复用和时分复用进行通信,在通信的过程中主机会一直占用一部分信道资源。但是由于计算机数据的突发性质,通信过程没必要一直占用信道资源而不让出给其它用户使用,因此这两种方式对信道的利用率都不高。
是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。
光的频分复用。由于光的频率很高,因此习惯上用波长而不是频率来表示所使用的光载波。
又称为 : 码分多址CDMA
。在 CDMA 中,每一个比特时间再划分为 m 个短的间隔,称为码片
,通常 m 的值是 64 或 128。
使用 CDMA 的每一个站被指派一个唯一的 m bit 码片序列,一个站如果要发送比特 1,那么就发送自己的 m bit 码片序列。如果要发送比特 0,就发送该码片序列的二进制反码。例如,指派给 S 站的 8 bit 码片序列是 00011011,那么当 S 发送比特 1 时,它就发送序列 00011011,如果 S 发送比特 0 时,就发送 11100100
我们先明确一个概念,“链路” 和 “数据链路” 并不是一回事。链路是从一个结点到相邻结点的一段物理线路。数据链路是除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。常用的方法是使用网络适配器
来实现这些协议。
一对一通信。
因为不会发生碰撞,因此也比较简单,使用PPP 协议进行控制。
一对多通信,一个节点发送的数据能够被广播信道上所有的节点接收到。
所有的节点都在同一个广播信道上发送数据,因此需要有专门的控制方法进行协调,避免发生冲突(冲突也叫碰撞)。
主要有两种控制方法进行协调,一个是使用信道复用技术,一是使用 CSMA/CD 协议。
数据链路层协议有很多种,但是有三个基本问题是共同的 : 封装成帧、透明传输、差错检测
封装成帧
就是在一段数据的前后分别添加首部和尾部,接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
一个帧的长度等于帧的数据部分长度加上帧首部和帧尾部的长度。首部和尾部的一个重要作用是进行帧定界。每一种链路层协议都规定了所能传送的帧的数据部分长度上线——最大传送单元 MTU(默认值 1500 字节)
如果数据是又可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符
,SOH 放在一帧的最前面,表示帧的首部开始。EOT 表示帧的结束。他们都是十六进制,编码分别是 01(二进制 00000001)和 04(二进制 00000100)
在数据传输中出现差错时,帧定界符作用更加明显。比如发送端在发送一个帧时突然出故障,中断了发送。但是很快又恢复正常,于是从头开始发送刚才未发送完的帧。于是使用了帧定界符
,接收端就能知道前面收到的数据是个不完整的帧。
帧的开始和结束都是通过使用专门指明的控制字符,如 SOH 和 EOT 等。当传送的是用文本文件组成的帧时,不管从键盘输入什么字符都可以放在这样的帧中传输过去,因此这样的传输是透明传输
但是!!!如果数据部分是非 ACSII 码的文本文件时(二进制的图像),如果数据中的某个字节的二进制码刚好是 SOH 或 EOT 这种控制字符一样,那么,数据链路层就会错误地认为“找到帧的边界”,误认为是一个“完整的帧”,而把剩下的部分数据丢弃。
透明 : 它表示某个实际存在的事物看起来却好像不存在一样。
为了解决透明传输问题,使用一种方法叫做字节填充
或称为字符填充
。具体方法是 : 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”
。而在接收端的数据链路层接收到数据后,在送往网络层之前删除这个插入的转义字符。
比特在传输过程中可能会出现差错 : 1 可能变为了 0, 而 0 可能变成了 1,这就叫做比特差错
。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC
的检错技术。
CRC 运算就是在数据 M 的后面添加供差错检测用的 n 位冗余码,这种为了进行检错而添加的冗余码常被称为帧检验序列FCS
CRC 是一种检错方法,FCS 是添加在数据后面的冗余码
互联网用户通常需要连接到某个 ISP 之后才能接入到互联网,PPP 协议是用户计算机和 ISP 进行通信时所使用的数据链路层协议。
-
一个将 IP 数据报封装成串行链路的方法
-
一个用来建立、配置和测试数据链路连接的链路控制协议 LCP
-
一套网络控制协议 NCP
各字段意义
-
F 字段为帧的定界符,规定为 0x7E(二进制 01111110), '0x'表示它后面的字符是用十六进制表示的。如果连续出现两个标志字段,就表示这是一个空帧,应当丢弃
-
A 和 C 字段暂时没有意义
-
FCS 字段是使用 CRC 的检验序列
-
信息部分长度可变,但长度不超过 1500
PPP 协议在使用 SONET/SDH 链路时,使用同步传输,在这种情况下,使用零比特填充
方法来实现透明传输。
具体做法是 : 在发送端,扫描整个信息字段,只要发现有 5 个连续的 1,就立即填入一个 0。就可以保证信息字段中不会出现 6 个 1;在接收端收到一个帧时,先找到标志字段 F 来确定一个帧的边界,然后扫描信息部分,每当发现 5 个连续 1 时,就把 5 个 1 后面的 0 删除,还原成原来的信息比特流。这就保证了透明传输
PPP 链路的起始和终止状态永远都是 链路静止
状态,这时在用户个人电脑和 ISP 的路由器之间并不存在物理层的链接
当用户个人电脑通过调制解调器
呼叫路由器时 (通常是屏幕上用鼠标点击一个连接按钮),路由器
就能检测到调制解调器
发出的载波信号。在双方建立了物理层连接后,PPP 就进入了 链路建立
状态,其目的是建立链路层的 LCP 连接
这时链路控制协议 LCP 开始协商一些配置选项,即发送LCP配置请求帧
。协商结束后双方建立了 LCP 链路,进入到 鉴别
状态。在这一状态,只允许传送 LCP 协议的分组、鉴别协议的分组和检测链路质量的分组。如果使用PAP密码认证协议
,则需要发起通信的一方发送身份标识和口令。如果需要更好的安全性,则可使用更加复杂的CHAP询问握手认证协议(三次握手)
。鉴别失败,进入 链路终止
状态,如果鉴别成功,进入 网路层协议
状态。
在 “网络层协议” 状态,PPP 链路两端的网络控制协议 NCP 根据网络层的不同协议相互交换网络层特定的网络控制分组。
当网络层配完毕后,链路进入可进行数据通信的 链路打开
状态。链路的两个 PPP 端点可以批次向对方发送分组
数据传输结束后,链路的一端发出终止请求LCP分组
请求终止链路连接,在收到对方发来的终止确认LCP分组
后,转到 链路终止
状态。如果链路出现故障,也会从 “链路打开” 状态转到 “链路终止” 状态。
当调制解调器的载波停止时,回到 链路静止
状态
局域网的主要特点是 : 网络为一个单位所拥有,且地理范围和站点数目均有限
可以按照网络拓扑结构对局域网进行分类:
计算机与外界局域网的连接是通过通信适配器
进行的。适配器本身是在主机箱内插入的一块网络接口板。这种接口板又称为网络接口卡NIC
,简称为 网卡
。
在这种通信适配器上面装有处理器和存储器(包括 RAM 和 ROM)。适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式
进行的。而适配器和计算机之间的通信则是通过计算机主板上的 I/O 总线以并行传输方式
进行的。
适配器的一个重要功能就是 : 进行数据串行传输和并行传输的转换。
适配器在接受和发送各种帧时,不使用计算机的 CPU。当适配器收到有差错的帧时,直接丢弃这个帧而不需要通知计算机。如果收到正确的帧,就会通过中断来通知计算机,并交付协议栈中的网络层。当计算机要发送 IP 数据报时,就由协议栈把 IP 数据报向下交给适配器,组装成帧发送给局域网。
计算机的硬件地址(MAC 地址)就在适配器的 ROM 中,而计算机的软件地址(IP 地址),在计算机的存储器中
CSMA/CD 表示 :载波监听多点介入/碰撞检测
-
多点接入 : 说明这是总线型网络,许多主机以多点的方式连接到总线上。
-
载波监听 : 就是检测信道,不管在发送前,还是发送中,每个站都必须不停地检测信道。如果监听到信道正在使用,就必须等待。
-
碰撞检测 : 边发送边监听,在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞。
为什么每一个站在发送数据前都已经监听到信道为 "空闲",那么为什么还会出现数据在总线上的碰撞呢 ?
虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的
传播时延
的存在,还是有可能会发生碰撞。
在使用 CSMA/CD 协议时,一个站不可能同时进行发送和接收,但必须边发送边监听信道。因此使用 CSMA/CD 协议的以太网只能进行双向交替通信(半双工通信)
记端到端的传播时延为 τ,最先发送的站点最多经过 2τ 就可以知道是否发生了碰撞,称 2τ 为 争用期 。只有经过争用期之后还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
当发生碰撞时,站点要停止发送,等待一段时间再发送。这个时间采用 截断二进制指数退避算法 来确定。从离散的整数集合 [0, 1, .., (2k-1)] 中随机取出一个数,记作 r,然后取 r 倍的争用期作为重传等待时间。
注意 : 适配器没发送一个新的帧,就要执行一次 CSMA/CD 算法,适配器对过去发生的碰撞并无记忆功能。因此,当好几个适配器正在执行指数退避算法时,很可能有一个新的适配器发送的新帧能够碰巧立即成功地插入到信道中,得到了发送权,而已经推迟好几次发送的站,有可能很不巧,还要继续执行退避算法,继续等待。
以太网规定了一个最短帧长 64 字节,即 512bit,如果要发送的数据非常少,那么必须加入一些填充字节,使得帧长不少于 64 字节。因此可见,以太网在发送数据时,如果在争用期(共发送了 64 字节)没有发生碰撞,那么后续发送的数据就一定不会发生冲突。也就是说,如果发生碰撞,就一定是在发送前的 64 字节以内。但凡长度小于 64 字节的帧都是由于冲突而异常终止的无效帧。以太网规定帧间最小间隔
为 9.6us,相当于 96 比特时间。这样的目的是使得刚刚接收到数据帧的站的接受缓存来得及清理,做好接收下一个帧的准备。
适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入到适配器的缓存中,但是在发送前,要检测信道
如果检测到信道忙,那么应不断检测,一直等到信道空闲。如果检测到信道空闲,并在规定的 96 比特时间内保持空闲,就发送这个帧
即网络适配器要边发送边监听,这里只有两种可能 :
-
发送成功 : 在争用期内一直未检测到碰撞,这个帧肯定能够发送成功。发送完毕之后,回到 (1)
-
发生失败 : 在争用期内检测到碰撞,立即停止发送数据,适配器执行断指二进制指数退避算法,等待 r 倍 512 比特时间后,返回 (2),继续检测信道,如果重 � 传 16 次不成功,那么停止重传,并向上层报错。
在局域网中,硬件地址又称为物理地址或 MAC 地址。当路由器通过适配器连接到局域网时,适配器上的硬件地址就用来标志路由器的某个接口。路由器如果同时连接到两个网络上,那么它就需要两个适配器和两个硬件地址。以太网适配器可以设置一种特殊的工作方式——混杂方式。工作在混杂方式的适配器只要“听到”有帧在以太网上传输,就会悄悄地接受下来。不管这些帧发送到哪个站。
我们在互联网上,进行主机间的通信时,通过分组交换传输报文,在报文中会标有源地址和目的地址,通过路由器来转发分组,而路由器通过适配器连接到局域网。计算机与外界局域网的连接是通过通信适配器进行的,因为适配器的一种特殊工作方式,所以黑客可以利用这种方式,非法获取用户的口令,甚至截取用户发送的数据包。
五个字段 :
-
6 字节长的目的地址字段
-
6 字节长的源地址字段
-
2 字节长的类型字段 : 表示上层使用的是什么协议,如果字段值 0x0800,那么就是 IP 数据报。如果值是 0x8137,那么就是 Novell IPX 发送过来的
-
长度在 46~1500 字节之间的数据字段 : 46 字节是最小长度 64 字节-18 字节的首尾部得出的最小长度。
-
4 字节的帧检验序列 FCS 字段
当数据字段的长度小于 46 字节,就会在数据字段中添加一个整数字节的填充字段,以保证 MAC 帧不下小于 64 字节。
现在有个问题 : 接收端的 MAC 子层在剥去首尾部后就把数据字段和填充字段交付给上层协议,那么上层协议如何知道填充字节的长度呢?
当上层使用的是 IP 协议时,其首部就有一个“总长度”字段,因此,总长度加上填充字段的长度,应当等于 MAC 帧数据字段的长度。例如,IP 数据报的总长度为 42 个字节,填充字段共 4 字节。当 MAC 帧把 46 字节的数据交给 IP 层后,IP 层就会把其中最后 4 个字节的填充字段丢弃
从上图可以看到,实际传送的要比 MAC 帧还多 8 个字节,这是因为一个站在刚开始接收 MAC 帧时,由于适配器的时钟尚未与到达的比特流达到同步,因此 MAC 帧的最前面若干位就无法接收,结果使整个 MAC 成为无用的帧。
为了快速实现同步,MAC 子层向下传到物理层时还要在帧前插入 8 字节,它由两个字段构成 : 第一个字段是 7 个字节的前同步码(1和0交替码)
,作用是使得接收端的适配器在接收 MAC 帧的时候快速调整其时钟频率,使它与发送端的时钟同步。第二个字段是帧开始定界符
,定义为 10101011,最后的两个连续的 1 是告诉接收端适配器 : “MAC 帧的信息马上来了,请适配器注意接收”。是为了计算 FCS 临时加入的,计算完后就会丢弃
以太网传输数据是以帧为单位传送的。在以太网传送帧时,各帧之间还必须有一定的间隙。
常使用工作在物理层的转发器
来扩展以太网的地理覆盖范围。
现在扩展主机和集线器之间的距离的一种简单方法就是使用光纤
和一对光纤调制解调器
。
最初使用的是网桥
,现在使用交换机
以太网交换机实质上就是一个多接口的网桥,并且是一种即插即用设备,其内部的帧交换表(又称为地址表)是通过自学习
算法自动的逐渐建立起来的。
下边是自学习的过程 :
A 先 B 发送一个帧,从接口 1 进入到交换机,交换机接收到帧后,查找交换表,发现没有哪个接口可以转发这个帧。接着,交换机把这个帧的源地址 A 和接口 1 写入交换表中,并向除接口 1 以外的所有接口广播这个帧。
C、D 将会丢弃这个帧,因为目的地址不正确。而 B 会收下这个目的地址正确的帧,这也叫做过滤
接下来 B 通过接口 3 向 A 发送一帧,交换机查找交换表,发现交换表中的 MAC 地址有 A,从接口 1 转发出去,于是把这个帧传送到接口 1 转发给 A。然后交换表中新增 (B, 3),表示以后如果有要发送给 B 的帧,就从接口 3 转发出去
虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。
例如下图中 (A1, A2, A3, A4) 属于一个虚拟局域网,A1 发送的广播会被 A2、A3、A4 收到,而其它站点收不到。
使用 VLAN 干线连接来建立虚拟局域网,每台交换机上的一个特殊接口被设置为干线接口,以互连 VLAN 交换机。IEEE 定义了一种扩展的以太网帧格式 802.1Q,它在标准以太网帧上加进了 4 字节首部 VLAN 标签,用于表示该帧属于哪一个虚拟局域网。
因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。
与 IP 协议配套使用的还有三个协议:
-
地址解析协议 ARP(Address Resolution Protocol)
-
网际控制报文协议 ICMP(Internet Control Message Protocol)
-
网际组管理协议 IGMP(Internet Group Management Protocol
还有一个逆地址解析协议 RARP ,但已被淘汰不使用了。下图画出了这三个协议与网际协议 IP 的关系。在这一层中,ARP 在最下面,因为 IP 经常要用到这个协议。ICMP 和 IGMP 在着一层的上面,因为它们要使用 IP 协议。
将网络互相连接起来是要使用一些中间设备。根据中间设备所在的层次,可以有以下四种不同的中间设备:
-
物理层使用的中间设备叫做 :
转发器
-
数据链路层使用的中间设备叫做 :
网桥
-
网络层使用的中间设备叫做 :
路由器
-
在网络层以上使用的中间设备叫做 :
网关
使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。
IP 地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的 32 位的标识符
IP 地址的编地方式经历了三个历史阶段:
-
子类的 IP 地址
-
子网的划分
-
构成超网
所谓的 IP 地址,就是将 IP 地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成, 第一个字段
网络号
, 第二个字段主机号
, 不同分类具有不同的网络号长度,并且是固定的。
IP 地址 ::= {< 网络号 >, < 主机号 >}
采用 点分十进制记法
提高可读性
物理地址(也叫做 MAC 地址)是数据链路层和物理层使用的地址,IP 地址是网络层和以上各层使用的地址,是一种逻辑地址
也就是说,在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用 IP 地址的 IP 数据报一旦交付给了数据链路层,就被封装成了 MAC 帧。MAC 帧在传送时,使用的源地址和目的地址都是硬件地址,这两个硬件地址就被写在了 MAC 帧的首部中
连接在通信链路上的设备(主机或者路由器)在收到 MAC 帧时,根据 MAC 帧中的硬件地址决定是手下或者丢弃。只有在剥去 MAC 帧的首部和尾部后把 MAC 层的数据上交给网络层后,网络层才能在 IP 数据报的首部找到源 IP 地址和目的 IP 地址
总之!!!IP 地址放在 IP 数据报的首部,而硬件地址则放在 MAC 帧的首部。在网络层和网络层以上使用的是 IP 地址,而数据链路层下使用的是硬件地址。在 IP 数据报放在数据链路层的 MAC 帧做中以后,整个的 IP 数据报就成为了 MAC 帧的数据。因而在数据链路层看不见数据报的 IP 地址
我们会遇到一个问题,就是: 已经知道了一个机器 (主机或路由器)的 IP 地址,需要找出相应的硬件地址,该如何解决呢?
ARP 就是解决这种问题,ARP 的用途就是: 为了从网络层使用的 IP 地址,解析出在数据链路层使用的硬件地址
我们知道,在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址。但是!!!IP 地址和下面的网络的硬件地址之间由于格式不同而不存在简单的映射关系,比如说
-
IP 地址有 32 位,而局域网的硬件地址是 48 位。
-
一个网络上会有新的主机加入,或撤走一些主机
-
更换网络适配器也会使得主机的硬件地址发生改变
那么 ARP 是如何解决这个问题的呢?它的方法是: 在主机 ARP 高速缓存中存放一个在 IP 地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)
如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
如果不使用 ARP 高速缓存,那么任何一台主机在进行通信,都必须在网络上使用广播方式发送 ARP 请求分组,这会使得网络上的通信量大大增加。
ARP 对保存在高速缓存中的每一个映射地址项目都设置生存时间(例如: 10 分钟 ~ 20 分钟),凡是超过生存时间的项目就从高速缓存中删除掉。这个设置生存时间是很有用的,比如有一种情况,A 和 B 通信,A 的 ARP 高速缓存中保存有 B 的硬件地址,但是某一天,B 的网络适配器坏了,B 换了一批,因此 B 的硬件地址改变了;这时候 A 还想和 B 通信,但是 A 中保存者旧的 B 硬件地址,A 无法找到 B。但是过了一段不长的生存时间,A 的 ARP 高速缓存中删除掉了 B,重新广播得到了 B 的硬件地址,又找到了B
⚠️ ARP 是解决了在同一个局域网上的主机或路由器 IP 地址和硬件地址之间的映射问题,如果不在一个局域网上,就无法解析出另一个局域网上另一主机的硬件地址
-
版本 : 有 4(IPv4)和 6(IPv6)两个值;
-
首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
-
区分服务 : 用来获得更好的服务,一般情况下不使用。
-
总长度 : 指首部和数据之和的长度,单位为字节。总长度字段为 16 位,因此数据报的最大长度为 2^16 -1 = 65535 字节
-
生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子,因而白白消耗网络资源。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
-
协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
-
首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
-
标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
-
标志
- 标志字段中的最低位记为 MF。MF = 1,表示后面 “还有分片”的数据报,MF = 0 表示这已经是最后一个数据片
- 标志字段中间的一位记为 DF,意思是“不能分片”,只有当 DF = 0 时才允许分片
-
片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。也就是说,每个分片的长度一定是 8 字节(64 位)的整数倍
在上图中,网络变成了一条链路,但每一个路由器旁边都注明其 IP 地址。也就是说: 在互联网上转发分组时,是从一个路由器转发到下一个路由器
但是!在 IP 数据报的首部中没有地方是可以用来指明 “下一跳路由器的 IP 地址”。在 IP 数据报的首部写上的 IP 地址是源 ID 地址和目的 IP 地址,而没有中间经过的路由器的 IP 地址。
那么问题来了,待转发的数据报怎么找到下一跳路由器呢?
在路由器收到一个带转发的数据报,在从路由表得出下一跳路由器的 IP 地址后,不是把这个地址填入 IP 数据报,而是送交数据链路层的网络接口软件。网络接口软件负责把下一跳路由器的 IP 地址转成硬件地址(必须使用 ARP),并将此硬件地址放在链路层的 MAC 帧首部,然后根据这个硬件地址找到下一跳路由器。
ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。它封装在 IP 数据报中,但是不属于高层协议。
ICMP 报文分为差错报告报文
和询问报文
。
Ping (分组网间探测) 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。使用了 ICMP 的回送请求与回送回答报文。它没有通过运输层的 TCP 和 UDP
Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。
-
源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
-
源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
-
不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
这样,源主机达到了自己的目的,因为这些路由器和最后目的主机发来的 ICMP 报文正好给出了源主机想知道的路由信息 —— 到达目的主机所经过的路由器的 IP 地址,已经到达其中的每一个路由器的往返时间。
互联网上采用的路由选择协议主要是自适应的、分布式路由选择协议。整个互联网划分为许多较小的自治系统,一般记为 AS。
自治系统 AS 是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个 AS 对其他的 AS 表现出一个单一的和一致的路由选择策略
互联网把路由选择协议划分为两大类:
-
内部网关协议 IGP : 即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前用得最多的就是 RIP 协议和OSPF 协议
-
外部网关协议 EGP : 若源主机和目的主机处在不同的自治系统中,当数据包传到一个自治系统的边界时,就需要使用一种协议将路由选择协议信息传递到另一个自治系统中。用的最多的就是 BGP 协议
自治系统之间的路由选择也叫做
域间路由选择
,而在自治系统内部的路由选择叫做域内路由选择
RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。可见 RIP 只使用于小型互联网。RIP 认为好的路由就是它通过的路由器数目少
RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
RIP 协议的特点:
-
仅和相邻路由器交换信息
-
路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表
-
按固定时间间隔交换路由信息
路由表最主要的信息就是: 到某个网络的距离(即最短距离),以及应经过的下一跳地址。路由表更新的原则是找出到每个目的网络的最短距离。这个更新算法又称为距离向量算法。
距离向量算法:
- 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1;
- 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
- 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
- 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
- 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16
- 返回
RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且存在一个问题就是 : 当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。
开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。
开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。
OSPF 协议的特点:
-
向本自治系统中所有路由器发送信息。这里使用的方法是
洪泛法
: 路由器通过所有输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又将此信息发往其所有的相邻路由器(但不再发给刚发来信息的哪个路由器) -
发送的信息就是与本路由器相邻的所有路由器的链路状态。所谓的“链路状态”说明本路由器和哪些路由器相邻,以及该链路的度量
-
只有当链路状态发生改变,路由器才向所有的路由器用洪泛法发送此信息,不像 RIP 那样,定时间的交换更新路由表信息
所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。
OSPF 不用 UDP 而是直接用 IP 数据报传送,OSPF 构成的数据报很短,这样做可减少路由信息的通信量。数据报短的好处是: 不需要数据报分片传送,分片传送的数据报只要丢失一个就无法组装成原来的数据报,导致整个数据报重新传送
我们知道,内部网关协议 RIP 和 OSPF 协议都是为了设法使数据在一个 AS 自治系统中尽可能有效地从源站传送到目的站。(实际上,所有的在自治系统内部使用的路由选择协议都是要寻找一条最短的路径)
AS 之间的路由选择很困难,主要是由于:
-
互联网规模很大;
-
各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;
-
AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。
由于上边的情况,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能绕圈子),而并非要寻找一条最佳路由。BGP 协议采用了路由向量路由选择协议
每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP(端口号为 179) 连接来交换路由信息。
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
路由器结构划分为两个部分: 路由选择
和分组转发
路由选择部分,其核心构件是路由选择处理机,任务是根据所选定的路由选择协议构造出路由表,同时经常或定期的和相邻路由器交换路由信息而不断地跟新和维护路由表。
分组转发部分由: 交换结构、一组输入端口、一组输出端口组成。交换结构又称为交换组织,作用就是根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。
“转发”仅仅涉及到一个路由器,而“路由选择”涉及到多个路由器,路由表是许多路由器共同协同工作的结果。
Ipv6 协议数据单元 PDU 称为分组,而 IPv4 的数据单元是数据报
主要变化是:
-
更大的地址空间。IPv6 把地址增大到 128 位
-
允许协议继续扩充
-
首部改为 8 字节对其,原来的 IPv4 首部是 4 字节对齐
-
即插即用,不需要 DHCP
-
灵活的首部格式
IPv4 向 IPv6 过渡采用 双协议栈
和 隧道技术
部分主机装有双协议栈: 一个 IPv4 和一个 IPv6,既能和 IPv4 系统通信也能和 IPv6 系统通信,双协议栈的主机(或路由器)同时具有两个 IP 地址: 一个 IPv4 和一个 IPv6
那么双协议栈的主机是如何知道使用哪一种地址呢?它是使用域名系统 DNS 来查询的。如果 DNS 返回的是 IPv4 地址,那么双协议栈的源主机就使用 IPv4 地址,如果 DNS 返回的是 IPv6 地址,那么双协议栈的源主机就使用 IPv6 地址
这种方法就是在 IPv6 数据报要进入到 IPv4 网络时,把 IPv6 数据封装成 IPv4 数据报。当 IPv4 数据报离开 IPv4 网络中的隧道后,再把数据部分交给主机的 IPv4 协议栈。