这里也就是说每一次都需要解封装(对于到目标主机的解封装来说这个规模较小)然后封装发送
将分组从路由器的输入接口转发到合适的输出接口,你可以理解为通过单个路口的过程
使用路由算法来决定分组从发送主机到目标接收主机的路径路由分别实现为选择算法和路由选择协议。你可以理解为从源到目的的路由路径规划过程
SDN(software-defined networking ):来了分组后,分组所在的帧和分组本身的所有字段提取出来与交换机的维护的流表(由专门的网络操作系统算出来)中的字段相匹配,对匹配得到的结果进行操作,可以进行转发或者阻止或者泛洪或者字段修改
传统方式:基于目标地址+转发表
SDN(software-defined networking )方式:基于多个字段+流表
传统的路由算法: 在路由器中被实现
SDN(software-defined networking ): 在远程的服务器中实现
对于控制平面来说需要在每个路由器上都有一个独立的算法元件,进行交互

由于传统方式下路由器的各种协议和算法都是固定的,所做的动作也只能是转发,而且路由的物理位置又是分布的,当我们需要新的功能或者协议算法等时进行升级换代是非常困难的工作量巨大
逻辑集中的控制平面

优点
可以看到完美解决了传统方式所造成的的困难,虽然控制器的物理位置还是分布式的,但是对于管理时集中的,当需要改协议或者算法,对控制中心的流表进行相对应的修改然后下放到每个控制器中,这样就得到了更新
对于单个数据报的服务:
可靠传送,延迟保证,如:少于40ms的延迟
对于数据报流的服务:
保序数据报传送,保证流的最小带宽,分组之间的延迟差
ATM,frame relay,X.25
涉及到路由器
- 网络层:在2个主机之间,涉及到路径上的一些路由器------------》有连接
- 传输层:在2个进程之间,很可能只体现在端系统上(TCP连接)-------------》面向连接


在介绍输入输出端口时看似物理上是有各自的元件,实际上这个两个端口在物理上能集成一个端口来进行操作,一试两角
- 运行速度经常是输入/输出链路速率的若干倍
- N个输入端口:交换机构的交换速度是输入线路速度的N倍比较理想,才不会成为瓶颈


当交换机构的速率小于输入端口的汇聚速率时→在输入端口可能要排队,这时就需要在输入端口处有一个队列(同理是队列就会操作数据的丢失),来控制不同输入端口发送到同一个输出端口时的竞争问题

排队延迟以及由于输入缓存溢出造成丢失!
Head-of-the-Line (HOL) blocking:排在队头的数据报阻止了队列中其他数据报向前移动
可以看到也是存在端口缓存来应对速度不一致的问题,同时先来队列的也不一定先转发,存在优先级调度的问题
- 假设交换速率Rswitch是Rine的N倍(N:输入端口的数量)
- 当多个输入端口同时向输出端口发送时,缓冲该分组(当通过交换网络到达的速率超过输出速率则缓存)
- 排队带来延迟,由于输出端口缓存溢出则丢弃数据报!
如果此时新的分组带来的时候队列是满的,队列会有三个策略来抛弃:
1.tail drop: 丢弃刚到达的分组
2.priority: 根据优先权丢失/移除分组
3.random: 随机地丢弃/移除
不同种类的分组有不同的优先级
Round Robin (RR:循环调度):循环扫描不同类型的队列, 发送完一类的一个分组,再发送下一个类的一个分组,循环所有类
Weighted Fair Queuing (WFQ:加权公平调度):在一段时间内,每个队列得到的服务时间是:Wi/(XIGMA(Wi)) *t,和权重成正比
ICMP(信令)协议


- 不同的链路类型
- 不同的MTU
- 相同的ID(每一个小的数据报通过复制前面的IP头来给自己加上数据头)
- 不同的偏移量
- 最后一个分片标记为0
- “重组”只在最终的目标主机进行
- 头部的信息被用于标识,排序相关分片

