-
首先是前菜 「 IP 基本认识 」
-
其次是主菜 「IP 地址的基础知识」
-
最后是点心 「IP 协议相关技术」
正文
前菜 —— IP 基本认识
IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。
网络层与数据链路层有什么关系呢?
主菜 —— IP 地址的基础知识
32
位正整数来表示,IP 地址在计算机是以二进制的方式处理的。4
组,每组以「.
」隔开,再将每组转换成十进制。可能有的小伙伴提出了疑问,现在不仅电脑配了 IP, 手机、IPad 等电子设备都配了 IP 呀,照理来说肯定会超过 43 亿啦,那是怎么能够支持这么多 IP 的呢?
NAT
,使得可连接计算机数超过 43 亿台。NAT
技术后续会进一步讨论和说明。IP 地址的分类
什么是 A、B、C 类地址?
A、B、C 分类地址最大主机个数是如何计算的呢?
-
主机号全为 1 指定某个网络下的所有主机,用于广播
-
主机号全为 0 指定某个网络
广播地址用于什么?
172.20.0.0/16
用二进制表示如下:172.20.255.255
。-
在本网络内广播的叫做本地广播。例如网络地址为 192.168.0.0/24 的情况下,广播地址是 192.168.0.255 。因为这个广播地址的 IP 包会被路由器屏蔽,所以不会到达 192.168.0.0/24 以外的其他链路上。
-
在不同网络之间的广播叫做直接广播。例如网络地址为 192.168.0.0/24 的主机向 192.168.1.255/24 的目标地址发送 IP 包。收到这个包的路由器,将数据转发给 192.168.1.0/24,从而使得所有 192.168.1.1~192.168.1.254 的主机都能收到这个包(由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发)。
什么是 D、E 类地址?
多播地址用于什么?
1110
就表示是多播地址,而剩下的 28 位是多播的组编号。-
224.0.0.0 ~ 224.0.0.255 为预留的组播地址,只能局域网中,路由器是不会进行转发的
-
224.0.1.0 ~ 238.255.255.255 为用户可用的组播地址,可以用于 Internet 上
-
239.0.0.0 ~ 239.255.255.255 为本地管理组播地址,可供内部网在内部使用,仅在特定的本地范围内有效
IP 分类的优点
IP 分类的缺点
-
C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个网吧都不够用。
-
而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。
CIDR
无分类地址解决。无分类地址 CIDR
CIDR
。怎么划分网络号和主机号的呢?
a.b.c.d/x
,其中/x
表示前 x 位属于网络号, x 的范围是0 ~ 32
,这就使得 IP 地址更加具有灵活性。/24
表示前 24 位是网络号,剩余的 8 位是主机号。为什么要分离网络号和主机号?
怎么进行子网划分?
-
未做子网划分的 ip 地址:网络地址+主机地址
-
做子网划分后的 ip 地址:网络地址+(子网网络地址+子网主机地址)
公有 IP 地址与私有 IP 地址
公有 IP 地址由谁管理呢?
ICANN
组织管理,中文叫「互联网名称与数字地址分配机构」。-
ARIN 北美地区
-
LACNIC 拉丁美洲和一些加勒比群岛
-
RIPE NCC 欧洲、中东和中亚
-
AfriNIC 非洲地区
-
APNIC 亚太地区
IP 地址与路由控制
-
主机 A 要发送一个 IP 包,其源地址是
10.1.1.30
和目标地址是10.1.2.10
,由于没有在主机 A 的路由表找到与目标地址10.1.2.10
的网络地址,于是把包被转发到默认路由(路由器1
) -
路由器
1
收到 IP 包后,也在路由器1
的路由表匹配与目标地址相同的网络地址记录,发现匹配到了,于是就把 IP 数据包转发到了10.1.0.2
这台路由器2
-
路由器
2
收到后,同样对比自身的路由表,发现匹配到了,于是把 IP 包从路由器2
的10.1.2.1
这个接口出去,最终经过交换机把 IP 数据包转发到了目标主机
环回地址是不会流向网络
localhost
的主机名。IP 分片与重组
MTU
都是不相同的,如 FDDI 数据链路 MTU 4352、以太网的 MTU 是 1500 字节等。1500
字节。MSS
也就是在 TCP 层进行分片不由 IP 层分片,那么对于 UDP 我们尽量不要发送一个大于MTU
的数据报文。IPv6 基本认识
128
位的,这可分配的地址数量是大的惊人,说个段子 IPv6 可以保证地球上的每粒沙子都能被分配到一个 IP 地址。IPv6 的亮点
-
IPv6 可自动配置,即使没有 DHCP 服务器也可以实现自动分配 IP 地址,真是便捷到即插即用啊。
-
IPv6 包头包首部长度采用固定的值
40
字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能。 -
IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性。
-
…(由你发现更多的亮点)
IPv6 地址的标识方法
IPv6 地址的结构
-
单播地址,用于一对一的通信
-
组播地址,用于一对多的通信
-
任播地址,用于通信最近的节点,最近的节点是由路由协议决定
-
没有广播地址
IPv6 单播地址类型
-
在同一链路单播通信,不经过路由器,可以使用链路本地单播地址,IPv4 没有此类型
-
在内网里单播通信,可以使用唯一本地地址,相当于 IPv4 的私有 IP
-
在互联网通信,可以使用全局单播地址,相当于 IPv4 的公有 IP
IPv4 首部与 IPv6 首部
-
取消了首部校验和字段。因为在数据链路层和传输层都会校验,因此 IPv6 直接取消了 IP 的校验。
-
取消了分片 / 重新组装相关字段。分片与重组是耗时的过程,IPv6 不允许在中间路由器进行分片与重组,这种操作只能在源与目标主机,这将大大提高了路由器转发的速度。
-
取消选项字段。选项字段不再是标准 IP 首部的一部分了,但它并没有消失,而是可能出现在 IPv6 首部中的「下一个首部」指出的位置上。删除该选项字段是的 IPv6 的首部成为固定长度的
40
字节。
点心 —— IP 协议相关技术
-
DNS 域名解析
-
ARP 与 RARP 协议
-
DHCP 动态获取 IP 地址
-
NAT 网络地址转换
-
ICMP 互联网控制报文协议
-
IGMP 因特网组管理协
DNS
域名的层级关系
www.server.com
,这里的句点代表了不同层次之间的界限。-
根 DNS 服务器
-
顶级域 DNS 服务器(com)
-
权威 DNS 服务器(server.com)
域名解析的工作流程
hosts
,如果还是没有,就会 DNS 服务器进行查询,查询的过程如下:-
客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
-
本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
-
根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
-
本地 DNS 收到顶级域名服务器的地址后,发起请求问 “老二, 你能告诉我 www.server.com 的 IP 地址吗?”
-
顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。
-
本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com 对应的 IP 是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
-
权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
-
本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
ARP
那么 ARP 又是如何知道对方 MAC 地址的呢?
-
主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
-
当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。
RARP 协议你知道是什么吗?
RARP
服务器,在这个服务器上注册设备的 MAC 地址及其 IP 地址。然后再将这个设备接入到网络,接着:-
该设备会发送一条「我的 MAC 地址是 XXXX,请告诉我,我的 IP 地址应该是什么」的请求信息。
-
RARP 服务器接到这个消息后返回「MAC 地址为 XXXX 的设备,IP 地址为 XXXX」的信息给这个设备。
DHCP
-
客户端首先发起 DHCP 发现报文(DHCP DISCOVER)的 IP 数据报,由于客户端没有 IP 地址,也不知道 DHCP 服务器的地址,所以使用的是 UDP 广播通信,其使用的广播目的地址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
-
DHCP 服务器收到 DHCP 发现报文时,用 DHCP 提供报文(DHCP OFFER)向客户端做出响应。该报文仍然使用 IP 广播地址 255.255.255.255,该报文信息携带服务器提供可租约的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。
-
客户端收到一个或多个服务器的 DHCP 提供报文后,从中选择一个服务器,并向选中的服务器发送 DHCP 请求报文(DHCP REQUEST 进行响应,回显配置的参数。
-
最后,服务端用 DHCP ACK 报文对 DHCP 请求报文进行响应,应答所要求的参数。
-
服务器如果同意继续租用,则用 DHCP ACK 报文进行应答,客户端就会延长租期。
-
服务器如果不同意继续租用,则用 DHCP NACK 报文,客户端就要停止使用租约的 IP 地址。
咦,用的是广播,那如果 DHCP 服务器和客户端不是在同一个局域网内,路由器又不会转发广播包,那不是每个网络都要配一个 DHCP 服务器?
-
DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,而 DHCP 中继代理在收到这个广播包以后,再以单播的形式发给 DHCP 服务器。
-
服务器端收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包转发给 DHCP 客户端 。
NAT
那不是 N 个 私有 IP 地址,你就要 N 个公有 IP 地址?这怎么就缓解了 IPv4 地址耗尽的问题?这不瞎扯吗?
NAT 那么牛逼,难道就没缺点了吗?
-
外部无法主动与 NAT 内部服务器建立连接,因为 NAPT 转换表没有转换记录。
-
转换表的生产与转换操作都会产生性能开销。
-
通信过程中,如果 NAT 路由器重启了,所有的 TCP 连接都将被重置。
如何解决 NAT 潜在的问题呢?
ICMP
ICMP 功能都有啥?
ICMP
主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。IP
通信中如果某个IP
包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知。A
向主机B
发送了数据包,由于某种原因,途中的路由器2
未能发现主机B
的存在,这时,路由器2
就会向主机A
发送一个ICMP
目标不可达数据包,说明发往主机B
的包未能成功。IP
进行发送 。2
返回的 ICMP 包会按照往常的路由控制先经过路由器1
再转发给主机A
。收到该 ICMP 包的主机A
则分解 ICMP 的首部和数据域以后得知具体发生问题的原因。ICMP 类型
-
一类是用于诊断的查询消息,也就是「查询报文类型」
-
另一类是通知出错原因的错误消息,也就是「差错报文类型」
IGMP
IGMP
协议了。-
IGMP 报文向路由器申请加入和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除非主机通过 IGMP 加入到组播组,主机申请加入到组播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发该组播地址的数据包了。
-
IGMP 报文采用 IP 封装,IP 头部的协议号为 2,而且 TTL 字段值通常 为 1,因为 IGMP 是工作在主机与连接的路由器之间。
IGMP 工作机制
IGMPv2
作为例子,说说常规查询与响应和离开组播组这两个工作机制。-
路由器会周期性发送目的地址为
224.0.0.1
(表示同一网段内所有主机和路由器)IGMP 常规查询报文; -
主机 1 和 主机 3 收到这个查询,随后会启动「报告延迟计时器」,计时器的时间是随机的,通常是 0~10 秒,计时器超时后主机就会发送 IGMP 成员关系报告报文(源 IP 地址为自己主机的 IP 地址,目的 IP 地址为组播地址)。如果在定时器超时之前,收到同一个组内的其他主机发送的成员关系报告报文,则自己不再发送,这样可以减少网络中多余的 IGMP 报文数量;
-
路由器收到主机的成员关系报告报文后,就会在 IGMP 路由表中加入该组播组,后续网络中一旦该组播地址的数据到达路由器,它会把数据包转发出去;
-
主机 1 要离开组 224.1.1.1,发送 IGMPv2 离组报文,报文的目的地址是 224.0.0.2(表示发向网段内的所有路由器);
-
路由器收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报文(共计发送 2 个),以便确认该网络是否还有 224.1.1.1 组的其他成员;
-
主机 3 仍然是组 224.1.1.1 的成员,因此它立即响应这个特定组查询。路由器知道该网络中仍然存在该组播组的成员,于是继续向该网络转发 224.1.1.1 的组播数据包;
-
主机 1 要离开组播组 224.1.1.1,发送 IGMP 离组报文;
-
路由器收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报文(共计发送 2 个)。此时在该网段内,组 224.1.1.1 已经没有其他成员了,因此没有主机响应这个查询;
-
一定时间后,路由器认为该网段中已经没有 224.1.1.1 组播组成员了,将不会再向这个网段转发该组播地址的数据包;
参考文献
本文来源于互联网:IP 基础知识 “全家桶”,45 张图一套带走
点击数:121