网络层
- 转发(Forward):
- 路由(Routing):路由选择算法,转发表(forwarding table)
- 链路层交换机(link-layer switches):链路层设备。根据链路层帧的字段中的值,决定转发方向
- 路由器(router): 网络层的设备。根据网络层数据报字段中的IP决定转发方向
IPv4
数据报结构
-
首部长度 header length:IP数据报一般不包含可变数量的选项,一般为20bytes
-
寿命 Time-to-live (TTL): 每经过一个路由器减一。为0则被丢弃。避免循环。
-
协议: 指示数据报的数据应该交给传输层的那个协议
-
首部校验和:首部(只计算首部!!!)中每2bytes作为一个单位,计算1的补码和。(同TCP)
-
源和目的IP地址
数据报分片(Fragmentation)
-
最大传送单元 (maxmum transmission unit MTU):链路层的最大传输单元限制了IP数据报的长度。
-
传输过程中将IP数据报中的数据分片到多个较小的数据报中,以满足MTU的限制。
-
被分片的数据报在接收端进行重组,而不是在网络路由器中。接收主机通过**标识号(Identifier)、标志(flags)、片偏移(fragmentation offset)**字段进行重组
- 分片形成的每个数据报的标识号相同
- 每一组分片的最后一个分片的标志(flag)为0,其余的flag都为1
-
IP地址和**接口(interface)**相关联而不是主机和路由器
-
确定子网:分离主机和路由器的每个接口(“不认为一个路由器的几个接口是连通的”)->每个连通分量->一个子网
- 图例中6个子网:
-
Internet的地址分配策略为无类别域间路由选择(Classless Interdomain Routing CIDR)。其将子网的概念一般化。
- 将32bit的IP地址分为两部分,前一部分为网络前缀,其余用于区分该子网内的设备
- a.b.c.d/x
- x->子网掩码的长度->前几位为前缀
- IP地址块的获取:ISP通过子网掩码将自己拥有的较大的地址块分割为更小的地址块分配给各组织。如:200.23.16.0/20 -> 200.23.16.0/23, 200.23.18.0/23, 200.23.20.0/23,…
- ISP的IP由ICANN分配
DHCP – 动态主机配置协议 Dynamic Host Configuration
DHCP可为组织内的主机与路由器自动分配地址。主机每次与网络连接时可获取相同的IP,也可以被分配一个临时的IP。主机还可获取子网掩码、第一跳路由器地址(默认网关)、本地DNS服务器地址等信息。
- DHCP是客户-服务器协议(client-server)
- 一个子网中可以有多个DHCP服务器
- 若子网中没有DHCP服务器,需要一个知道其地址的中继代理(通常是路由器)
- 一个新加入网络的主机通过DHCP获取地址:
- DHCP服务器发现:新的主机向网络内广播DHCP发现报文(DHCP discover message)(目的地址:255.255.255.255:67, 源地址:0.0.0.0)。
- DHCP服务器提供(offer(s)):DHCP服务器收到DHCP发现报文后,广播(新的主机还未被分配地址)DHCP提供报文(DHCP offer message),其包含事务ID,分配的地址,子网掩码,地址租用期(address lease time)。
- DHCP请求:客户端可能收到多个服务器提供,选择一个并返回DHCP请求报文(DHCP request message)
- DHCP ACK:服务器返回**DHCP ACK message*,进行确认
- 对客户端发送消息都是广播
NAT - Network Address Translation 网络地址转换
- 一些地址空间用于专用网络(private network)/具有专用地址的地域(realm with private address):
- A类中: 10.xxx.xxx.xxx
- B类中: 172.16.xxx.xxx
- C类中: 192.168.xxx.xxx
- NAT-enabled router可以通过NAT,使其内网(家庭网络…)的设备共享该路由器在外网的一个IP(通过DHCP从ISP获取)—分享其端口号。
- NAT转换表 外网IP:端口号 <—> 内网IP:端口号
IPv6
数据报结构
-
IPv6数据报首部的长度固定为40byte
-
地址为128bit(16byte)
-
一些字段
- 流量类型 Traffic class: 用于确定数据报的优先权
- 流标签 Flow Label: 确定一条数据报的流
- 下一个部首 Next header: 数据报承载的数据需要交由那个协议
- 跳限制 Hop limit: 限制转发次数(同IPv4的TTL)
-
IPv6不允许分片和重组:若路由器收到的数据报大小超出限制,直接丢弃该数据报,向发送者返回ICMP错误信息指示改包太大。
-
不在计算校验和
-
没有可选项
路由选择算法
链路状态路由选择算法 Link-State(LS) Routing Algorithm
- 是全局式路由选择算法
- 每个节点向网络中的其他节点广播其链路状态(包括其标识符,与它相连的连接的代价)
- 每个节点都有整个网络的一致的完整的视图(图结构)
- 通过图的最短路径算法得到转发表
距离向量路由选择算法 Distance-Vector(DV) Routing Algorithm
- 特点: 分布式的, 迭代的,异步的
- 每个节点维护一个自己的距离向量,即其到每个节点的代价(“路径长度”)的估计值
- 每个节点保存着相邻的节点的距离向量
- 每个节点可以获取其到其邻接的节点的链路的代价(“边的权值”)
- 当一个节点x 收到其相邻的节点发来的距离向量 或 其相连的一个连接的代价改变时:对其自身的距离向量进行更新,并向其相邻节点发送更新后的距离向量
for each node y in network:
for each node v adjust to x:
dx[y] = min(dx[y], cost(x, v) + dv[y])
//dx[y] 从x到y的代价(距离)
//cost(x,v) 连接(边)(x,v)的代价
- 每个节点不断更新,最终总能将每个距离的估计值收敛到真实的距离
- 连接的代价改变时可能会引起count-to-infinity问题(过多的循环)
自治系统 Autonomous systems (ASs)
- 提出背景
- 网络规模过大,路由器数量巨大—>路由选择算法代价太高(转发表太大,广播链路状态代价太大…)
- ISP之间相互独立,采用的协议不同
- 解决:把路由器组织为自治系统 (autonomous system)
- 每个自治系统有一个全球唯一的编号 autonomous system number(ASN)
- 每个自治系统运行着自己的路由选择算法-自治系统内部的路由选择协议(Intra-autonomous system routing protocol)
- OSPF(Open Shortest Path First)
- 链路状态路由选择算法
- 使用Dijkstra最短路算法
- 周期性地广播连接状态
- OSPF(Open Shortest Path First)
-
自治系统间的路由选择协议(Inter-autonomous system routing protocol)
- ISP之间的路由
- Internet中所有ASs都运行着相同的自治系统间的路由协议 - 边界网关协议 BGP(Border Gateway Protocol)
因特网报文控制协议 ICMP(Internet Control Message Protocol)
- 被主机和路由器用于交流网络层的消息,以进行错误报告等
- ICMP是传输层的协议
- ICMP包含
- 类型字段
- 编码字段
- 引起ICMP消息的IP数据报的首部和携带数据的前8bytes