1. 转发和路由⭐

网络层主要有两个功能:转发和路由

forwarding 转发 pkt到达router后,router为其选择合适的输出链路
routing 路由 pkt从发送方流向接收方,网络层决定pkt路径.计算路径的算法即路由选择算法
对比
- forwarding:
- 发生在路由器上
- 时间很短(纳秒),通常由硬件实现
- routing:
- 发生位置不一定
- 时间长的多(几秒),通常由软件(算法)实现
⭐网络层服务 简单灵活的、无连接的、尽最大努力交付的数据报服务
⭐区分网络层&传输层
- 网络层:在两台hosts之间的连接(VC网络中包括中间的routers)
- 传输层:在两个process之间的连接

2. 分组交换网络

分组交换网络分为两种,对应Ch1中的电路交换&分组交换

数据报网络
datagram networks
使用目的地地址转发pkt,
虚拟连接网络 (VC)
virtual connection networks
使用VC号码转发pkt; 只有VC网络需要在IP数据报传输前建立virtual connection,即连接setup过程

2.1 VC网络

image.png

- VC网络传输数据报前需要建立连接,使用VC**号码**转发pkt,不依赖destination
- 使用在ATM, frame-relay, X.25,今天的Internet不再使用
- 路由器维持着连接状态(路由表)

2.2 Datagram网络

image.png

- 无需setup
- 路由器没有保存e2e连接状态
- pkt转发依赖目标地址,非VC号,如下图,限定IP范围和输出链路的对应

image.png |

对比
image.png

  • 最长匹配

在DG交换中,一个IP地址为了避免重复匹配,选择”最长匹配”策略:选择可匹配目的地址中最长的一个

例题,已知路由表
image.png
和两个IP
image.png
DA1:只能匹配0
DA2:可匹配1,2,选更长的1
*最长匹配的前提是匹配完整,不是说地址一和0,1,2前21位都一致,从里面选最长的,DA1甚至没有完整匹配

3. 路由器

3.1 构造&功能

|

| 整体 | | | | :—-: | :—-: | —- | —- | | | image.png | | | | | 输入 | | | | | image.png | |
- line termination:物理层
- link layer:链路层
- lookup:通过datagram的dest查询转发表,确定output
| | | 交换结构 | | | | | image.png | image.png | image.png | | | 由cpu控制,pkt复制到系统内存,速度被内存带宽限制 | 通过共享总线交换,但会被总线带宽限制 | 通过互联网络交换 | | | 输出 | | | | | image.png | |
- 输出端有buffer:当流入速度快于流出速度,进行buffer,当溢出时会产生排队时延和丢包(路由器中未实现流控)
| | | 联系“封装”过程 | | | | | pkt进出router时链路层header与网络层header变化原因:
- 输入时:经过link层—>经过network层,进行lookup查询**转发表**,确定输出端口
- 输出时:经过network层,重设首部—>经过link层,重设首部
| | | |



| 运行算法 | | | | | 运行路由算法 | | | | | 转发 | | | | | 转发数据报到输出link | | |


4. IP—因特网协议

4.1 数据报—分片&重组

IP数据报结构
image.png

| 第二行 | id:标识相同数据报
一个数据报中的protocol overhead(协议开销):传输层TCP header+网络层IP header
转发后-1,为0时被丢弃,由于TTL每次变换,每次转发到新的router后checksum要重新计算
offset: 从小到大标识分片顺序
计算方法:当前分片前应抵达数据大小/8
(因此需剔除之前每片的ip hearder)

见👇例题
flag:默认为1,当为0,说明该片为所在数据报最后一片 | | | :—-: | —- | —- | | | | | | TTL | | | 协议开销 | | | 分片
&
重组 | image.png | 分片:链路层frame的最大传输数据量(MTU)是协议相关,网络层的IP数据报大小被链路层MTU限制,sender可发出的原始数据报对于router可能无法一次发送,需要分片,因为分片发生在路径的router上 | | | | 重组:重组无法发生在router,因为不同pkt无法保证路径相同,只能在dest上重组 | | | | header⭐:为保证重组顺序,需要给每个分片pkt复制一遍原始数据报的header,加上传输层TCP的header,故每个分片pkt的开销:传输层TCP header+网络层IP header |

例题

|
1. 例题:图示分片后的pkt信息,已知TCP和IP的header都是20bytes:
image.png
1. receiver接收分片后网络层->传输层投递分片的顺序如何

  1. sender一共传输了多少字节(忽略链路层header)
    3. sender上的应用层共传输了多少字节 | | | —- | —- | |
    1. 根据id,一共有4个数据包,对于每个数据包根据offset判断先后,当flag==0,说明为末尾
    (注意1000-1003不标识任何数据报投递的顺序,因此分片的投递不能写成DABJHEIGCF)
    2. (500+500+…+150+200)-20×10+4×20=4090
    分片后的header不属于sender原始数据,但4个数据报的header来自sender
    3. 4090-8×20=3970
    sender发出数据-4个IP header-4个 TCP header | | |
    2. 例题:计算offset
    image.png | 分片1:
    offset=0/8=0
    分片2:
    offset=(1500-20)/8=185
    分片3:
    offset=(3000-40)/8=370 |