就是指发送和结构不需要分片的时最大MTU的大小,进行路径MTU发现,就可以避免在中途的路由器上进行分片处理,也可以在TCP中发送更大的包。
32位标示,每8位为一组,每组以.隔开对主机或者路由器的接口编址
- 路由器通常拥有多个接口
- 主机也有可能有多个接口
- IP地址和每一个接口关联
具体如何连接与相关联会在链路层介绍
- 网络号其中的几位:子网部分(高位bits)
- 主机部分(地位bits)
- 一个子网内的节点(主机或者路由器)它们的IP地址的高位部分相同,这些节点构成的网络的一部分叫做子网
- 无需路由器介入,子网内各主机可以在物理上相互直接到达,在IP的层面就需要一下(有时需要交换机的介入)
- 节约IP资源:随着互联的发展IPV4地址资源可能会耗尽,如果不划分子网直接将一个C类地址分给一个企业,C类地址可容纳256台主机,但是可能该企业只有20台计算机,这就造成极大浪费
- 减少网络流量,优化网络性能:隔离数据在整个网络内广播,提高信息传输速率。
孤岛孤岛(网络)都是一个都可以被称之为subnet.注意:虽然图中有三个子网,但是从更高维度去看又同属于一个网络(IP前缀一致),这样路由器路由出去信息还是接收信息都会进行地址聚集也就是通过网络来散播信息(可以理解成大致方位我知道,具体到内部再去详细拆分路由交换,对于物理位置十分远的两个网络,正因为有这种模糊大致的位置信息可以减轻路由表的维护信息提高效率)
图中有6个子网
每个网络号和主机号都要减去2的结果,因为全0和全1的号码不用
A、B、C称为单播地址;D、E称为广播地址(即发给属于自己的组或区域的所有成员)
126 networks(网络号) , 16 million hosts(主机号)16382 networks(网络号) ,64 K hosts(主机号)2 million networks(网络号) ,254 host(主机号)
前面说到全0或全1的地址需要从常用的IP分发下面去除,因为有以下约定
访问127.0.0.1 就是代表本主机啊


CIDR: Classless InterDomain Routing(无类域间路由)
a.b.c.d/x,其中×是地址中子网号的长度
广播地址用于在同一个链路中相互连接的主机之间发送数据包。将IP地址中的主机地址部分全部设置为1,就成为了广播地址。广播分为本地广播和直接广播两种。
本地广播:
在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255。因为这个广播地址的IP包会被路由器屏蔽,所以不会到达192.168.0.0/24以外的其他链路上。主机号各位全为1的IP地址,它用于将一个分组发送给特定网络上的所有主机,即对全网广播。
直接广播:
- 网络号和主机号都为1的IP地址(即255.255.255.255),它也是对当前网络进行广播,当一台主机在运行引导程序但又不知道其IP地址需要向服务器获取IP,这时多数用该地址作为目的地址发送分组。
- 在不同网络之间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~192.168.1.254的主机都能收到这个包(由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发)
- 多播用于将包发送给特定组内的所有主机。
- 由于⼴播⽆法穿透路由,若想给其他⽹段发送同样的包,就可以使⽤可以穿透路由的多播。
- 多播使用D类地址。因此,如果从首位开始到第4位是“1110”,就可以认为是多播地址。而剩下的28位可以成为多播的组编号。
- 从224.0.0.0到239.255.255.255都是多播地址的可用范围。其中从224.0.0.0到224.0.0.255的范围不需要路由控制,在同一个链路内也能实现多播。

由于A类和B类为主机号分配了太多的空间,在实际应用中一条链路上也不可能有万级别的计算机连接,这样就造成了资源浪费,那么所有主机的IP都从原来的网络号+主机号改为如下的结构,这个结构后,我们就可以先找到对方主机所在的网络,在进行精准定位
此时主机拿到这个IP就需要知道多少位用于子网号,多少用于主机号,由此而生子网掩码,
子网掩码为32位值,其中1为网络号和子网号、0为主机号;将子网掩码和IP进行与操作就可以得到网络号
- 1:bit位置表示子网部分
- 0:bit位置表示主机部分
- A:255.0.0.0 : 11111111 00000000 00000000 00000000
- B:255.255.0.0: 11111111 11111111 00000000 00000000
- C:255.255.255.0: 11111111 11111111 11111111 00000000
- /#
- 例:/22:表示前面22个bit为子网部分
- 如(IP Des addr)&(mask)== destination,则按照表项对应的接口转发该数据报
- 如果都没有找到,则使用默认表项转发数据报



