网络层,将运输层的的数据封装成一个数据报,然后发送出去。
网络层的两种重要功能:转发,和路由选择。
转发:指的是将一个分组从一个路由器的输入链路,移动到该路由的输出链路。
路由选择:分组所采用的路由或路径(使用路由选择算法计算),每台路由器都有一张转发表,路由器通过检测到达的分组的
首部字段,去路由表查询,来决定输出链路接口。
网络层体系结构不止是因特网,还有如ATM异步传输模型等。
网络服务模型定义了很多网络层的一些端到端的特性。
如:1,确保交付
2,具有时延上界的确保交付
3,有序分组交付
4,确保最小带宽交付
5,确保最大时延抖动交付(即发送方发送的两个分组间隔,接收方接收到到他们的时间间隔不超过某个值)
6,安全性服务
等其他各种网络层的访问特性。
不幸的是对于因特网来说,它提供的尽力交付服务,也就是上面的所有特性和他不沾边,
对于ATM的服务器模型CBR(constant bit rat)恒定速率传送,保证速率恒定,无丢包保证,有序,不出现拥塞,等
虚电路和数据报网络
虚电路是面向连接的服务(如ATM),也就是当发生数据传输前,提前建立一个连接,
在源到目的主机之间,网络层建立虚电路,并且为每段链路标识出一个vc号,在不同路由转发表,可能同一个链路都有不同的vc号,
无论何时跨越一台路由器的时候就将创建一条新的虚电路,转发表就增加一个表项,反之删除
数据报网络中,每当一个端系统要发送分组的时候就在该端系统上加上目的地地址,然后将改分组推向网络,
路由不维护任何链路信息,路由器根据分组的目的地地址,查询转发表,决定适合的输出链路,
以ip4协议为例,目的地址占4个字节 32位,显然转发表不可能维护几十亿个目的ip的。
一般路由使用前缀匹配原则,并且使用最长前缀匹配原则,
类似于路由A 如果首部目的分组前缀为 0000 1101 则转发到出链路2
如果首部目的分组前缀为 0000 1101 0010 则转发到出链路3
假如现在出现一个分组为 0000 1101 00 则该分组转发到出链路3。
路由器结构图
上面图片的字错了叫随机早期检测。
这个时候就涉及到各种时延的由来了
如 1:处理时延,检查分组首部字段,同时决定分组导向和出的时间,
2:排队时延,在输入队列中排队的时间
3:传输时延,指的推出分组到网络的时间,分组长度/链路输出速率
4:传播时延,物理链路上传播的时间
网际协议(IP)
因特网的网络层主要有三个重要的组件
1,IP协议
2,路由选择协议(路径选择,RIP/BGP,转发表)
3,ICMP协议
报文结构如图
ipv4编址
首先定义主机和物理链路的边界为接口(一个路由器会有几个接口)
每个ip的固定的长度为32位,ip是由 网络号+主机号组成,其中网络号标记法为如121.20.5.0/24
表示该子网前24位相同,该子网有相同的网络号其子网掩码为255.255.255.0,和原本的ip做与运算得到网络号。
ipv4子网拓扑图
如果想要获取一个
ICANN组织来分配ip地址快给各isp,如果我们想申请应该ip块,可以向我们的isp申请。
然后我们的路由器就必须转发该ip块对应的子网的分组到具体的某台计算机。
一台主机获取一个IP。
通过Dynamic Host Configuration Protocol DHCP协议,DHCP允许主机获取一个ip地址,子网掩码,第一跳路由器(网关)
可以获取一个临时的IP地址,也可以分配一个固定地址。
DHCP实际是一个客户服务器协议,一些在子网中需要上网的主机就他 的客户,正常情况下一个子网有一个DHCP服务器,
如果没有则需要DHCP中继代理(通常是路由器)转发请求,因为DHCP是已经有IP地址的他是可以发送数据到DHCP服务器的和接收服务器的数据,同时响应给响应的主机请求。
通过DHCP服务器获取 需要经历一下过程。
首先 主机不知道谁是DHCP服务器的,所以主机在子网上通过UDP协议在67端口上广播数据,
发送目的主机为255.255.255.255和原地址为0.0.0.0的报文。
DHCP服务器收到该请求后仍然使用IP广播地址为255.255.255.255的,(如果有多个DHCP服务器),
主机会选择一个接受报文(已知DHCP的服务器ip地址),主机同时再发送一个DHCP请求报文,回显响应的配置参数
DHCP服务器进行响应,这个时候交互完成。
NAT网络地址转换
实际在现实中,并不是每个可以上网的设备都有一个公网IP的。都是诸如什么10.开头和192.168.开头的内网iP的
在这个子网以外的 网络中是不认识这个ip地址的,这个就涉及 Network Adress Trsanlation。
在安装了nat的路由器中会维护一个 映射转换表,所有进入从这个路由器出的分组的源地址都是 统一ip,接收也一样。
但是不一样的是端口,在nat映射转换表中对于内网主机的ip+port映射一个 nat中的ip+port。这样就可以传送分组到目标主机了
因特网控制报文协议 ICMP(Internet control message protocol)
icmp协议是在ip协议之上的,因为icmp的报文是承载在ip分组中的。icmp注意是用来差错报告的。
icmp报文仅有一个类型字段和编码字段。
以下图片来源自网络,没勇气敲。。。
比较有意思的一个icmp的报文类型和编码为,
当类型为4 编码为0的 表示抑制发送源发送报文,实际很少用,一般拥塞控制 由高层实现。
ipv6与ipv4
ipv6 使用128位来定义一个唯一ip,也就是说,吸取教训了,这个就很大了,
ipv4到ipv6需要逐步过渡,基本现在都是支持双协议。
ipv6 - ipv6端到端主机,当中间有ipv4协议的路由器时候,同时又要用ipv6的某些字段是怎么办呢
建隧道,即端到端都要安装隧道协议,把ipv6的数据(首部+数据) 放到ipv4的数据部分,
就和其他ipv4数据一样正常传输,到了对端的时候吧它还原成正在的ipv6数据,ip协议是非安全的,在互联网裸奔的。
路由选择算法
主机通常和一台路由器相连接,通常称为他的默认或者第一跳路由器,分组通常被传递到它的第一跳路由器,
然后到目的路由器的传送。
按照某路由器所知道的链路费用划分
全局式路由选择算法,该算法要求知道所有节点之间的连通性和链路费用为输入,
具有全局状态的算法一般也成为链路状态算法(LS);
比较典型的有Dijksua算法,大致是以当前节点为中心向网络中其他的节点广播链路状态(包括费用和特征)分组来完成计算的
该算法通过不断的迭代到其他节点,维护自己路由表中到到目的节点最短路径(路由表中 标示出出链路接口(即下一跳))。
分算式路由选择算法,每个节点仅需知道如其直接相连节点的链路费用,其中一个算法是距离向量算法(DV)
当前节点需知道 其邻居的距离向量(节点到其他节点的估计费用 ),和当前节点到邻居节点的费用,
每个节点不是地向它的每个邻居发送它的距离向量的副本 ,当自己收到邻居的副本后,重新计算,当发现更低费用
的时候更新路由表。如RIP(route infomation protpcol)路由信息协议就是DV,RIP用于内部系统的协议。
按照负载划分
还可以划分为 负载敏感算法和负载迟钝算法(RIP,BGP)
按照是否能及时更新路由划分
可以划分为 静态路由算法(手工配置,更新较慢),动态路由算法(定期更新)
层次路由选择
无论是dv算法还是ls算法,如果把网络看做是一个互联的路由器的集合,所有路由器更新计算最低路径的开销就
高的不可实现了,显示中采用的是 划分网络,采用 Autonomous System(自治系统)AS,例如一个isp或者
一个大学网络,他们属于一个AS,在AS内部采用同一个路由选择算法来实现,同时在AS内部有一台或者多台
路由器负责本AS内的分组向外部转发,这些路由器一般称为网关。
如果在AS内部只有一个网关路由器的话,AS内的分组最终都会转发到该网关,
如果AS内部有多个网关路由器,那么怎么决定该分组转发到那个网关呢,
BGP会向相连的AS间通过网络号来标识可达信息,在BGP协议中每个自治系统都有一个全局唯一的
自治系统号,除了桩AS(指仅仅承载源地址或者目的地址为该AS的流量)。当一个分组在某个AS内
有多个网关可以到达目的地的时候,BGP可以根据自己的本地配置,或者最短的AS-PATH等来选择一条
转发该分组的网关。