Loading... # 网络层(二) ## IP ### IPv4编址 32位,提供$2^{32}$个地址(约40亿) 接口:主机和物理链路之间的边界(主机通常一个或两个,路由器多个接口) 采用点分十进制 ![image-20220516223232420.png](http://xherlock.top/usr/uploads/2022/05/1801161868.png) 子网:具有IP地址相同子网部分(子网位)的设备接口,可以物理上不经过路由器到达对方 ![image-20220516223533593.png](http://xherlock.top/usr/uploads/2022/05/2285968224.png) 6个子网 233.1.1.0/24:/24为子网掩码(表示前24位为1,其余为0) ***重点*** 根据一个IP地址和子网掩码计算 1. 子网的网络地址(network address) 2. 子网的广播地址(broadcast address) 3. 子网中的主机地址范围 4. 子网中有几台主机? **当一个主机发送一个带有目的地址为广播地址的数据报,消息被送往所有在同一个子网中的所有主机** 1.IP和子网掩码换算为二进制,子网掩码为1的部分为地址的网络部分,为0的部分为地址的主机部分 2.IP地址和子网掩码与运算,结果为网络地址 3.网络地址网络部分不变,主机部分变为全1,结果为广播地址 4.网络地址+1为第一个主机地址,广播地址-1为最后一个主机地址,主机地址范围为***网络地址+1~广播地址-1*** 5.主机数量等于$2^{主机位数}-2$(不包括网络地址和广播地址) 例题 ![image-20220516225133121.png](http://xherlock.top/usr/uploads/2022/05/1227282118.png) CIDR(classless interdomain routing):无类别域间路由选择——因特网的地址分配策略 地址格式:a,b,c,d/x,x构成了IP地址的网络部分,改地址的前缀 一个组织通常被分配一块连续的地址,即具有相同前缀的一段地址,路由器只考虑前缀进行转发,大大减少了在路由器中转发表的长度 **分类编址**:IP地址的网络部分被限制为长度为8、16、24比特(实际上有5类) * C类:24,仅能容纳2^8-2=254台主机,对许多组织来说太少了 * B类:16,能容纳2^16-2=65534台主机,又太多了 为节省可分配的注册IP地址,由一组IP地址被拿出来专门用于私有IP网络,称为**私有IP地址** * A类:10.0.0.0~10.255.255.255即10.0.0.0/8 * B类:172.16.0.0~172.31.255.255即172.16.0.0/12 * C类:192.168.70.0~192.168.255.255即192.168.0.0/16 这些地址不会被Internet分配,也不会被路由。尽管不能直接和Internet相连,但通过NAT仍可以和internet通信 **一些特殊的IP地址** * 0.0.0.0:保留地址,表示“本网络”的“本主机”(启动设备时又不知道自己的IP情况下) * 255.255.255.255:受限广播地址,只能在本网络上进行广播(各个路由器均不转发) IP主机字段全为1,称为直接广播地址,被发送到该网络号的每台主机,路由器可转发 * 127.0.0.1:环回地址(loopback address),一般用来作为本地软件环回测试,本主机的进程之间通信 > 地址/路由聚合 | 使用单个网络前缀通告多个网络的能力 > > ![image-20220526104935669.png](http://xherlock.top/usr/uploads/2022/05/492039522.png) 采用最长前缀匹配,组织1将选择ISPs-R-Us的路由 ![image-20220526105307638.png](http://xherlock.top/usr/uploads/2022/05/2868960584.png) ICANN:(Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)负责 * 分配IP地址块(给ISP) * 管理DNS根服务器 * 分配域名,解决域名纷争 #### DHCP Dynamic Host Configuration Protocol(动态主机配置协议),基于**UDP**,属于**应用层协议** * 主机自动获取一个IP地址 * 允许主机知道子网掩码、第一跳路由器地址(默认网关default gateway)、本地DNS服务器地址 * 即插即用协议(plug-and-play) ![image-20220526112450517.png](http://xherlock.top/usr/uploads/2022/05/2009557795.png) **步骤** 1. **DHCP服务器发现**:客户在UDP分组中向端口67发送**DHCP发现报文**,使用广播目的地址255.255.2552.255和本主机源地址0.0.0.0 2. **DHCP服务器提供**:DHCP服务器收到一个DHCP发现报文时,用一个**DHCP提供报文**向客户作出响应,仍使用广播地址,目的端口68,报文中包含发现报文的事务ID、向客户推荐的IP地址、网络掩码、IP地址租用期(address lease time,即IP地址有效期) 3. **DHCP请求**:新到达的客户从一个或多个服务器中选一个,向选中的服务器提供一个**DHCP请求报文**进行响应 4. **DHCP ACK**:服务器发送DHCP ACK报文 ![image-20220526113820375.png](http://xherlock.top/usr/uploads/2022/05/2647672241.png) ![image-20220526114215501.png](http://xherlock.top/usr/uploads/2022/05/2641456715.png) **总结DHCP客户-服务器交互过程** * 整个过程中,DHCP客户端源IP地址均为0.0.0.0 * 整个过程中,DHCP客户端和服务端目标IP地址均为255.255.255.255 * yiadrr除第一次DHCP客户端请求时为空,后面三个阶段地址为服务器分配和客户端希望使用的IP地址 * 客户端一般使用UDP 68端口,服务端一般使用UDP 67端口 #### NAT network address translation(网络地址转换):子网越来越多,设备需要的IP不够用 ![image-20220529105146428.png](http://xherlock.top/usr/uploads/2022/05/2029922976.png) **特点** * 只需一个IP地址给所有设备 * 可以改变局域网内的设备地址而不需要告诉外界 * 可以改变ISP而不用改变局域网内设备的地址 * 局域网内的设备无法显式寻址,NAT使能路由器对外界隐藏了网络的细节(增强安全) **NAT路由器需要做的** * 出去的数据报需要替换 (source IP address, port #) 为(NAT IP address, new port #),回来的数据报会以这个新的IP地址、端口对作为目标地址 * 在NAT转换表中记录下每个WAN (NAT IP address, new port #)和LAN (source IP address, port #) ,WAN的端口为当前未在NAT转换表中的源端口号 * 回来的数据报需要查找转换表,并替换(NAT IP address, new port \#) 为 (source IP address, port #) 如图为一个NAT转换的案例 ![image-20220529112334438.png](http://xherlock.top/usr/uploads/2022/05/1950488739.png) 一个单独的LAN地址可以支持多少个连接? 协议×源地址×源端口×目的地址×目的端口 = $2\times1\times2^{16}\times2^{32}\times2^{16}=2^{65}$个连接 **NAT的争议**: * 端口号适用于进程编址的,不应该用于主机编址 * 路由器仅应当处理高达第三层的分组 * NAT协议违反了所谓端到端原则,即主机彼此应相互直接对话,结点不应介入修改IP地址和端口号 * 应该使用IPv6来解决地址耗尽问题而不是打补丁(笑死,我们老师说他大学的时候IPv6都已经开始搞了,到现在了还没有看到IPv6完全替代的迹象,属于成效很低了) **NAT穿透** 最好的描述就是图片,如图一个客户想要访问一个子网下的一个地址,但是只能看到它的NAT路由地址 ![image-20220529115559743.png](http://xherlock.top/usr/uploads/2022/05/3489236164.png) **解决方案:** 法一:静态指定端口联系,eg:以上图为例,一个客户永远通过138.76.29.7的5000端口联系10.0.0.1 法二:UPnP(通用即插即用,Universal Plug and Play),允许主机发现并配置邻近NAT的协议,能够增加或移除端口映射 法三:中继 ### ICMP 因特网控制报文协议:提供差错报告(“目的网络不可达”)、响应请求(ping) 属于IP之上(ICMP报文承载在IP分组中,就像TCP/UDP作为IP有效承载) ![image-20220529142624803.png](http://xherlock.top/usr/uploads/2022/05/464488894.png) ICMP报文包含:一个类型字段、一个编码字段、引起该ICMP报文首次生成的IP数据报的首部和前8字节内容(以便发送方能确定引发该差错的数据报) **报文类型如下** ![image-20220529143113531.png](http://xherlock.top/usr/uploads/2022/05/1589815506.png) Traceroute程序允许**跟踪从一台主机到世界上任意一台其他主机之间的路由**,使用ICMP实现。源主机发送一系列IP数据报,这些数据报的每个都携带了一个**不可达UDP端口号**的UDP报文段,第一个数据报TTL为1,第二个为2,源主机为每个数据报启动定时器,当第n个数据报到达第n台路由器时,TTL正好过期,路由器丢弃该数据报并发送一个ICMP告警报文给源主机(类型11编码0),报文包含了路由器的名字和IP地址。ICMP报文返回源主机时,主机得到往返时延和第n台路由器的名字和IP地址 ### IPv6 #### IPv6数据报格式 ![image-20220529144237350.png](http://xherlock.top/usr/uploads/2022/05/4067877020.png) **对比IPv4特点** * 扩大的地址容量 * 简化高效的**40字节首部**(头部长度固定) * 流标签与优先级 * 结构更简单、更高效(部分IPv4字段被舍弃或作为选项,首部无检验和、分片、选项) **IPv6字段** * 版本:字段值为6(4bit) * 流量类型:类似IPv4中的TOS字段(8bit) * 流标签:用于标识一条数据报的流(20bit) * 有效载荷长度:IPv6数据报中跟在定长的40字节数据报首部后面的字节数量(16bit) * 源地址和目的地址:128bit ICMPv6增加了“分组太大”的类型和“未识别的IPv6选项”错误编码;包含了IGMP #### 从IPv4到IPv6 迁移方法:**双栈和隧道** **双栈**(dual-stack):使用该方法的IPv6结点还具有完整的IPv4实现,有发送和接收IPv4和IPv6两种数据报的能力,方法存在问题 ![image-20220529150055059.png](http://xherlock.top/usr/uploads/2022/05/4169538644.png) 当IPv6传输给IPv4后,部分字段被去除,从IPv4再传输给IPv6时会出现字段丢失,如图中A传输往F **隧道**(tunneling):可将整个IPv6数据报放入一个IPv4数据报的数据(有效载荷)字段中 ![image-20220529150348506.png](http://xherlock.top/usr/uploads/2022/05/3696391981.png) 相当于忽略了IPv6之间传输时,将中间的IPv4都看作了隧道,始终传输的都携带有IPv6的数据报 ![image-20220529150539600.png](http://xherlock.top/usr/uploads/2022/05/1625193736.png) 最后修改:2022 年 06 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