作用:允许主机在加入网络的时候,动态地从服务器那里获得P地址
- 可以更新对主机在用IP地址的租用期-租期快到了
- 重新启动时,允许重新使用以前用过的IP地址
- 支持移动用户加入到该网络(短期在网)
“DHCPdiscover”报文 [可选],由于不知道目标地址所以使用UDP进行广播,其使用的广播目的地址是255.255.255.255(端口 67)并且使用 0.0.0.0(端口 68) 作为源 IP 地址。“DHCP offer”提供报文响应 [可选]“DHCP request”报文“DHCP ack”报文
假设有几个区域需要上网,他们首先去ISP申请IP的划分,每个区域被分配了一个地址块(前23位区分是哪个地址块,后9位区别具体是哪个主机或那个子网中的子网),然后每个地址块都会向负责这些区域的一个更大的子网的路由器提供自己的子网掩码和下一跳的方向,比如前23位是某某某就跳向IPN(N=0~999);然后这个更大的区域又会将这些区域的信息聚集成一条信息(因为这些地址块的前20位是一模一样的,这样就体现了聚集)和IPN发送给ISP。这时ISP就知道消息发送给那个聚集子网,然后由子网在进行更精细的拆分最终到达用户主机。

提供外网地址到内网地址的转换,这个工作是由看门的路由器来实现的
- 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备---->省钱
- 可以在局域网改变设备的地址情况下而无须通知外界
- 可以改变ISP(地址变化)而不需要改变内部的设备地址
- 局域网内部的设备没有明确的地址,对外是不可见的------->安全

外出数据包:替换源地址和端口号为NATIP地址和新的端口号,目标IP和端口不变。远端的C/S将会用NAP IP地址,新端口号作为目标地址进入数据包:替换目标IP地址和端口号,采用存储在NAT表中的mapping表项,用(源IP,端口)
问题:
客户端需要连接地址为10.0.0.1的服务器, 服务器地址10.0.0.1 LAN本地地址 (客户端不能够使用其作为目标地址) 。整网只有一个外部可见地址: 138.76.29.7
静态配置NAT:转发进来的对服务器特定端口连接请求
e.g.约定, (123.76.29.7, port 2500) 总是转发到10.0.0.1 port 25000
方案2: Universal Plug and Play (UPnP) Internet Gateway Device (IGD) 协议.
允许NATted主机可以:获知网络的公共 IP地址(138.76.29.7)、列举存在的端口映射、增/删端口映射 (在租用时间内)
中继 (used in Skype)
NAT后面的服务器建立和中继的连接,外部的客户端链接到中继,中继在2个连接之间桥接。说白了就是再加一个设备来维护这个映射
32-bit地址空间将会被很快用完固定的40 字节头部

数据报传输过程中,不允许分片
附加了报文类型,e.g. “Packet Too Big”,多播组管理功能
不是所有的路由器都能够同时升级的,没有一个标记日 “flag days”(即规定期限全部设备不能使用网络以供升级)
隧道:在IPv4路由器之间传输的IPv4数据报中携带IPv6数据报
在一个孤岛内使用先进的IPV6进行通信,当与别的孤岛进行通信时,最外侧负责向外的设备具有“双栈”的能力,即又能支持IPV4又能支持IPV6,然后将IPV6的全部信息封装在IPV4的报文中发送到另一个孤岛中,孤岛接收并解析成IPV6格式进行使用



一个不同的(通常是远程)控制器和CA交互,控制器决定分组转发的逻辑(可编程),CA所在设备执行逻辑。

- 将路由器、交换机和目前大多数网络设备的功能进一步抽象成:按照流表(由控制平面设置的控制逻辑)进行PDU(帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞)
- 统一化设备功能:SDN交换机(分组交换机),执行控制逻辑
- 分离、集中
- 计算和下发控制逻辑:流表
- 分组交换机、控制器和各种控制逻辑网络应用app可由不同厂商生产,专业化,引入竞争形成良好生态
- 集中式控制器了解网络状况,编程简单,传统方式困难
- 避免路由器的误配置
“可编程的”分组交换机
- 实现流量工程等高级特性
- 在此框架下实现各种新型(未来)的网络设备

需要定义链路的代价,流量路由算法以此运算( IP路由面向目标,无法操作) (或者需要新的路由算法)!
无法完成(在原有体系下只有使用新的路由选择算法,而在全网部署新的路由算法是个大的事情)
无法操作 (基于目标的转发,采用LS, DV 路由)

定义了哪些可以被控制哪些不能

- 路由器交换机
- 接入控制防火墙
- 负载均衡
- 其他功能
每个路由器包含一个流表(被逻辑上集中的控制器计算和分发)

- 模式:将分组头部字段和流表进行匹配
- 行动:对于匹配上的分组,可以是丢弃、转发、修改、将匹配的分组发送给控制器
- 优先权Priority:几个模式匹配了,优先采用哪个,消除歧义
- 计数器Counters:bytes以及#packets



