网络层(二)

IP

IPv4编址

32位,提供$2^{32}$个地址(约40亿)

接口:主机和物理链路之间的边界(主机通常一个或两个,路由器多个接口)

采用点分十进制

image-20220516223232420.png

子网:具有IP地址相同子网部分(子网位)的设备接口,可以物理上不经过路由器到达对方

image-20220516223533593.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

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

采用最长前缀匹配,组织1将选择ISPs-R-Us的路由

image-20220526105307638.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

步骤

  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

image-20220526114215501.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

特点

  • 只需一个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

一个单独的LAN地址可以支持多少个连接?

协议×源地址×源端口×目的地址×目的端口 = $2\times1\times2^{16}\times2^{32}\times2^{16}=2^{65}$个连接

NAT的争议

  • 端口号适用于进程编址的,不应该用于主机编址
  • 路由器仅应当处理高达第三层的分组
  • NAT协议违反了所谓端到端原则,即主机彼此应相互直接对话,结点不应介入修改IP地址和端口号
  • 应该使用IPv6来解决地址耗尽问题而不是打补丁(笑死,我们老师说他大学的时候IPv6都已经开始搞了,到现在了还没有看到IPv6完全替代的迹象,属于成效很低了)

NAT穿透

最好的描述就是图片,如图一个客户想要访问一个子网下的一个地址,但是只能看到它的NAT路由地址

image-20220529115559743.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

ICMP报文包含:一个类型字段、一个编码字段、引起该ICMP报文首次生成的IP数据报的首部和前8字节内容(以便发送方能确定引发该差错的数据报)

报文类型如下

image-20220529143113531.png

Traceroute程序允许跟踪从一台主机到世界上任意一台其他主机之间的路由,使用ICMP实现。源主机发送一系列IP数据报,这些数据报的每个都携带了一个不可达UDP端口号的UDP报文段,第一个数据报TTL为1,第二个为2,源主机为每个数据报启动定时器,当第n个数据报到达第n台路由器时,TTL正好过期,路由器丢弃该数据报并发送一个ICMP告警报文给源主机(类型11编码0),报文包含了路由器的名字和IP地址。ICMP报文返回源主机时,主机得到往返时延和第n台路由器的名字和IP地址

IPv6

IPv6数据报格式

image-20220529144237350.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

当IPv6传输给IPv4后,部分字段被去除,从IPv4再传输给IPv6时会出现字段丢失,如图中A传输往F

隧道(tunneling):可将整个IPv6数据报放入一个IPv4数据报的数据(有效载荷)字段中

image-20220529150348506.png

相当于忽略了IPv6之间传输时,将中间的IPv4都看作了隧道,始终传输的都携带有IPv6的数据报

image-20220529150539600.png

最后修改:2022 年 06 月 16 日
如果觉得我的文章对你有用,请随意赞赏