计算机网络复习————网络层,数据链路层
网络层
网络层功能与服务类型
主机与主机的通信,路由器实现到了网络层。发送端从传输层把报文段打包成数据包,传给链路层;接收端提取出报文段传给传输层。
主要两个功能:转发和路由
- 路由:确定发送端到接收端的过程(全局)
- 转发:路由器内部的事情,(局部)
ATM,X.25,frame relay中网络层有建立连接的功能
提供连接功能的网络成为虚电路网络,不提供连接功能称为数据包网络。
路由器
路由器的两个关键功能:
- 运行选路算法/协议(RIP, OSPF, BGP)
- 从入链路到出链路转发 数据报
结构
四个部分,输入端口,输出端口,交换器,处理机。
三种交换类型
丢包和时延的原因,输入输出排队。
输入排队
- 交换结构比组合的输入端口慢-> 排队可能出现在输入队列
- 线头(HOL)阻塞: 排队的数据报在队列的前面阻碍队列中的其他数据报转发
- 由于输入缓存溢出,出现排队时延和丢包!
输出排队 - 当到达速率经交换机超过输出链路速率时缓存
- 因为输出缓存溢出,出现排队(时延)和丢包!
IP数据包格式
首部长度字段每一位代表4个字节,第二行主要用来分片;互联网检查和只检查首部。
分片和重装
原因
- 网络链路有MTU (最大传输长度) – 最大可能的链路级帧
不同的链路类型,不同的 - 在网络中,大IP 数据报被分割(“分段”)
一个数据报 变为几个数据报
“重新装配”仅在最后目的地
IP首部比特用于标识、排序相关段。
首部占20个字节不需要分,段标识(fragflag) = 0表示后面没有分片,偏移(offset)是前面所有分片的body长度/8。
IP地址
连续的32个比特,人为分为4个字节,每一个字节换成二进制,加上点就形成了我们常见的128.12.0.1……
PC机只占一个ip地址,路由器有多个ip地址
路由器隔开的就是子网,同一个子网设备的ip地址,子网部分是一样的。
**CIDR表示法:**任意长的地址的子网部分,地址格式: a.b.c.d/x, 其中x是地址子网部分的比特长度
例如:200.23.16.0/23 表示前面23位是子网地址,后面9位表示主机。
传统的表示法五类
- A类IP地址:用可变的7位(bit)来标识网络号,可变的24位标识主机号,最前面一位为"0“
- B类IP地址:用可变的14位来标识网络号,可变的16位标识主机号,前面两位是"10“
- C类IP地址:用可变的21位来标识网络号,可变的8位标识主机号,前面三位是"110"
子网掩码:网络位都置1,主机位置0,用来隐式告诉网络位数和主机位数。
DHCP协议
给主机分配ip地址,手动分配,自动获取。
DHCP用来自动分配IP地址,动态分配。
过程
- 客户机发送广播discover
- DHCP服务器,收到信号发送广播,发送一个可用的ip地址(可能有多个DHCP发送ip地址的offer)
- 客户机发送广播,request,自己接受了哪个ip地址
- DHCP服务器广播发送一个ACK
通过四段客户级获得了一个ip地址。
NAT网络地址转换
设置内网,内网中设置一些私有的ip地址。很大程度上扩大了互联网的规模。
用端口号来区分内网的进程,内网设备先发送到路由器,经过路由器转换ip地址为对外的ip地址,存到转换表里然后发送出去,接收后根据转换表,再发送到子网中对应的ip地址。
IPv6
为什么提出了IPv6,32位IP地址资源分配殆尽,
IPv6 :
- 固定长度 40 字节首部
- 不允许分段
- ip地址128位
- 用16进制冒号表示
- IPv4前加80个0,16个1,组成IPv6
链路状态路由算法
- 每个节点都周期性的向网络上所有其它节点广播自己到邻居节点的距离。
- 结果:每个节点都具有完整的网络信息,即知道网络上每条边的距离。
- 于是,每个节点都可以彼此独立的使用Dijkstra最短路径算法来计算到网络上其它节点的最短路径。
使用迪杰斯特拉算法:
距离路由向量算法
- 网络上的每个节点都周期性的与相邻节点交换信息。
- 信息的内容主要包括由本节点到网络上所有其它节点的最短距离。这些距离构成一个距离数组,被称为距离向量 (Distance Vector)。
只在距离变化时发送,只给邻居发送,直到所有距离都稳定就不在有发送了。
就是佛洛依德算法
每个节点 X 都维护如下数据结构:
Cost List: 由节点 X 到每个邻居节点的距离。
其中由节点 X 到节点 Y 的距离记为:c (X, Y)
Distance Table:由节点 X 经由每个邻居节点到网络上其它节点的距离。
其中由节点 X 经由节点 Z 到节点 Y 的距离记为:
D (Y, Z) ,
D (Y, Z) = c (X, Z) + Z到Y的最短距离
比较
Distance Vector | Link State |
---|---|
仅与邻居节点交换消息 | 向网络上所有其它节点广播消息 |
消息包括到所有节点的最短距离 | 消息仅包括到邻居节点的距离 |
收敛速度比较慢 | 收敛速度比较快 |
能够广播不正确的路径信息 | 能够广播不正确的链路信息 |
有Count to Infinity Problem(数到无穷) | 没有Count to Infinity Problem |
Internet路由协议
自治系统内部:
RIP (Routing Information Protocol)基于UDP实现
距离向量路由算法,使用跳数衡量距离
OSPF (开放最短路优先):
“开放”: 公共可用 使用链路状态算法 LS分组分发 在每个节点拓扑图 使用 Dijkstra算法的路由计算
OSPF携带每个邻居路由器一个项 通告散布到整个AS(经洪泛) 携带在OSPF报文中直接封装在IP中(而不是TCP或UDP)
自治系统之间
Internet inter-AS 选路: BGP基于TCP
路由器的对(BGP对等方)交换选路信息通过半永久的TCP连接: BGP会话
注意到BGP会话不对应着物理链路(覆盖网络)
当AS2向AS1通告一个前缀, AS2则承诺它将转发任何指向该前缀的数据报 AS2能够在它的通告中聚合前缀
- 在3a和1c之间有eBGP 会话,AS3向AS1发送前缀可达性信息
- 1c则能使用iBGP来向AS1中的所有路由器分发这种新前缀可达信息
- 1b则能经1b到2a的eBGP会话向AS2重新通告新的可达信息
- 当路由器知道了一个新前缀,它将在其转发表中未该前缀创建一个表项
广播&&组播(多播)
实现方法:
- 洪泛:无条件的转发给相邻邻居
- 受控洪泛:收到的数据包不在转发
- 反向路径转发:如果收到的数据来源于的节点在自己到源端的最短路径上,就转发
生成树转发:沿着树干发数据,只发给子节点
组播与广播的区别,
广播不能穿越子网。
组播是一对一组,可以穿越路由器,这一组可以来源于不同的子网。
实现方法:
- 生成树
- 源端的树:最短路径树,(迪杰斯特拉算法);反向路径转发
- 共享树:最小生成树
数据链路层
数据链路层的服务
相邻节点之间的数据传输,节点(主机,路由器),处理对象是帧。
发送端,把数据包打包成帧,接收端,把首尾去掉取出数据包发送给网络层。
功能:
- 打包成帧
- 链路接入控制(MAC)
- 可靠数据传输(相邻节点之间的可靠数据传输)
- 流量控制(相邻节点)
- 差错检测
- 纠错
协议以硬件实现
差错检测
所有的差错检测都不是完全可靠的
奇偶校验
特点
- 可以查出任意奇数个错误,但不能发现偶数个错误。
- 若比特差错概率很小,差错独立发生,一比特奇偶校验可满足要求。
- 若差错集中一起“突发”(突发差错),一帧中未检测到的差错的概率达到50%。
二维奇偶校验
checksum校验和
发送方:
将数据的每两个字节当作一个16位的整数,可分成若干整数;
将所有16 位的整数求和;
对得到的和逐位取反,作为检查和,放在报文段首部,一起发送。
接收方:
对接收到的信息 (包括检查和)按与发送方相同的方法求和。
全“1”:收到的数据无差错;
其中有“0”:收到的数据出现差错。
循环冗余CRC
设发送节点要把数据D(d 比特)发送给接收节点。
发送方和接收方先共同选定一个生成多项式 G(r+1比特),最高有效位 (最左边)是1。
- 发送方:
计算出一个r位附加比特R,添加到D的后面产生DR(d+r 比特)
DR能被G模2运算整除,一起发送。 - 接收方:用G去除接收到的DR(d+r比特)
余数非0:传输发生差错;
余数为0:传输正确,去掉尾部r位,得所需数据D。
MAC协议
信道分割MAC协议
TDMA时间信道分割,把分割后的时系分配固定的节点发数据
FDMA频率信道分割,固定的频率只能固定的节点使用
FDMA可能有损失,TDMA可能有延时
随机接入MAC协议
想法就发,可能就会出现多个节点同一信道上发送,造成冲突。
解决冲突:
- 检测
- 解决
ALOHA,CSMA
Slotted ALOHA(时隙ALOHA)
每一个节点只能在起始时刻发数据,没有冲突则成功,否则重发。如果冲突,则下一个时刻以一个概率发数据。
N个节点中,任意节点成功传送的概率:
N p(1-p)N-1 取极限后,最大效率为:1/e = 0.37。
即当许多节点都有很多帧要传输时,最多只有37%的时隙在成功传输, 信道有效的传输速率是0.37R b/s。 类似分析得出:37%的时隙空,26%的时隙有冲突。
pure ALOHA(纯ALOHA)
P(给定节点成功传送) = P(节点传送) ·
P(没有其他节点在[t0-1,t0]内传送) ·
P(没有其他节点在[t0,t0 +1]内传送)
= p . (1-p)N-1 . (1-p)N-1
= p . (1-p)2(N-1)取极限为 1/(2e) = 0.18。
只有时隙ALOHA协议的一半。
CSMA(载波侦听多路访问)
不能够完全避免冲突
某个节点在发送之前,先监听信道。
信道忙:有其他节点正往信道发送帧,该节点随机等待(回退)一段时间,然后再侦听信道。
信道空:该节点开始传输帧。
D在t1时刻检测信道为空,开始发送,但是之后B发送的信号与D发生干扰。传播时延会造成冲突。
CSMA/CD(有冲突的CSMA)
增加“载波侦听”和“冲突检测”两个规则。“边说边听”LWT(listen while talk)。
基本原理: 传送前侦听
信道忙:延迟传送
信道闲:传送整个帧
发送同时进行冲突检测:一旦检测到冲突就立即停止传输, 尽快重发。
目的:缩短无效传送时间,提高信道的利用率。
轮流式MAC协议
轮询式
指定一个主节点,以循环的方式轮询每个节点。并告诉节点能够传输的最大帧数。
轮询顺序: 1, 2, …… , n
主节点通过观察信道上是否有信号来判断节点何时完成了帧的发送,再询问下一节点。
缺点:
- 有延时
- 有单点故障
令牌传递协议 (token-passing protocol)
没有主节点。
设置一个令牌(token,小的专用帧);
令牌以固定顺序循环传递,给节点传输机会。
如:1, 2, …… , n
节点收到令牌:
有帧要发送,传输,传完后将令牌转发到下一节点;
否则,直接将令牌转发到下一节点。
缺点:
- 令牌传递是分散的,效率高。
- 一个节点的失效会使整个信道崩溃。
- 一个节点忘记释放令牌,必须恢复令牌到环中。
- 相应协议标准:IEEE802.5 令牌环。
MAC地址和ARP
MAC地址用来相邻节点间传输数据,MAC地址网卡的唯一编号。
48个比特,MAC地址不会变,数据链路层的寻址方式。
ARP地址解析协议,IP地址到MAC地址的映射。
发送端,首先打包成帧,先根据ip地址查MAC地址,没有就广播ARP,获取MAC地址,打包成帧发送出去。路由器端口发现MAC地址匹配,在重新打包,再次执行上诉过程,直到接收端收到数据。
以太网(Ethernet)
物理层
和mac层,协议CMSA/CD
使用同轴电缆
便宜简单,速率高,出现的较早。
帧的格式
64个比特的前导 | 48个比特的源端地址| 48个比特的目的端地址 |16个比特type | body | 32位的CRC
以太网的CMSA/CD
冲突等待时间是冲突次数N,rand{1,2……,2^N-1}*T
T是传输512个比特需要的时间
N>10 从1~1023随机选取
N>16丢弃
近似公式:
- 当tprop接近0时:效率接近1。即如果传播时延是0,冲突节点将立即中止而不会浪费信道。
- 当ttrans变得很大时:效率也接近于1。即若一个帧夺取了信道,将占有信道很长时间,信道在大多数时间都会有效地工作。
常见的以太网结构
10Base2:总线拓扑,使用细同轴电缆,传输速率10Mb/s
10BaseT: 星形拓扑,使用双绞铜线,传输速率10Mb/s
100BaseT:星形拓扑,使用双绞铜线,传输速率100Mb/s
吉比特以太网:使用光纤和双绞铜线,传输速率1Gb/s。
以太网技术由IEEE802.3工作组标准化,称为802.3LAN。
适用于大的数据包,物理距离短的传输。
交换机(Switch)
数据链路层设备,有缓存,有MAC地址,可以选择性转发,即插即用。
交换表:主机,和主机挂在交换机的哪个口上的
交换表自学习,通过交换机发送数据包时,获取对应的交换机接口
hub连接的主机不能同时发数据,交换机可以同时发数据
交换机不能隔离子网,路由器才能隔离子网,路由器功能强大,交换机没有ip地址,路由器有ip地址。