| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 哈工大计算机网络第四章——网络层复习 -> 正文阅读 |
|
[网络协议]哈工大计算机网络第四章——网络层复习 |
目录 1. 网络层服务在从发送主机向接收主机传送数据段(segment)的过程中,发送主机的网络层取得传输层的报文段,将报文段封装到数据报(datagram)中,然后向相邻的路由器发送数据报。接收主机的网络层接收来自相邻路由器的数据报,提取传输层报文段,向传输层交付。 ? 每个主机和路由器都运行网络层协议 ? 路由器检验所有穿越它的IP数据报的头部域,问题为决策如何处理IP数据报。路由器不允许应用与传输层协议,只有网络层以下的部分。 路由与转发 转发(forwarding): 将分组从路由器的输入端口转移到合适的输出端口,是路由器本地动作,时间很短。 路由(routing): 确定分组从源到目的经过的路径,需要路由算法 (routing algorithms)。是网络范围的处理过程,时间相对较长。 转发表:路由器检查到达分组的一个或多个字段值,使用这些值在转发表中索引,进而转发分组。 路由算法(协议)确定通过网络的端到端路径,转发表确定在本路由器如何转发分组 网络层核心功能-连接建立 数据分组传输之前两端主机需要首先建立虚拟/逻辑连接,由网络设备(如路由器)参与连接的建立。 传输与网络的对比 网络层连接: 两个主机之间 (?路径上的路由器等网络设备参与其中) 传输层连接: 两个应用进程之间(对中间网络设备透明) 网络层服务模型 ?无连接服务(connection-less service),典型:数据报网络(datagram network ) ? 不事先为系列分组的传输确定传输路径 ? 每个分组独立确定传输路径 ? 不同分组可能传输路径不同 ?连接服务(connection service),典型:虚电路网络(virtual-circuit network ) ? 首先为系列分组的传输确定从源到目的经过的路径 (建立连接) ? 然后沿该路径(连接)传输系列分组 ? 系列分组传输路径相同 ? 传输结束后拆除连接 2. 虚电路网络与数据报网络虚电路网络 虚电路:一条从源主机到目的主机,类似于电路的路径(逻辑连接) ,采用分组交换的方式。每个分组的传输利用链路的全部带宽。源到目的路径经过的网络层设备共同完成虚电路功能 通信过程: 呼叫建立(call setup)→数据传输 →拆除呼叫 每个分组携带虚电路标识(VCID),而不是目的主机地址。虚电路经过的每个网络设备 (如路由器)都维护每条经过它的虚电路连接状态。链路、网络设备资源(如带宽 、缓存等)可以面向VC进行预分配。预分配资源=可预期服务性能,如ATM的电路仿真(CBR) 与电路的区别:1. 不进行电路的资源分配。 2. 都需要建立路径 3. 有时会进行网络资源预留,达到电路级的性能。 虚电路包括: 1. 从源主机到目的主机的一条路径 2. 虚电路号(VCID), 沿路每段链路一个编号 3. 沿路每个网络层设备(如路由器),利用转发表记录经过的每条虚电路 VC实现:沿某条虚电路传输的分组,携带对应虚电路的VCID,而不是目的地址。同一条VC ,在每段链路上的VCID通常不同,路由器转发分组时依据转发表改写/替换虚电路号 虚电路网络在连接建立时也需要解决路由选择问题,同时也需要进行虚电路的维护管理。 ?虚电路信令协议:用于VC的建立、维护与拆除,应用于虚电路网络中。 数据报网络 网络层无连接,每个分组携带目的地址。路由表根据分组的目的地址转发分组。基于路由协议/算法构建转发表,在分组到达时检索转发表。每个分组独立选路。 路由算法(协议)确定通过网络的端到端路径,转发表确定在本路由器如何转发分组 在转发表中,满足最长前缀匹配优先。在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口(entry)。 数据报网络与虚电路网络的区别: Internet (数据报网络) ? 计算机之间的数据交换。是“弹性”服务,没有严格时间需求 ? 链路类型众多。特点、性能各异,但统一服务困难 ? “智能”端系统 (计算机) ,可以自适应、性能控制、差错恢复 ? 简化网络, 复杂“边缘” ATM (VC网络) ? 电话网络演化而来 ? 核心业务是实时对话: ? 严格的时间、可靠性需求 ? 需要有保障的服务 ? “哑(dumb)” 端系统(非智能) ? 电话机 ? 传真机 ? 简化“边缘”, 复杂网络 3. 路由器体系结构两个核心功能:1. 运行路由算法/协议? 2. 将数据报从入口到输出端口 分为: 1. 输入端口: 终结入物理层链路的物理层功能;与位于入链路层远端的数据链路层交互来执行链路层功能。执行查找功能,通过查询转发表决定路由器的输出端口 2. 交换结构:交换结构将路由器的输入端口连接到输出端口。 3. 输出端口:存储交换结构接收的分组,执行必要的链路层和物理成功能在输出链路上出书分组。 4. 路由选择处理器:执行控制平面功能。在传统路由器中执行路由协议,维护路由选择表与关联链路状态。 4. IP协议网络层功能: ?IP数据报格式 ? 版本号:占4位,IP协议的版本号有?4→IPv4,6 → IPv6 ? 首部长度:占4位,以4个字节为单位,如果为5,意味着首部长度为20(5×4)字节 ? 服务类型(TOS):字段占8位,指示期望获得哪种类型的服务。只有在网络提供区分服务(DiffServ)时使用,通常IP分组的该字段(第2字节)的值为00H ? 总长度:占16位,为IP分组的总字节数。最大IP分组的总长度:65535B,最小的IP分组首部:20B。IP分组可以封装的最大数据:65535-20=65515B ? 生存时间(TTL):占8位,是IP分组在网络中可以通过的路由器数。每次转发这个分组,TTL减一,如果TTL为0,丢弃分组。 ? 协议:占8位,指示IP分组封装的数据包的协议。实现复用分用,6为TCP,表示封装的为TCP段;17为UDP,表示封装的是UDP数据报。 ? 首部校验和:占16位,实现IP分组的差错检测。计算时,将此字段置0,计算其他字段之和。采用反码算数运算求和,和的反码作为首部校验和字段。 ? 源IP地址、目的IP地址:占32位,标识发送分组的源主机/路由器(网络接口)和接收分组的目的主机/路由器 (网络接口)的IP地址 ? 选项字段:长度可变,在1-40B之间,携带安全、源选路径、时间戳和路由记录等内容,实际很少使用。 ? 填充:长度可变,范围在0-3B之间,目的在不一起首部,符合32位对其,保障首部长度是4字节的整数倍。 IP分片与重组 MTU(最大传输单元):链路层数据帧可封装数据的上限,不同链路的MTU不同。 大IP分组向较小MTU链路转发时,可以被“分片”,分成多个IP分组,IP分片到达目的主机后进行“重组”。IP首部的相关字段用于标识分片以及确定分片的相对顺序 ? 标识字段:占16位,标识一个IP分组。IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识 ? 标志位:占3位,由保留位,DF (Don't Fragment) 和MF (More Fragment) 组成。 DF =1:禁止分片; DF =0:允许分片 MF =1:非最后一片; MF =0:最后一片(或未分片) ? 片偏移:占13位,一个IP分组分片封装原IP分组数据的相对偏移量 ,以8字节为单位进行计算 IP分片过程 假设原IP分组总长度为L,待转发链路的MTU为M。若L>M,且DF=0,则可以分片。分片时每个分片的标识复制原IP分组的标识。通常分片时,除最后一个分片,其他分片均分为MTU允许的最大分片。一个最大分片可封装的数据应该是8的倍数,因此,一个最大分片可封装的数据为: 需要分片数量: 每片的块偏移: 每片的总字段长度: 每片的MF标志位: IP编址 接口(interface): 主机/路由器与物理链路的连接,实现网络层功能。路由器通常有多个接口,主机通常只有一个或两个接口 (e.g.,有线的以太网接口,无线的802.11接口) IP地址为32比特(IPv4)编号标识主机、路由器的接口。IP地址与每个接口关联,编址即为接口分配IP地址。IP地址采用以下形式:网络号(NetID) – 高位比特,主机号(HostID) –CID特 IP子网:IP地址具有相同网络号的设备接口,不跨越路由器(第三及以上层网络设备)可以彼此物理联通的接口。 ?其中每个标蓝的地方都是一个IP子网,路由器之间的链路为特殊的IP子网,一共6个IP子网。 ?“有类”编址 特殊IP地址 子网划分 IP地址:由以下部分组成:网络号(NetID) – 高位比特,子网号(SubID) – 原网络主机号部分比特,主机号(HostID) – 低位比特? ? 子网掩码:NetID、SubID位全取1,HostID位全取0,由子网地址加子网掩码确认子网大小。 应用:将IP分组的目的IP地址与子网掩码按位与运算,提取子网地址 CIDR 无类域间路由(CIDR: Classless InterDomain Routing) 融合子网地址与子网掩码,方便子网划分。采用无类地址格式:a.b.c.d/x,其中x为前缀长度 路由聚合 采用CIDR可以提高IPv4 地址空间分配效率和高路由效率。将多个子网聚合为一个较大的子网,构造超网(supernetting)。 层次编址可以使得路由信息通告更加高效。采用最长前缀匹配优先原则。 5. DHCP协议——动态主机配置协议主机获得IP地址的方式: 1. 硬编码——静态配置 ?2. 动态主机配置协议——DHCP DHCP允许主机主动获取一个IP地址。主机从服务器动态获取IP地址、子网掩码、默认网关地址 、DNS服务器名称与IP地址。由于DHCP具有将主句连接进入一个网络的网络相关的自动能力,故被称为“即插即用”协议(零配置协议)。DHCP允许地址重用,支持在用地址续租,支持移动用户加入网络。 对于新到达的主机,有4个步骤 1. DHCP服务器发现。新到达的主机需要发现与之交互的DHCP,使用DHCP发现报文。客户生成的IP数据报使用广播地址进行广播,向端口67发送报文。 2. DHCP服务器提供。DHCP服务器收到发现报文后,用DHCP提供报文进行响应。仍然使用广播地址(主机此时还没IP地址),提供的报文包括发现报文的事务ID、推荐的IP地址、网络掩码和IP地址租用期(IP地址有效时间量)。 3. DHCP请求。新的主机从一个或多个服务器的提供中选一个,并向选择的服务器提供DHCP请求报文进行响应,表示选择这个IP地址,将所有参数传回。 4. DHCP ACK。服务器使用DHCP ACK报文,对主机的请求报文进行响应,表示主机被分配上了这个IP地址,并在报文中证实这些参数。 DHCP协议在应用层 实现,请求报文封装到 UDP数据报中。一直采用IP广播的方式,或链路层广播 (e.g. 以太网广播) DHCP服务器构造 ACK报文 ? 包括分配给客户的IP地址、子网掩码、默认网关、DNS服务器地址? 6. NAT——网络地址转换动机 ? 只需/能从ISP申请一个IP地址,可能出现IPv4地址耗尽 ? 本地网络设备IP地址的变更,无需通告外界网络 ? 变更ISP时,无需修改内部网络设备IP地址 ? 内部网络设备对外界网络不可见,即不可直接寻址(安全) NAT的实现 利用(NAT IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号)。将每对(NAT IP地址, 新端口号) 与(源IP地址, 源端口号)的替换信息存储到NAT转换表中。根据NAT转换表,利用(源IP地址, 源端口号)替换每个进入内网IP数据报的(目的IP地址,目的端口号),即(NAT IP地址, 新端口号)。 NAT争议 ? 路由器应该只处理第3层功能 ? 违背端到端通信原则,应用开发者必须考虑到NAT的存在,e.g., P2P应用 ? 地址短缺问题应该由IPv6来解决 NAT穿透 问题:客户期望连接内网地址为 10.0.0.1的服务器,但客户不能直接利用地址 10.0.0.1直接访问服务器。对外唯一可见的地址是NAT 地址: 138.76.29.7 解决方案1: 静态配置NAT ,将特定端口的连接请求转发给服务器,比如?(138.76.29.7, 2500) 总是转发给(10.0.0.1, 25000)。 解决方案2: 利用UPnP (Universal Plug and Play) 互联网网关设备协议 (IGD-Internet Gateway Device ) 自动配置: 学习到NAT公共IP地址 (138.76.29.7) 。在NAT转换表中,增删端口映射 解决方案3: 中继(如Skype) 。NAT内部的客户与中继服务器建立连接,外部客户也与中继服务器建立连接。中继服务器桥接两个连接的分组 7. ICMP协议——互联网控制报文协议ICMP协议被主机和路由器用来彼此沟通网络层的信息。典型用途为差错报告和网络探询。 ICMP通常被认为是IP的一部分,但体系结构中位于IP之上,因为ICMP报文承载在IP分组中。 两类ICMP报文 (1)差错报告报文(5种) ? 目的不可达 ? 源抑制(Source Quench) ? 超时/超期 ? 参数问题 ? 重定向 (Redirect) (2)网络探询报文(2组) ? 回声(Echo)请求与应答报文(Reply) ? 时间戳请求与应答报文 不发送ICMP差错报文的特殊情况 ? 对ICMP差错报告报文不再发送 ICMP差错报告报文 ? 除第1个IP数据报分片外,对所有后续分片均不发送ICMP差错报告报文 ? 对所有多播IP数据报均不发送 ICMP差错报告报文 ? 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的IP数据报不发送 ICMP 差错报告报文 ICMP报文格式与承载方法 一个ICMP报文包括一个类型字段和一个编码字段,同时有检验和字段,接下来4个字节是ICMP的类型。到此处ICMP的前8个字节确定,之后的数据部分包含引起该ICMP报文首次生成的IP数据报的首部和前8个字节(便于发送方确定引发出错的数据报)。ICMP报文作为IP分组封装的数据承载在IP分组中。 类型和编码列表 (感觉不可能考) 应用举例:Traceroute 源主机向目的主机发送一系列UDP 数据报,第1组IP数据报TTL =1,第2组IP数据报TTL=2, 以此类推,但是设置的目的端口号是不可能使用的端口号。当TTL耗尽时,路由器丢弃数据报,向源主机发送ICMP报文 (type=11, code=0) 。ICMP报文携带路由器名称和IP地址信息。当ICMP报文返回到源主机时, 记录RTT。 停止准则:1. UDP数据报最终到达目的主机 2. 目的主机返回“目的端口不可达” ICMP报文 (type=3, code=3) 3. 源主机停止 8. IPv6最初动机: 32位IPv4地址空间已分配殆尽 其他动机: 改进首部格式? 1. 快速处理/转发数据报 2. 支持QoS IPv6数据报格式 固定40字节的基本首部,不允许分片。 优先级(priority): 标识数据报的优先级 流标签(flow Label): 标识同一“流”中的数据报 下一个首部(next header): 标识下一个选项首部或上层协议首部(如TCP首部) 与IPv4相比 彻底移除校验和(checksum),以减少每跳处理时间。允许选项(options)字段,但是从基本首部移出,定义多个选项首部, 通过“下一个首部”字段指示。在ICMPv6这个新版ICMP中,附加报文类型,例如“Packet Too Big”,同时增加多播组管理功能。 表示形式(128位,采用8组4个16进制数的形式表示) ? 一般形式: 1080:0:FF:0:8:800:200C:417A ? 压缩形式: FF01:0:0:0:0:0:0:43 压缩→FF01::43 ? IPv4-嵌入形式: 0:0:0:0:0:FFFF:13.1.68.3 或 ::FFFF:13.1.68.3 ? 地址前缀: 2002:43c:476b::/48 (注: IPv6不再使用掩码!) ? URLs: http://[3FFE::1:800:200C:417A]:8000 IPv6基本地址类型 ? 单播:一对一通信(相当于IPv4的主机与主机通信) ? 多播:一对多通信(相当于IPv4向子网发数据) ? 任意播:一对任意一组之一通信 IPv4向IPv6过渡——隧道 隧道: IPv6数据报作为IPv4数据报的载荷进行封装,穿越IPv4网络 9. 路由算法网络抽象:图 路由算法:寻找最小路径的算法。 路由算法分类 静态路由: ? 手工配置 ? 路由更新慢 ? 优先级高 动态路由: ? 路由更新快(定期更新,及时响应链路费用或网络拓扑变化) 全局信息: ? 所有路由器掌握完整的网络拓扑和链路费用信息 ? E.g. 链路状态(LS)路由算法 分散信息: ? 路由器只掌握物理相连的邻居以及链路费用 ? 邻居间信息交换、运算的迭代过程 ? E.g. 距离向量(DV)路由算法 链路状态(LS)路由算法 Dijkstra 算法 ? 通过“链路状态广播”,所有结点(路由器)掌握网络拓扑和链路费用,所有结点拥有相同信息 ? 通过获得该结点的转发表计算从一个结点(“源”) 到达所有其他结点的最短路径 ? 迭代: k次迭代后,得到到达k个目的结点的最短路径 距离向量(DV)路由算法 Bellman-Ford方程(动态规划) 重点:结点获得最短路径的下一跳, 该信息用于转发表中! 结点x已知到达每个邻居的费用?c(x,v)和维护其所有邻居的距离向量Dv = [Dv (y): y ? N ]。其中Dx (y) = 从结点x到结点y的最小费用估计。 特点: 1. 异步迭代: 引发每次局部迭代的因素为局部链路费用改变或来自邻居的DV更新 2. 分布式: 每个结点只当DV变化时才通告给邻居,邻居在必要时(其DV更新后发生改变)再通告它们的邻居无穷计数问题 毒性逆转(poisoned reverse): 如果一个结点(Z)到达某目的(X)的最小费用路径是通过某个邻居(Y),则通告给该邻居结点到达该目的的距离为无穷大。 定义最大度量(maximum metric): 定义一个最大的有效费用值,如15跳步为最大有效跳数,16跳步表示无穷 层次路由 聚合路由器为一个区域: 自治系统AS (autonomous systems) 。同一AS内的路由器运行相同的路由协议(算法),即自治系统内部路由协议 (“intra-AS” routing protocol) 。不同自治系统内的路由器可 以运行不同的AS内部路由协议。网关路由器(gateway router)位于AS“边缘” ,通过链路连接其他AS的网关路由器。 转发表由AS内部路由算法与 AS间路由算法共同配置。AS内部路由算法设置AS内部目的网络路由入口 (entries)。AS内部路由算法与AS间路由算法共同设置AS外部目的网络路由入口。 10. 路由协议?Internet采用层次路由 ?AS内部路由协议也称为内部网络协议IGP (interior gateway protocols) ?最常见的AS内部路由协议: ? 路由信息协议:RIP(Routing Information Protocol) ? 开放最短路径优先:OSPF(Open Shortest Path First) ? 内部网关路由协议:IGRP(Interior Gateway Routing Protocol) RIP 距离向量路由算法 ? 距离度量:跳步数 (max = 15 hops), 每条链路1个跳步 ? 每隔30秒,邻居之间交换一次DV,成为通告(advertisement) ? 每次通告:最多25个目的子网(IP地址形式) 链路失效与恢复:如果180秒没有收到通告,代表邻居/链路失效,即经过该邻居的路由不可用,需要重新计算路由。向邻居发送新的通告,如果转发表改变,邻居再依次向外发送通告。链路失效信息在快速传播到全网的过程中,可能发生无穷计数问题。毒性逆转技术用于预防乒乓(ping-pong)环路 (另外:无穷大距离 = 16 hops) RIP路由表是利用一个称作route-d (daemon)的应用层进程进行管理,使用应用进程实现,通告报文周期性地通过UDP数据报发送。 OSPF open意味着“开放”,即公众可用。采用链路状态路由算法(LS分组扩散(通告),每个路由器构造完整的网络(AS)拓扑图,利用Dijkstra算法计算路由)。OSPF通告中每个入口对应一个邻居。OSPF报文直接封装到IP数据报中,然后OSPF通告在整个AS范围泛洪。与OSPF极其相似的一个路由协议IS-IS路由协议。 OSPF的优点 ?安全(security): 所有OSPF报文可以被认证 (预防恶意入侵) ?允许使用多条相同费用的路径 (RIP只能选一条) ?对于每条链路,可以针对不同的TOS设置多个不同的费用度量 (e.g., 卫星链路可以针对“尽力” (best effort) ToS设置“低”费用;针对实时ToS 设置“高”费用) ?集成单播路由与多播路由: ? 多播OSPF协议(MOSPF) 与OSPF利用相同的网络拓扑数据 ?OSPF支持对大规模AS分层(hierarchical) 区边界路由器(Area Border Routers): “汇总” 到达所在区网络的距离, 通告给其他区边界路由器 主干路由器(Backbone Routers): 在主干区内运行OSPF路由算法. AS边界路由器(AS boundary routers): 连接其他AS. BGP ? 边界网关协议BGP (Border Gateway Protocol): 事实上的标准域间路由协议 ? 将Internet “粘合”为一个整体的关键 ? BGP为每个AS提供了一种手段: ? eBGP: 从邻居AS获取子网可达性信息. ? iBGP: 向所有AS内部路由器传播子网可达性信息. ? 基于可达性信息与策略,确定到达其他网络的 “好” 路径 ?BGP会话(session): 两个BGP路由器 (“Peers”) 交换BGP报文: ? 通告去往不同目的前缀(prefix)的路径 (“路径向量 (path vector)”协议) ? 报文交换基于半永久的TCP连接 ?BGP报文: ? OPEN: 与peer建立TCP连接,并认证发送方 ? UPDATE: 通告新路径 (或撤销原路径) ? KEEPALIVE: 在无UPDATE时,保活连接;也用于对 OPEN请求的确认 ? NOTIFICATION: 报告先前报文的差错;也被用于关闭连接 ? 通告的前缀信息包括BGP属性 ? 前缀+属性= “路由” ? 两个重要属性: ? AS-PATH(AS路径): 包含前缀通告所经过的AS序列: e.g., AS 67, AS 17 ? NEXT-HOP(下一跳): 开始一个AS-PATH的路由器接口,指向下一跳AS. ? 可能从当前AS到下一跳AS存在多条链路 ? 通告的前缀信息包括BGP属性 ? 前缀+属性= “路由” ? 两个重要属性: ? AS-PATH(AS路径): 包含前缀通告所经过的AS序列: e.g., AS 67, AS 17 ? NEXT-HOP(下一跳): 开始一个AS-PATH的路由器接口,指向下一跳AS. ? 可能从当前AS到下一跳AS存在多条链路、 OSPF和BGP之间的区别 OSPF是AS内部的路由选择,是运行在单一ISP的网络中的路由选择算法。 BGP是一个AS间路由选择协议,是ISP之间的路由选择,称为边界网关协议。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:01:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |