730 likes | 919 Views
期中复习. My General Philosophy on Tests. 我不是一个悲观主义者 也不是一个受虐狂 对哪些只在宿舍里读幻灯片的 : 如果你不上课 , 那么漏掉什么是你的事 …. 我相信通过考试你能理解一些基本的 , 不会把你陷到很小的细节或让你计算 pi 到 15 位小数. 一般性指导. 基本的学好 , 而不是关注细节 学习讲义和问题集 记住 : 你可以带一张纸 …..10pt font 阅读书本仅作一般上下文理解和学习特定细节 仅仅因为老师在复习中没有提到,并不意味着你不必知道 ! 睡眠充足. 你不必知道的事情. 如何将包分块的细节
E N D
My General Philosophy on Tests • 我不是一个悲观主义者 • 也不是一个受虐狂 • 对哪些只在宿舍里读幻灯片的: • 如果你不上课,那么漏掉什么是你的事…. • 我相信通过考试你能理解一些基本的,不会把你陷到很小的细节或让你计算pi到15位小数
一般性指导 • 基本的学好,而不是关注细节 • 学习讲义和问题集 • 记住: 你可以带一张纸…..10pt font • 阅读书本仅作一般上下文理解和学习特定细节 • 仅仅因为老师在复习中没有提到,并不意味着你不必知道! • 睡眠充足
你不必知道的事情 • 如何将包分块的细节 • 关于任何协议头的细节 • 知道语义,而非语法 • 任何DNS, HTTP (thank Ganesh)的细节 • 只用知道当你访问网页时,你会做一个DNS请求,然后一个HTTP请求 • DNS请求, DNS响应, SYN, SYNACK, ACK, HTTP请求, HTTP 响应, FIN, FINACK, ACK
课程的前一半:基础 • 一般背景(3讲) • 基本设计原则 • 网络的理想化视角 (4讲) • 路由(Routing) • 可靠性(Reliability) • 使此视角变成真 (5讲) • IP, TCP, DNS, Web • 强调概念,但处理不愉快的实在
Internet概貌 • Internet是一个大型复杂系统,并且要适应预先无法预测的各种挑战 • 规模,动态范围,多样性,ad hoc,失效,异步,恶意和贪婪 • 工程的伟大壮举 • 和通常的智慧相反 • 建立了一个新的网络策略 • 后来看来,设计的某些方面太棒了(terrible) • 将重新审视当我们做全新的条块设计时 • 但巨大的天才远超疏忽
Internet五个基本设计决策 • 包交换(Packet-switching) • 最佳效果服务模型Best-effort service model • 单个互联网络层(internetworking) • 分层(Layering) • 端到端原则 (和命运共享)
包交换 vs. 电路交换 • 可靠性优点: 因为路由器不知道单个对话,当路由器或链路失效时,它很容易转到一个另外的路径 • 包交换对电路交换的效率优势: 利用统计复用 • 可部署性优势: easier for different parties to link their networks together because they’re not promising to reserve resources for one another • 劣势: 包交换必须处理拥塞 • 更复杂的路由器(更多缓存,复杂的丢弃) • 提供好的网络服务困难 (如,延时和确保带宽)
Internet需要支持何种服务? • 严格的延时界限? • 一些应用需要他们 • 保证送达? • 一些应用对丢包敏感 • 没有应用会在乎好的服务 • 为何不要求Internet支持这些保障呢?
重要生活经验 • 人们(应用)不总是需要他们认为他们需要的 • 人们(应用)不总是需要我们认为他们需要的 • 灵活性通常比性能更重要 • 但典型的情况是事后才明白! • 例: cell phones vs landlines • 架构提供灵活性,工程师提供性能
应用经验于Internet • 要求保障性能将限制可以连接到Internet的网络的类型 • 很多应用不需要这些保障 • 而哪些需要的? • 事实上, 他们也是(通常)不需要的 • 很强的能力来掩盖失效,延时 • 而ISP能在不改变架构的基础上,努力提供好的服务
Kahn对于互联的规则 • 每个网络是独立的并且必须不能要求被改变 (why?) • 最佳效果(Best-effort)效果通信 (why?) • 盒子(路由器)连接网络 • 在操作层没有全局控制 (why?)
网络中的任务 (自底向上) • 线缆中的电子 • 线缆中的位 • 线缆中的包 • 通过本地网络发送包 • 本地地址 • 在国内发送包 • 全局地址 • 确保包到达 • 对数据做些事情
产生层 • 线缆中的电子 (包含在下一层中) • 线缆中的位(物理层Physical) • 线缆中的包(包含在下一层中) • 在本地网发送包(链路层) • 本地地址 • 在全国范围内发送包(Internetwork) • 全局地址 • 确保包到达 (传输层) • 用数据做些事情 (应用层)
决策及其原理 • 如何将系统分割成模块 • 由层来支配 • 模块在何处实现 • 端到端原理来支配 • 状态在何处存储 • 命运共享来支配
Application Application 都是谁具体做这些? • 五层 • 底下三层在所有地方都实现 • 上面二层仅在主机端实现 • 路由器最上层做什么? Transport Transport Network Network Network Datalink Datalink Datalink Physical Physical Physical Host A Router Host B What about switches?
层封包 用户 A 用户B Appl: Get index.html Trans: Connection ID Net: Source/Dest Link: Src/Dest 通常情况: 20 字节 TCP 头 + 20 字节 IP 头 + 14 字节以太网头 = 54 字节开销 18
系统设计的一般原则 • 系统无法扩展? • 增加层次 • DNS, IP寻址 • 系统不灵活? • 增加间接层 • DNS名字(而不是使用IP地址作为名字) • 系统性能不好? • 加缓存(caches) • Web和DNS缓存
Internet流量矛盾 • 大部分流很短 • 几个包 • 大部分字节在长流中 • MB或更多 • 而此趋势还在加速…
一个公共模式….. • 各种度量分布(文件长度, 访问模式等)通常有两个特性: • 总度量的大部分在最多的10% • 总量的相当部分(~10%)位于低值 • 并非指数分布 • 大部分都在最高10% • 但低值对总体贡献非常少 • 经验: 必须对分布的两端都关注
“有效” 路由状态 • 全局路由状态 “有效” 是指该表产生的转发决策总能将包发送到其目标 • 有效(Valid)是我的术语, 而非标准 • 路由协议的目标: 计算有效状态 • 但你怎样才能指出路由状态是有效的?
充分必要条件 • 全局路由状态有效当且仅当: • 没有死路(dead ends) (除目标之外) • 没有环
如何避免环? • 将拓朴局限于生成树 • 如果拓朴没有环,包不可能循环! • 对整个图作计算 • 能确保没有环 • 链路状态 • 分布式计算中最小化度量 • 环永远不会是最小化问题的解 • 距离向量 • 将不复习LS/DV, 但将复习学习型交换机
避免环的最容易方式 • 使用不可能有环的拓朴! • 可取任何拓朴 • 构建生成树 (后面讲算法) • 忽略所有其他链路 (同前) • 生成树中到目标仅有一条路径 • 使用“学习交换机”来发现这些路径 • 不需要计算路由,只是观察它们
浇灌生成树 • 如果希望把包发给所有结点, 交换机可使用下列规则: • 忽略不在生成树中的所有端口! • 源交换机发送 “泛滥flood” 包到所有端口 • 当 “泛滥flood”包到达一个入口时,在所有其他端口转发 • 此算法可用的原因是由于没有环,从而防止泛滥循环到自己 • 最终所有结点将被正好覆盖一次
这使学习可能! • 从源到目的仅有一条路 • 每个交换机能通过记住泛滥包的来源,学到如何到达另一个结点! • 如果从结点A发出泛滥包通过端口4进入交换机, 那么为了到达结点A, 交换机在端口4发出包 32
通过泛滥包学习 Node A can be reached through this port Node A can be reached through this port Node A 一旦结点发送一个泛滥消息, 所有其他交换机都知道如何到达它…. 33
自学交换机 当包到达 查看源 ID, 与进入端口关联 将映射保存到交换表中 使用存活时间字段来最终忘记映射 包告诉交换机如何到达A. B A C D 34
自学: 处理失效 当带有不认识目标的包到达时 在所有端口(除源外)转发包 响应将(针对该目标)教导交换机 B 当有疑问时, 喊一声! A C D 35
一般法则 当交换机接收到一个包: 使用目标ID来索引交换表 if entry found for destination { if 目标在包到达的端口then丢弃包 else在指定端口转发包 } else泛滥(flood) 为什么? 在所有(除了帧到达的)端口转发包 36
可靠性正确条件 • 如果之前的发送丢失或者损坏,总是重发包 • 包可能在其他时间重发 • 不必要指定此部分… • 所有余下内容仅仅是实现此不变量
实际架构的核 Addressing, Forwarding, TCP, DNS, Web
有些什么任务需要做? • 正确读包 • 包发送到目标 • 对于返回源的包,得到响应 • 携带数据 • 告诉主机对到达的包做些什么 • 指定任何特殊的网络处理包 • 处理沿路径发生的问题
处理问题 • 包陷入环路? • TTL • 头损坏: • 用校验和检测 • 对负载校验和怎么样? • 包太大? • 处理分块 • 将包分开 • 跟踪如何放一起
IP包结构 4-bit Header Length 8-bit Type of Service (TOS) 4-bit Version 16-bit Total Length (Bytes) 3-bit Flags 16-bit Identification 13-bit Fragment Offset 8-bit Time to Live (TTL) 8-bit Protocol 16-bit Header Checksum 32-bit Source IP Address 32-bit Destination IP Address Options (if any) Payload
IPv4 和 IPv6 头比较 IPv6 IPv4 从IPv4到IPv6保留的字段名 IPv6中未保留的字段 名字和位置在 IPv6中改变了的 IPv6的新字段
改变概览(Summary of Changes) • 舍弃了分块(为什么?) • 舍弃了包头长度(为什么?) • 舍弃了校验和(为什么?) • 新的选项机制 (下一个头) (为什么?) • 扩展了地址 (为什么?) • 增加流标号(为什么?)
改变的原理(原则) • 未处理问题: 留给端 • 舍弃分块 • 舍弃校验和 • 为什么保留 TTL? • 简化处理: • 新选项机制 (使用下一个头的方法) • 舍弃头长度 • IPv4为何不能这样做? • 对包提供通用的流标记 • 不局限于语义 • 提供极大的机动性
设计原理比较 IPv6 IPv4 到达目标并返回 (扩展了) 处理问题 (极大的减少了) 读正确 (减少了) 特殊处理 (类似)
最初的Internet地址 • 前8位: 网络地址 (/8) • 后24位: 主机地址 认为256个网络已经够多的了! 46
接下来的设计: 分类地址 A类: 首字节在 [0..127]间 假定 /8 (最高位 = 0) 非常大的块 (如MIT拥有18.0.0.0/8) B类: 首字节在 [128..191]间 假定 /16 (最高位 = 10) 较大的块 (如 UCB 拥有128.32.0.0/16) C类: [192..223] 假定 /24 (最高位 = 110) 小块 (如, ICIR拥有192.150.187.0/24) (作者房间过去用/25) 0******* 10****** 110***** ******** ******** ******** ******** ******** ******** ******** ******** ******** 47
类地址 (续) D类: [224..239] (最高位 1110) 多播组(Multicast groups) E类: [240..255] (最高位11110) 保留未来使用 类地址将产生什么问题? 只有三种尺寸 路由器最终会被太多C类地址所终结 (/24s) 浪费地址空间 1110**** 11110*** ******** ******** ******** ******** ******** ******** 48
今天的编址: CIDR • CIDR = 无类域间路由Classless Interdomain Routing • 网络和主机地址间的划分是可变的 • 必须对地址和掩码都指定 • 澄清地址间的边界在哪里 • 分类地址使用前几位进行通信 • CIDR 需要显式掩码 49
CIDR 编址 00001100 00000100 00000000 00000000 11111111 11111110 00000000 00000000 使用两个32位数来表示网络. 网络号 = IP 地址 + 掩码 IP 地址 : 12.4.0.0 IP 掩码: 255.254.0.0 地址 掩码 Network Prefix for hosts 记着 12.4.0.0/15 或 12.4/15 50