Network Layer
问答:
- Router
两个主要功能
- forwarding,将包从Router的input移动到合适的output(move packets from router’s input to appropriate router output)
- routing,定义包从源头到终点的路径,靠Routing algorithms 实现(determine route taken by packets from source to destination
- )
比喻:forwarding是在十字路口的时候选择走哪个路口,routing为规划七点到终点的路程
Network Layer是干嘛的?
- 将Segment从Sending传输到Receiving的host
- 在发送端,将segment包装(encapsulates)到datagrams中
- 在接收端,将segment传到transport layer
Network Layer Protocol存在于哪里?
- 存在于每一个Host和Router中
Router的作用:
- 检查所有经过路由器的IP datagram的header
4.1 Overview of NetWork Layer
IPv4 地址标记
每一个IPv4有4个字节,一共32 bits
IPv4地址有三种标记方法
- 二进制标志
- 十进制带点的标记方法(用得最多的),每一个点之间用一个字节来标识,范围为0~255
- 十六进制标记
Data Plane
是本地每一个路由器的功能:(local per-router function)
- 决定datagram如何从路由器的input中forward到路由器的ouput
- 也是forwarding function
Control Plane
全部大网络的 logic network-wide logic
- 决定datagram是如何走从end-end路径
两个control-plane的方法:
- traditional routing algorithms,在路由器中实现
- Software-defined networking(SDN),在远程的Server中实现
Per-router control plane
在每一个路由器中都有routing algorithm部分相互协调
Logically centralized control plane
一个独特的(通常是远程的)控制器与本地控制代理(control agents CAs)进行交互
网络成服务模型
4.2 What’s inside a router
输入端口功能
分散式切换(decentralized switching)
- 利用header的值,在输入端口的memory中寻找适合forwarding的输出口
目标:以指定的 ‘line speed’ 完成输入端口的处理
队列(往后会有专题):如果datagrams到达的熟虑超过了forwarding进入switch fabric的速率,就会有队列产生
两种forwding的方法
destination-based forwarding
- 只依靠终点的IP地址
generalize forwarding
- 依靠任何的header field value来实现
最长前缀匹配规则
longest prefix matching
利用最长的相同前缀在forwarding table中匹配终点地址, 也就是匹配最大的公网id,如果 两个子网有重合,/x 匹配x大的那个
这种匹配规则通常在三元内容可寻址存储器(TCAMs)中使用,也就是非常快的内存
- 内容可寻址:当前地址到TCAM:在一个时钟周期检索地址,无论表大小
- 在TCAM中能容纳将近 ~1M 个routing table entries
Switching fabrics
负责将包从input buffer中transfer到何止的output buffer中
转换速率:包从input转到output的率
- 通常以 $input/output $ line rate
- N个input:switching速率是所需线路速率的N倍
三种类型的switching fabrics
通过memory来switch
第一代的router
- 传统的电脑通过CPU直接的控制来swtich
- 包会被复制到系统的memory
- 速率被memory的bandwidth限制(每个数据报2个总线交叉,进内存又出内存)
通过Bus来传输
从input端口的memory到output端口的memory是通过一条共享的bus来是实现的
- 速率被bus bandwidth限制
- 可提供企业级的接入速率
通过互连网络来传输
Switching via interconnection network
优势:不存在bus bandwidth的限制
高级设计:将数据报分割成固定长度的单元,通过fabric交换单元
输入端口Queueing
当fabric slower than inputs ports时,在输入端口会有input queuing出现
- queuing delay以及loss都是由于input buffer overflow造成的
- Head-of-the-Line (HOL) Blocking:队列前的队列数据报阻止队列中的其他数据向前移动
输出端口功能
极为重要
输出端口结构图:
- 有可能会出现因为缺少buffer而导致的丢包
Buffering:datagram从fabric到达的速率大于传输速率
scheduling discipline:选择特定的正在等待的包取发送
- 优先scheduling:谁能获得最好的性能发谁,网络中立性
输出端口的Queueing
当通过fabric到达的速率大于输出线的书v了
Queueing (delay) and loss due to output port buffer overflow
计算所需的Buffer
Scheduling mechanisms
Scheduling:选择下一个到发送Link的包
FIFO Secheduling
first in first out
如果queue 是满的,那最后一个进来的包会被丢掉
Priority Scheduling
有一些包是更重要的
例如:看视频一定要看,但是邮件可以等会再来
Round Robin Scheduling
每一个输入端口端口轮着来发包到link
也可以对每一个端口来赋权重,高权重的可以有更多的运力
4.3 IP Internet Protocol
互联网network layer
IP datagram 格式 ipv4
一共长20 bytes
IP碎片化以及重组
网络存在MTU的限制,因此
碎片化:大的IP datagram要分成小片,即一个大的datagram变成几个小的datagram。
重组:在终点进行重组,IP header的bits用来标识每一个片的顺序
碎片化例子
offset = 这个片有的datagram数据的bytes数 除以 8
IPv4 Addressing
Introduction
IP地址长:32 bits
interface:连接host/router中实际的线
=> IP地址与interface有关,每一个interface都有特定的IP地址
Classful IP addressing
将IP 32 bits(4 bytes) 分为netid以及hostid
IP分类:
Class A 8bits netid
Class B 16bits netid
Class C 24bits netid
Class D Multicast address
Class E Reserved for future use
通过第一个bytes来区分class:
Class A Byte1 0~127
Class B Byte1 127~191
Class C Byte1 192~223
Class D Byte1 224~239
Class E Byte1 240~255
留用的私用IP地址
用处:用来测试网络是否与外面连通
Subnet
IP 地址:
- 高位:子网部分
- 低位:host部分
什么是subnet
- 设备的接口都接到同一个子网ip上,形成一片独立的网络,叫子网
Subnet mask(or slash notation): 用netid的bit的数量来表示,例如:
- /8 class A
- /16 class B
- /24 class C
Subnet的规则
增加netid的长度并减少hostid的长度
为什么要subnetting,因为要尽可能的利用ip地址,根据subnet的host数量来给其分配ip,而不是直接A类B类C类的分
计算Subnet的IP
计算subnetid部分以及hostid部分,通常为有多少个子网就进行对该类网的hostid部分**进行平分**。
步骤:
- 计算subnetid所需的bit,有6个子网,则需要3个bit,为 l o g 2 6 = 3 log_26 = 3 log26=3 向上取余。
- 将该类网的hostid的MSB的3个bit拿出来,来分subnet
- 将6个子网所对应的3个bit后面补(8-3=5) 5个0,计算该子网的开始ip
Subnet example
Subnet个数
VLSM
variable length subnet mask
DHCP
Dynamic Host Configuration Protocol
Q: how dose a host get IP address
目标:允许host在加入网络时动态的从网络server中获得IP
- 可以renew其曾经使用过的地址
- 允许重用地址
- 支持移动users
DHCP overview:
-
host broadcasts “DHCP discover” (optional)
-
DHCP server responds with “DHCP offer” (optional)
-
host requests IP address “DHCP request”
-
DHCP server send address “DHCP ACK”
流程图(走的是broadcast UDP)
DHCP: more than IP address
can also return address on subnet:
- address of first-hop router for client
- name and IP address of DNS server
- network mask
Testing
NAT Network address translation
NAT: network address translation
全部的datagram离开本地网络都用一个IP,不同端口
上图中,右边local network是10.0.0.0/24的网
为什么要有NAT
- 一部分的的地址可以不在ISP中,只要有一个IP地址就够了
- 对本地网络的设备来说,可以随意更换IP地址而不用通知外面
- 可以在不变更本地网络中设备IP的情况下更改ISP
- 更好的安全性,里面的设备外面看不到
NAT的应用
必须要有 NAT Router
- outgoing datagram:将要发出去的datagram的原ip地址和端口替换成NAT IP address和新端口
- NAT Translation Table:记住每一个源IP 端口号, NAT IP address 新端口号变换对
- incoming datagrams:将收到的NAT IP Address和新端口号通过Translation Table查询后替换成本地网络中的源IP地址以及源端口
NAT应用例子
NAT更多
16-bit的端口移位着内部能有60,000多的连接
NAT是有争议的,因为:
- Router应该是Layer3的设备
- IPv4地址的短缺应该又IPv6来解决
- 违反端到端的论点(复杂性应该在网络的“末端”而不是中间)
IPv6 Addressing
Datagram格式:
- 固定长40byte的header
- 不允许又Fragmentation
IPv6地址长度:
- 128 bits
Datagram 图:
与IPv4的比较
移除了checksum以减少在每一个hop中的处理时间
添加了options与header外,由下一个报头字段指示
ICMPv6,新版本的ICMP
IPv4转换为IPv6
原因:并非所有的router都支持IPv6
tunneling:IPv6的datagram作为IPv4的Payload,也就是说在IPv6的datagram外再套一层IPv4的header
(IPv6 datagram carried as payload in IPv4 datagram among IPv4 routers)
Tunneling图示
4.4 Generalized Forward and SDN
什么是Software Defined Networking
传统的routing方法:
- Data Plane使用最长前缀匹配forwarding table来进行forwarding
- Control Plane在一个Router中计算forwarding table
- forwarding table只通过IP地址来进行forward pkt
SDN:提供更灵活的Control and Data Plane
- 可以用自己的算法来编程
- 可以使用pkt header中的任意一部分来forwarding
SDN如何运转
Data Plane
Controller发出一串的"match-action"规则来对pkt做任何东西
好处:更灵活了
Control Plane
不是分散式系统(不是每一个Router上都有),只在中心化的中间一个点上
好处:可编程;可创造自己的算法并在网络上试验
Generalized Forwarding and SDN 综述
OpenFlow data plane abstraction
什么是OpenFlow
OpenFlow是一种特定的SDN协议
flow由header部分来定义
Generalized Forwarding
一种简单的pkt-handling规则
- Pattern:匹配pkt header中的值
- Actions: for matched pkt:drop, forward, modify已经匹配到的包或者发pkt到controller
- Priority:消除歧义
- Conter:bytes的序号
*
为通配符
Flow Table实体
OpenFlow 例子
OpenFlow概述
能做的:match-action(基本上就是可以做任何事)
maction-action: different kinds of devices become one
4.x总结
Network Control Plane
5.1 introduction
Routing的目标:定义一条从发送源到接收端的好路线
- 路线:一连串的router
- 好:最小的cost,最快,最小的congested
Routing的抽象画
Cost抽象化
每一个线路cost求和
Router算法的分类
global or decentralized information?
Global:
- 所有路由器都有完整的拓扑结构,链路成本信息
- "link state"算法
decentralized:
- 路由器知道物理连接的邻居,到邻居路由器的链路成本
- 迭代计算过程,与邻居交换信息
- "distance vector"算法
static or dynamic?
static:
- routes这个过程基本不变
dynamic:
- routes这个过程变得很快
- 周期性变化
- link cost发生变化后也发生变化
5.2 Routing Protocols
Link-state routing algorithm
Dijkstra’s alogorthm
特点:
- net topology, link costs known to all nodes
- computes least cost paths from one node to all other nodes
- algorithm complexity : O ( n 2 ) O(n^2) O(n2) , more efficient implementations possile : O ( n l o g n ) O(nlogn) O(nlogn)
全部的node都知道link cost
- 算法完成通过link state broadcast
- 全部的node都有相同的info
计算从一个node到另一个node的最小path cost
- 结果:产生单独点的forwarding table
Notation:
C ( X , Y ) C(X,Y) C(X,Y):从x到y的link cost
D ( v ) D(v) D(v):当前已知的源头到v点的cost值,
p ( v ) p(v) p(v):从源到v的路径上的前任节点的cost path之和。不相连为∞
N ′ N' N′:最小代价路径确定已知的节点集
算法详解
画表,找每一行中最小的值,将其点添加到该行结果当中。
进入下一行
算法讨论
复杂度: O ( n 2 ) O(n^2) O(n2)(有更低的复杂度: O ( n l o g n ) O(nlogn) O(nlogn))
如果cost变了,会造成变化
Distance vector routing algorithm
Bellman-Fold equation(dynamic programming)
特点:
- dynamic programming
- each node sends it own distance vector estimate to neighbors from time-to-time
- when x receives new DV estimate from neighbor, it updates its own DV using B-F equation
- iterative asynchronous: each local iteration caused by local link cost change or DV update message from neighbor
- distributed: each node notifies neighbors only when its DV changes
Bellman-Ford例子
Distance vector algorithm
算法:
特点:
每一个结点都会有一个自己导向全部点的Table:
link cost发生变化时会发生什么
high -> low
由结点检测本地的link cost发生变化
更新routing info,重新计算distance vector
如果DV发生变化,则通知邻居
low -> high
由结点检测本地的link cost发生变化
poisened reverse
5.3 intra-AS routing in the Internet OSPF
是routing有更高的扩展性
scale:
- 不再在routing table中存储全部的目的地
- 路由表交换将淹没链接
administrative autonomy:(行政自治权)
- internet = network of networks
- 每一个小的network都能管理自己这一部分小的network
AS Autonomous System
“autonomous systems” (AS) (a.k.a “domain”) 是internet中一块大的区域
AS内部的routing:
- 仅对在同一个AS下的host,router进行routing
- 每一个AS下的都必须使用同一个intra-domain protocol
- 不同AS可以使用不同的AS内routing协议
- gateway router:在每一个AS边缘的router(于其他AS相连的router)
AS之间的routing:
- 在不同的AS之间routing
- 就是在不同的gateway router中routing
大层走大层(inter AS)的protocol,小层走小层(intra AS)的protocol
AS的routing table
forwarding table由intra-以及inter-AS共同算出来
Inter-AS tasks
gateway router要知道如何去到其他的AS中
例如:如果在AS1中的router接收到了AS1外的消息,那么AS1必须知道消息是从AS2还是从AS3中来的,并将此可达性信息传播到AS1中的所有路由器
Intra-AS Routing
也被称为**interior gateway protocols(IGP)**
通常使用的intra-AS routing协议
OSPF (Open Shortest Path First)
“open”: 公开的
使用link state算法实现
- link state pkt相互传播
- 每一个node都有topology map
- 使用Dijkstra’s 算法计算
路由器向整个自治系统(AS)内所有其他路由器发送OSPF的链路状态通告
- 直接通过IP(而不是TCP或UDP)在OSPF消息中携带
- link state: 指的是对于每一个attached住的link
**IS-IS routing协议:**几乎与OSPF相同
OSPF 高级功能
-
安全性:验证所有OSPF消息(防止恶意入侵)
-
可以同时具有多条同样cost的path(在RIP中之只能有一条)
-
对于每个链路,不同TOS的多个成本指标(例如,卫星链路成本为最佳努力TOS设置较低;实时ToS的高值) TOS:服务条款
-
集成的单投和多投支持:多播OSPF (Multicast OSPF)与OSPF使用相同的拓扑数据库
-
在大的域中,OSPF能够分层(hierarchical)
5.4 Routing among the ISPs: BGP
Internet inter-AS routing BGP
BGP (Border Gateway Protocol) AS之间的routing协议
BGP为每个AS提供了一种方式:
- eBGP:连接不同AS之间的router,拥有连接相邻不同AS的可到达性信息
- iBGP:连接AS内Router的,传播可达性信息给所有内部as路由器。
- 定义good route
允许每一个子网内向其余的网络说:我在这
BGP基本
**BGP session:**两个BGP的router在半永久的TCP连接中交换BGP信息
- 向每一个终端网络advertise path prefixes
例子:当AS3的gateway router 3a向AS2的gateway router 2C advertise 到X的path信息时,AS3向AS2保证其会forward datagrams到X处
路径属性以及BGP routes
分发的prefix包括BGP的属性:
- prefix + attributes = route
两个重要的attribute:
- AS-PATH:列出prefix分发过程中经过的全部的ASes
- NEXT-HOP:指定到下一个AS中的router
Policy-based routing
- gateway收到route的分发后,使用import policy来接收或者删除路径
- AS策略决定是否向其他相邻AS通告路径
BGP 路经分发
- AS2的router 2从接收到来自AS3的router 3a 分发的路径 AS3,X(通过eBGP)
- 基于AS2的policy,AS2的router 2c接受AS3,(通过iBGP)传播到所有AS2路由器
- 基于AS2的policy,AS2的router 2a 通过eBGP分发路径AS2,AS3,X到AS1的router 1c
多路径分发 —— AS3多了一条到AS1的
BGP路径选择
路由器可能会得到超过一条到终点AS的path,需要根据一下原则进行选择
- local preference value attribute: policy decision
- shortest AS-PATH
- closest NEXT-HOP router: hot potato routing
- additional criteria(附加标准)
BGP Test
5.5 The SDN control plane
回顾
per-router control plane
logically centralized control plane
SDN Software defined networking
逻辑击中控制平面
- 更简单的网络管理,为了避免路由器错误配置,对于交通流来说更方便
- table-based forwarding(OpenFlow API),允许编程路由器
- 中心化编程更容易,中心计算table并分发
- 分布式编程更困难
- 开放式应用control plane(可以应用在全部的router上)
传统路由器遇到的问题
SDN整体架构图
- 路由器回传
- control plane与data plane分离
- control plane功能在数据平面交换机之外
- 可编程的控制程序
Data plane switches
- 交换机以硬件形式,实现广义的数据平面转发
- 交换流表被控制器计算得到并安装在交换机中
- 交换机有以表为基础的交换控制(例如OpenFlow,减缓及和中心控制器交换协议)的API,它定义了什么式可控制的什么是不可控制的
SDN Controller
SDN控制器(网络的操作系统)
-
功能
- 保存网络状态信息
- 通过北向接口(northbound API)与网络控制应用交互
- 通过南向接口(southbound API)与网络交换机交互
- 作为具有管理性能、规模扩展、错误容忍、鲁棒性的分配系统
-
协议
用来与交换机和应用联系①北向协议(应用apps)②南向协议(交换机switches)
Network-control apps
网络控制应用(控制的大脑)
- 用低等级服务、SDN控制器提供的接口来执行控制功能
- Unbundled分算的,应用功能谁写都行
OpenFlow Protocol
不讲运行的细节
- 用来操作控制器和交换机之间的交流
- TCP被用来交换信息(可以选择加密)
- 信息类型(主要):
- 控制器向交换机
- 交换机到控制器
SDN 控制/数据平面交互例子
① s1发生链路错误,用OpenFlow接口状态信息告诉控制器
② SDN控制器接收到了OpenFlow信息,更新链路状态信息
③ Dijkstra’s routing algorithm被调用
④ Dijkstra’s routing algorithm访问网络图信息和链路状态信息,计算新的路由
⑤ 链路状态由应用与SDN控制器中的流表计算组件进行交互,计算新流表(flow table)
⑥ 控制机用OpenFlow在交换机中安装新的需要更新的表
描述OpenFlow和使用link-state来routing的传统方法的区别
5.6 ICMP The Internet Control Message Protocol
交流network layer的
用于在host和router之间交换网络层的信息
- 错误报告(无法到达的主机、网络、接口、协议)
- 回复请求(echo reportin ---- ping)
在IP上层的网络层 -> ICMP的信息包含了IP数据datagram(ICMP是IP实现的必需部分)
ICMP信息:类型如下图,代码数据加上IP datagram 的前8字节导致错误
ICMP实现过程
- 源发送一系列的UDP数据段到目的地,这些数据段里包含着一个不可能的接口数字(用来返回不可到达的信息)。首先第一组数据的TTL为1,到达第一个路由器(first hop)后超时,被路由器丢弃,同时路由器返回源一个ICMP的信息(type 11, code 0) -> TTL超时,源由此得到该路由器的名字和地址,并记录RTT
- 随后在不断的发送中,TTL时间会不断递增,能到达的路由器越来越远,也能够不断获得地址
- 知道UDP数据段到达目标主机时,目标主机因为不可能的接口数组返回(type 3, code 3) -> 接口无法到达的ICMP信息(“port unreachable”),源就此停止发送
Tracerouter 路由追踪
⽤ ICMP定位⽤户的计算机和⽬标计算机之间的所有路由器(即他们的IP地址、到达下⼀个路由器的时间)
e.g. 跳转到不同的⽹络——是因为路由器被设定不允许做出响应⼀旦中间路由器出现连接问题,后⾯的跳转信息都不会显示,就能判断哪⾥有问题