计网笔记_4
第4章 网络层:数据平面
4.1 导论
数据平面:
网络服务模型;
转发和路由;
路由器的组成和工作原理;
通用转发。
网络层服务:
在发送主机和接收主机之间传送段;
在发送端将段封装到数据报中;
在接收端将段上交给传输层实体;
网络层协议存在于每一个主机和路由器;
路由器检查每一个经过它的IP数据报的头部(解封装看IP选路径再封装)。
SDN根据很多因素,端口、IP、标志位匹配做流表,比传统只看IP的方式更灵活。
传统方式数据平面在路由上实现,网络中一个个路由构成控制平面,是分布式的,数据平面和控制平面在同一层实现,所以需要重构路由逻辑很困难。
现在的方式SDN 软件定义网络,逻辑集中的控制平面,先根据一些因素算出流表,再按路由表对数据做动作,所以之后再要修改逻辑,升级功能只需要修改流表就可以了,所以是可编程的集中式的。
网络服务模型service model:
对于单个数据报提供的服务:可靠传送;延迟保证,如:少于40ms的延迟;
对于数据报流的服务:保序数据报传送;保证流的最小带宽;分组之间的延迟差jitter。
IP网络对上层提供的服务:best effort尽力而为。
4.3 路由器router组成
传统路由结构(简化):
路由:运行路由选择算法/协议(RIP, OSFP, BGP)生成路由表;
转发:从输入到输出链路交换数据报,根据路由表进行分组转发。
输入端口的功能:
分布式交换:
根据数据报头部的信息如:目标地址,在输入端口内存中的转发表中查找合适的输出端口(匹配+行动);
基于目标的转发:仅仅依赖于IP数据报的目标IP地址(传统方法);
通用转发:基于头部字段的任意集合进行转发。
输入端口缓存:
当交换机的输出顺序小于输入顺序时,可能需要排队,所以要缓存一部分降低排序延迟,并在一定程度上预防溢出造成的数据丢失。
Head-of-the-Line HOL blockings,排在队头的数据报组织了队列中的其他数据报向前移动。
交换结构:
通过内存交换:第一代路由器:
在传统的计算机上,在CPU直接控制下完成的交换,用软件的方式,通过memory实现,需要过两次系统总线BUS,被内存的带宽限制,而且一次只能转发一个组。
通过总线交换(不是系统总线):第二代路由器:
数据报经过共享总线,从输入端口转发到输出端口,省去了走系统总线的过程,且只走一次共享总线,但共享总线也限制了交换速度,而且一次也只处理一个分组。
通过互联网络crossbar等交换:第三代路由器:
同时处理多个分组,克服总线带宽限制。有多种实现方式,比如榕树Banyan,纵横crossbar,等。高级设计可以将网络数据报分片为固定长度的信元,通过交换网络交换。
调度机制:
先来先服务FIFO first in first out:按照分组到来的顺序优先发送。
按优先级服务:优先发送优先级高的。
其他调度策略:weight fair queuing WFQ,加权优先级。
4.3 IP internet protocol
IP数据报格式:
第一层32 bits:
协议版本号Ver 4 bits,head 4 bits,type of service 8 bits,length数据包总长16 bits
第二层32 bits:
分片/重组使用:16 bits identifier,4 bits flags,12 bits fragment offset偏移量
第三层32 bits:
Time to live:8 bits,upper layer上一层协议将载荷交付 8 bits,Internet校验和 16 bits
第四层32 bits:
Source IP address 源IP地址
第五层32 bits:
Destination IP address 目标IP地址
------上面是固定长度的,20个字节的IP head
第六层32 bits:
Options,时戳,由路由器记录,指定所经过路由器的列表。
第七块儿:
数据。
IP数据报传输TCP段时头部有:
20 bytes of TCP,20 bytes of IP = 40 bytes + app layer overhead
IP分片和重组:Fragmentation & Reassembly
网络链路有 MTU maximum transmission unit 最大传输单元
MTU – 链路层帧所携带的最大数据长度:不同的链路类型;不同的MTU
大的IP数据报在网络上被分片fragmented,一个大IP数据报被分成若干个小的数据报,每个数据报在头上有一样的IP,按需来的offset偏移量,最后一个分片的flag标记为0,这些头部包含的信息被用于标识,排序相关分片,遇到flag为0的分片就知道数据报传完了。
重组只在最终的目标主机进行,减小路由器压力是一方面,不同分片走的不同路由是另一方面。
IP地址:32位(4字节)标识,对主机或者路由器的接口编址,标记的是点而不是机器。
AP接入点(无线局域网中)access point
IP子网subnets:
子网具备两个条件:
IP前几位是一样的(从路由上断开后,形成的孤岛式结构,路由器也有IP,也算);
子网内部数据的分发不需要借助路由器,一跳可达,可以借助交换机。
网络 主机
A类网(第1个字节网络号) 2^7-2=126 2^24-2=
B类网(第1,2个字节网络号) 2^14-2= 2^16-2=65534
C类网(第1,2,3个字节网络号) 两百多万 2^8-2=254
D类网 multicast多播(组播)网
E类网 预留
网络中传播信息是以一个个局域网(子网)为单位传的,按IP地址的话路由表根本没法算,代价太大,数据先发到子网,再由子网路由到目标IP。
特殊IP:
子网部分全0:本网络;
主机部分全0:本主机;
主机部分全1:广播地址,这个网络的所有主机。
127.x.x.x地址:回流地址,或测试地址,到网络层返回。
内网地址:在互联网中没有意义,只在局域网中分配,用作标识主机。
IP编址:CIDR Classless Inter Domain Routing 无类域间路由:
子网部分可以在任意位置划分,剩下为主机号。
不固定前几个字节是网络号了。
所以需要子网掩码,将作子网部分的网络号编码与1做与运算,主机部分编码与0做与运算,如此得到的结果就是子网的IP网络号,这个由两段1和0组成的编码就是子网掩码。
转发表和转发算法:
获得IP数据报的目标地址;
对于转发表中的每一个表项:如果目标IP地址和子网掩码与运算之后能得到有意义的目标地址,则按表项对应的接口转发该数据报;如果没找到,则按默认表项转发数据报(所谓默认表项就是该网络的一个出口,把数据报送出去)。
如何获得IP地址:
网络管理员手动配置;或者通过DHCP Dynamic Host Configuration Protocol动态主机分配协议从服务器自动获得一个IP地址。
DHCP:自动分配,每次重启更新,也支持使用之前用过的IP地址。
工作概况:
主机广播DHCP discover报文;
DHCP服务器用DHCP offer提供报文响应;
主机请求IP地址:发送DHCP request报文;
DHCP服务器发送地址:DHCP ack报文。
如何获得一块地址:
ICANN:internet corporation for assigned names and numbers国际机构:
分配地址;管理DNS;分配域名,解决冲突。
层次编址:
路由聚集route aggregation:子网前缀一样的那些子网,都发给同一个路由,这个路由再下一条往外发的时候,就可以把子网前缀合一块儿,即路由聚集一次,只区分子网前缀之外的部分,外面送进来的时候,只要子网前缀是这个的数据,都先发到这个路由就行。
特殊路由信息more specific routes:整体迁移。
NAT network address translation网络地址转换:
内网地址和外网地址转换,要记住源端口和源IP(内网),回来的时候可以进行分发。
NAT穿越问题:外网要跟内网通信,不知道具体目标主机地址:
方案1:静态配置NAT,内网分配固定,转发进来的对服务器特定端口连接请求;
方案2:UPnP Universal Plug and Play协议,和IGD Internet Gateway Device协议,允许NATted主机可以获知网络的公共IP地址,列举存在的端口映射,增/删端口映射;
方案3:增加中继,外网信息到中继,中继转发给目的主机。
IPv6结构:一层一样32 bits
Ver版本, priority优先级, flow label流标签。
Payload length(ttl),next header,hop limit
Source address
Destination address
Data
Internet control message protocol 网络控制报文协议 ICMP也更新了ICMPv6
IPv4到IPv6的过渡:
平滑升级:局部v6,外面是v4,接口使用双栈协议(一边v6,一边v4),升级多了局部大了之后,就是局部v4了,还是双栈协议,转个身就完事了。
4.4 通用转发和SDN
整个网络层的功能由数据层面和控制层面合作实现。
数据平面完成数据的转发。
控制平面控制数据怎么走。
传统的IP网络结构,路由实现数据层面和控制层面的功能,且控制方式是分布式的,控制逻辑固化,改变工作方式很困难。
SDN:分发流表,交给路由分发就可以了,路由也可以上报自身状态给SDN控制器,之后路由功能统一,都是分组交换机就可以了。而且不同厂商的服务器都支持SDN协议,各级都可以统一标准,创造健康生态。
OpenFlow数据平面抽象
流flow:由头部字段定义;
通用转发:简单的分组处理规则:
模式pattern:将分组头部字段和流表进行匹配;
行动action:对于匹配好的分组,可以是丢弃、转发、修改、泛洪等操作将匹配的分组发送给控制器;
优先权priority:几个模式匹配了,优先采用哪个,消除歧义;
计数器counters:bytes以及packets。
match + action统一化各种网络设备的功能,逻辑集中式,因此,路由器,防火墙,交换机,NAT都可以合到一种设备去实现这些功能。