网络层
在多路复用的时候,我们曾经利用过IP,但是在运输层却没有IP的痕迹,这是因为IP是在网络层上的内容
- 传输层:连接服务在网络边缘的端系统
- 网络层:端系统和网络核心的路由器
在网络层当中,我们会第一次根实际的路由器相关联和物理设备联系到一起,在IP层封装后,我们就知道传输的主机是哪个了
- 从发送方主机传输报文段到接收方主机
- 发送方和接收方,分别打包和拆封数据包
- 路由器根据 IP数据报的头部字段,根据目的IP对数据报转发
网络层从功能的角度来看可以分为两种
- 转发 讲分组从路由器输入端口转移到正确的输出端口 立交桥从哪个出口下
- 路由 确定 分组从发送方传输到接收方 旅游的整体路线
网络层可以提供的服务:
- 确保交付
- 时延上限
- 有序分组交付
- 确保最小带宽 能保证在一定时延内到达
- 确保最大时延抖动 各个包之间到达间隔基本相同
因特网网络层服务:
- 尽力而为
- 分组间的定时不能保证 时间不能确定
- 接收顺序与发送顺序不一定相同
- 传送的分组不能保证最终交付
简单来讲,就是什么都不能确定,那我们保证个啥,就保证个每迷路,数据不会丢8
虚电路
在因特网的服务之前,我们介绍和因特网相对的虚电路技术,类似UDP和TCP技术
一个连接,一个无连接 虚电路会给通讯预留一些资源 (专用资源)
数据报网络
- 路由器不需要维护端到端的状态
- 使用 目的主机的地址 IP进行分组转发
数据报转发表
每个服务器不维护所有信息,通过最长前缀匹配完成输出端口的查找
路由器转发表只维护转发状态信息从一个系统到另外一个系统当中可能选择不同的路径
路由器体系
输入端口:根据最长前缀匹配确定转发的输出端口 排队
- 线路端接模块 物理层接口
- 数据链路处理模块 链路层接口
- 查找和转发模块 根据数据报目标地址,根据最长前缀匹配 找到需要转发的接口 选择处理器直接把备份保存在输入端口,可以实现分布的决策
交换结构只转换到对应的端口
- 内存结构 通过内存读入,效率很低 受读取速率影响
- 总线结构,只能有一条数据快速运动,导致阻塞,受总线速率的限制
- 纵横式,多条链路都可以用 速率比较快
- 线头阻塞 好几个队列当中前面的呗阻塞,导致后面的内容被延迟
输出端口
和输入端口形式对称,如果交付速率快于运输速率,内存溢出,则会出现
丢包现象
IPV4报文格式
- IP版本号 和HTTP的类似
- 首部长度(从哪里开始变成数据)
- 服务类型(略)
- 长度 总共长度有多少(从报文头部到最后)
- 标识符
- 标志 是否是末尾 完成重组
- 段偏移(相对地址+基地址)
- 寿命 不能让报文在网络内一直存在 在经历很多个路由器就消失
IPV4编制方法:
IP地址由网络号和主机号构成
只有路由器可以区分网络号 二层交换机不可以由32位比特组成 A类地址第一位为0 B类前两位为10 依次类推
问题在于A类地址过多,后面D类地址太少
关于IP地址分配ICANN 国际组织 负责互联网地址的空间划分
NIC 具体执行分配任务 属于盈利机构 并且完成一些仲裁的任务
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iM4ImZ2YTZzQWM2YDZwYWO5kTZ3gDO3YWYyUTY2EGOk9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
这个不太好说,就直接给一个例图8
一些特有的地址
全0表示初始化地址(等待分配地址) 全1表示广播地址本地地址 127.0.0.1-127.255.255.254 用来测试用
私有地址 10. 172.16. -172.31. 192.168. 局域网访问使用的路由
刚才提到网络的划分网问题,为了实现更好的切割,提出了子网划分的概念
从主机号当中借用若干个比特作为子网号 剩下作为主机号总体上看,能使用的IP地址不变,但是可以做更多的划分
但是还是有人觉得AB类网络划分没什么意义于是提出了误分类遇见路由 只通过子网划分的方式来划分不同的网络
DHCP动态主机配置协议:
- DHCP DISCOVER 主机广播
- DHCP OFFER 服务器的消息响应
- DHCP REQUEST 主机请求IP地址
- DHCP ACK 服务器确定
- DHCP RELEASE 终止确定
工作流程:
- 服务器67号端口等待报文
- 客户端从端口68发送发现报文(想要IP地址)
- 收到DHCP的服务器都可以提供offer 收到多个offer
- 根据得到的OFFER 获得IP 并返回对应的DHCP服务器确认信息
- 如果快超时了应该发送request信息,请求更多的时长
- 如果DHCP服务器返回NACK 必须停止 重新申请IP地址
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iM4ImZ2YTZzQWM2YDZwYWO5kTZ3gDO3YWYyUTY2EGOk9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
虽然增加了子网掩码,但是还是无法避免资源枯竭的问题,所以提出了
NAT技术
- 对外只有一个IP地址
- 本地网络内该百年设别的IP地址不需要通知外部世界
- 在NAT内部 对IP地址进行转化
数据平面上,我们主要通过IP的角度来介绍网络蹭,但是实际上是怎么传递的呢?
控制平面
- 默认路由器:与主机直接相连路由器
- 源路由器:默认路由器
- 目的路由器:目的主机的默认路由器
在网络当中设定的算法分别是
- 全局路由算法 dijstra为代表 比较简单就不多介绍了 不能同时更新,否则容易产生震动 导致信息无法达到目的
-
分布式路由算法 迭代的方式在网络当中传输 不需要整个网络的拓扑信息 逐步算出费用
代表:距离向量算法 (离散的弗洛伊德算法)
- 分布式
- 迭代
- 异步
- 自我终结
dx(y) = min{c(x,v) + dv(y)} 多次重复发送直到停止
缺点:坏消息传递的慢,好消息传递的快 因为min
解决方法: 毒性逆转
比较LS(全局)和DV算法:
LS容易产生震荡 需要知道全局信息 容易收敛 共享信息 健壮性好
DV容易产生回路 存在不连接的问题 收敛慢 信息存在局部性 部分坏信息会无限传递
之前介绍的都是内部的扁平选择 事实上我们是需要层级的对整个系统进行管理
每个区域内的路由器会形成组合集成 自治系统
区域内路由协议在内部进行传递
- RIP 路由信息协议 距离向量(根据 最短跳数 确定)
- OSPF协议 开放最短路径优先 利用dijkstra计算并通告到整个自治域单中 进行传输 通过IP协议传输
层次OSPF结构
在内部再划分一个层次的结构 增加自治域的本地网络
域间选择协议BGP
- 域间选择的任务
- 可以通过转达哪几个区域到达
- 需要经有哪个边缘路由器
- BGP为每个AS提供一个手段
- 允许一个子网向因特网其他部分同样存在
- 热土豆原则 选择域内最短的路径原则
- 路径选择的组成 通告前缀时,包含BGP属性
-
前缀+属性=路由 AS-PATH :包含前缀已经通告过的得一些AS NEXT-HOP 指出到达下一个AS的及具体AS边界(只有最后一个是具体的边界内容)
next-HOP是AS-PATH起使的路由器接口的IP地址 即要到起使点的AS需要的路由器
BGP会话与通告
- 路由器对TCP连接来交换选路信息
- 当AS2 通告一个前缀给AS1 说明新增可以转载的路径,然后在域名通过iGBP协议进行传递(类似域内广播)
真实的路由选择算法:
- 路由被指派一个本地偏好值作为属性 不止是AS-PATH和next-hop
- 从余下的路径当中选择最短AS-PTH的路由