4.2 IPV4

image.png IPV4记法 32bits,分四组,八位一组,化为十进制后可从0-255
子网 使用主机和路由器不同接口产生的隔离网络(左图6个子网)
子网掩码
(mask)
如223.1.1.0/24其中/24为mask
32bits中最左侧24位定义了所在子网(现实中会表示为255.255.255.0说明左3*8为网络号)
特殊IP 0.0.0.0:本主机源地址
255.255.255.255:广播目的地址
- 特定子网广播地址:网络号不变,主机位全为1
  • Classless Interdomain Routing—CIDR(**无类别域间路由选择**)

这是一种区别于过时的分类编址的方式,形式a,b,c,d/x,地址高x位是网络号,确定子网,低32-x区分子网内设备

4.3 DHCP

定义 Dynamic Host Configuration Protocol—DHCP(动态主机配置协议): 当某组织获取一块地址后,通过DHCP可为组织内host自动分配IP地址,其把主机连进组织网络的能力让其也被称为”plug-and-plug”或者”zeroconf”协议
过程 image.png 该过程的四次广播
- dicover:客户把数据报广播至所有与子网连接的节点
- offer:DHCP server(不一定一台),广播回复
- request:客户选取最优地址,继续广播,告知其余server该IP已被使用
- ACK:server确认


|

例题

例题:DHCP分配地址块,已知ISP有如下地址块
image.png
1. 分给8个组织网,host个数相等
1. 当要求分给三个组织网络,1st有120台host,2nd有250台host,3rd有120台host

1. 8=2^3,为网络号延长3bits用来区分8个组织即可,则

image.png
2. 组织0,2:120<2^7,保证低7bits留给子网内设备;组织1:250<2^8,保证低8bits留给子网
image.png
|

4.4 NAT

定义 Network Address Translation(网络地址转换):
如果给internet中每台设备一个唯一IP地址,那么IPV4资源无法满足,因此产生了NAT,一个NAT路由器有单一IP地址,假设为138.76.29.7,由其连接的组织网络中的设备都使用10.0.0.0/24编址(private network—专用网络),这些地址只对组织内其他设备有意义
区分 概念区分:NAT和子网划分🎭
- 子网划分是ISP把地址块分给不同的组织(子网),依旧使外网可识别的IP
- NAT是转换网络地址使用,可以把公网IP转换为私网IP,私网IP无法被外网设备辨识
路由聚合 路由聚合—route

aggregation: 使用单个网络前缀告知多个网络的能力
image.png
ISP告知外界所有前缀200.23.16.0/20的数据给它即可,而无需知道ISP内部信息 | | 内->外 | 组织内设备给外网的pkt经过NAT路由器统一使用138.76.29.7 | | 外->内 | 外界pkt通过NAT路由器,路由器查询NAT转换表,查找接收pkt的组内host | | 示意 | WAN口:Wide Area Network连接外网; LAN口:local area network连接内网
image.png | | | 通过router后封装在frame中datagram的header改变⭐
- TTL: 每次-1
- checksum: 因为TTL变化
- 可能有IP: 当使用NAT技术时
- 出子网:改变src IP
- 入子网:改变dest IP
|

4.5 ICMP

定义 ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息
应用
- 错误报告—不可达的host,网络,端口,协议等
- echo request/response—ping的实现
- tracert/traceroute—host依次发生TTL为1/2/3…的pkt,路径router每次减一,为0丢弃,丢弃后发送ICMP消息回source,由此可以判断路径中router个数
  1. (tracert重复上述过程三次)<br /> |

4.6 IPV6

| image.png | Dual Stack
双协议栈技术就是指在一台设备上同时启用IPv4协议栈和IPv6协议栈
典型不同:
- flow:IPv6具有流,类似一项要求进行实时传输的服务,如音频视频(流媒体),但文件电邮传输不算流,因为非实时的
- 40字节header
- 地址长度从32bits->128bits
不再存在的IPv4属性:
- 分片, checksum, option
| | —- | —- | | 一个真实的IPv6地址 | | | image.png
128bits,分为8组,每组16bits,用4个16进制数表示:
- ::是使用零压缩算法,表明该分组为0000
- %18是说明该地址仅针对标号为18的网络接口(网卡)
| | | IPv4->IPv6:建隧道(Tunneling) | | | image.png |
1. B->C时把IPv6数据报封转为IPv4格式
1. CD完全无视其中的IPv6数据报
1. 到达E后,E识别出其中的IPv6数据报,提取后恢复IPv6转发


区分隧道和双栈:
CD类似一段隧道,过程中pkt在IPv4隧道中,与IPv6暂时切断联系,区分Tunneling和Dual Stack,前者是转换,后者是通用 |


5. 路由选择算法⭐

一般根据算法是集中式/分散式划分

  • 集中式(centralized):路由时已经知道全局信息(每个链路的状态)
  • 分散式(decentrailzed):路由时路由器只知道相邻链路信息**,必须迭代,**分布式的计算出开销最小的路径

    5.1 Link State 算法

    LS算法是集中式算法,实际上为Dijkstra算法,给定图后求出单源最短路径,其核心为
    image.png
    例题: 见LS算法例题
    复杂度:对于n个节点,复杂度在O(n)(可以优化到nlogn)
    **

    5.2 Distance Vector算法

    DV算法是分散式算法, 核心为Bellman-Ford方程:dx(y)=minc{c(x,v)+dv(y)}
    特点⭐:**异步(Asynchronous ),迭代,自终结,分布式例题: 见DV算法例题

5.3 毒性逆转

链路开销改变时可能产生路由环路问题(开销变大时),需要使用毒性逆转来避免


6. Internet路由⭐

6.1 路由器自治系统

| image.png |
- 如左图所示即为一个路由器组织自治系统**(Autonomous System, AS),每个AS由一组相同管理下的路由器组成,不同ISP又可划分多个AS;
- 转发表通过
intra-AS (自治系统内部路由选择协议)and inter-AS (自治系统路由选择协议)路由算法解决AS内以及AS间的路由选择问题;
- 网络中
所有AS间的选择协议相同,为BGP(Broder Gateway Protocol),边界网关协议
-
无论是否为网关路由器都会同时运行intra/inter**协议
| | —- | —- |

6.2 AS内: RIP算法

RIP(routing information protocol)路由信息算法基于DV算法,但其中的链路开销变成到下一路由器的跳数hops

image.png 一些特点:
- 路由器每30s给邻居发送公告交换距离信息,当180s后没有回复,则认为其无效
- 公告通过UDP pkt发送
- 使用毒性反转防止路由环路
- 最大允许15跳,因此使用16跳标识∞

6.3 AS内: OSPF算法

OSPF(open shortest path first)最短路径优先算法,是一种LS算法,有以下特点:


- 公告会通过flooding发给整个AS
- OSPF msg直接通过网络层IP携带,而非TCP或IP
- 安全性:OSPF是授权的
- 当多条同样开销路径并存,不同于RIP的一般LS从相同开销中选一个,OSPF会一起保存
- 目前的大型网络基本都使用OSPF,因为其可以分级
image.png

6.4 AS间:BGP

BGP(Broder Gateway Protocol),边界网关协议,为保证连接可靠性因此基于TCP

  • 通过BGP路由信息

BGP实际上为某个AS中的路由想办法告知其余AS自己的存在,让他们自己斟酌怎么到这
image.png

  • eBGP:外部BGP,连接横跨不同AS的BGP连接
  • iBGP:内部BGP,在一个AS内部中两台routers之间的BGP会话

  • 最优路由确定 | BGP路由 | route=prefix+attribute | | —- | —- | | prefix | 目的地前缀,通常为子网或子网集合 | | attribute | attribute:当进入BGP的输入产生的路由不唯一,顺序调用以下规则直到剩下唯一一条
    - local preference:本地偏好,由网管设置,直接选择最高偏好的AS
    - shortest AS-PATH:AS-PATH包含了通告已经通知过的AS;如果偏好相同,选择最短AS-PATH的
    - closest NEXT-HOP router:NEXT-HOP是AS-PATH起始路由器接口的IP;当偏好和AS-PATH都一样,从余下路由中进行热土豆选择,即最靠近NEXT-HOP的路由使pkt尽早离开当前AS
    | | | 热土豆路由:路由器收到pkt后要尽快的把其送出自己的AS,即避免在自己AS中开销过大,但它不会关心在其余AS中的开销,总之是一个自私算法 |

例题: 路由选择例题

  • 小结**:关于不同协议运行基础⭐: | 用途 | 协议/算法 | 底层支持 | 类型 | | —- | —- | —- | —- | | AS内 | RIP | UDP | DV | | | OSPF | IP | LS | | AS间 | BGP | TCP | /** |

7. 广播和组播

了解内容

  • 广播

广播(Broadcast):把pkt路由至所有节点,但此方法很低效,可能重复路由,需要优化

记录轨迹 直接在每个节点中做标记,只路由之前没有接收的pkt
reverse path forwarding 在节点中存放S-D的最短路径,只有pkt通过最短路径来时才路由,否则多半是重复pkt
spanning tree 构建扫描树后再路由
  • 组播

组播(multicast)和广播的不同在于组播技术的初衷是在IP网络中,以”尽力而为”的形式发送信息到某个目标组**(subnet)**,这个目标组称为组播组,源主机发送一份数据,数据的目的地址是组播组地址,常见实现:

shortest tree 直接通过Dijkstra构建最短路径树后剪枝
RPF 同上

MindMap

image.png