IP基本认识
IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。
网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。
网络层与数据链路层有什么关系呢?
IP 的作用是主机之间通信用的
MAC 的作用则是实现「直连」的两个设备之间通信
IP 则负责在「没有直连」的两个网络之间进行通信传输
计算机网络中也需要「数据链路层」和「网络层」这个分层才能实现向最终目标地址的通信。
源IP地址和目标IP地址在传输过程中是不会变化的(前提:没有使用 NAT 网络),只有源 MAC 地址和目标 MAC 一直在变化。
IP地址的基础知识
IP 地址(IPv4 地址)由
32
位正整数来表示,IP 地址在计算机是以二进制的方式处理的。为了方便记忆采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8 位为组,共分为
4
组,每组以「.
」隔开,再将每组转换成十进制。IP 地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有 2 个以上的网卡,也就是它们会有 2 个以上的 IP 地址。
IP地址的分类
IP 地址显得很充裕,于是计算机科学家们设计了分类地址。
IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。
什么是 A、B、C 类地址?
对于 A、B、C 类主要分为两个部分,分别是网络号和主机号
A、B、C 分类对应的地址范围、最大主机个数
A、B、C 分类地址最大主机个数是如何计算的呢?
为什么要减 2 呢?
在 IP 地址中,有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址。
主机号全为 1 指定某个网络下的所有主机,用于广播
主机号全为 0 指定某个网络
广播地址用于什么?
在同一个链路中相互连接的主机之间发送数据包。
广播地址可以分为本地广播和直接广播两种。
在本网络内广播的叫做本地广播
在不同网络之间的广播叫做直接广播
什么是 D、E 类地址?
D 类和 E 类地址是没有主机号的,所以不可用于主机 IP,D 类常被用于多播,E 类是预留的分类,暂时未使用。
多播地址用于什么?
用于将包发送给特定组内的所有主机。
多播使用的 D 类地址,其前四位是
1110
就表示是多播地址,而剩下的 28 位是多播的组编号。从 224.0.0.0 ~ 239.255.255.255 都是多播的可用范围,其划分为以下三类:
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 地址时候,我们判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址。
简单明了、选路(基于网络地址)简单。
IP分类的缺点
同一网络下没有地址层次,缺少地址的灵活性。
一个公司里用了 B 类地址,但是可能需要根据生产环境、测试环境、开发环境来划分地址层次,而这种 IP 分类是没有地址层次划分的功能
不能很好的与现实网络匹配。
C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个网吧都不够用。
而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。
无分类地址CIDR
无分类地址的方案,即
CIDR
。32 比特的 IP 地址被划分为两部分,前面是网络号,后面是主机号。
怎么划分网络号和主机号的呢?
表示形式
a.b.c.d/x
,其中/x
表示前 x 位属于网络号, x 的范围是0 ~ 32
,这就使得 IP 地址更加具有灵活性。
另一种划分网络号与主机号形式,那就是子网掩码,掩码的意思就是掩盖掉主机号,剩余的就是网络号。
将子网掩码和 IP 地址按位计算 AND,就可得到网络号。
为什么要分离网络号和主机号?
两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址是否相同。如果网络地址相同,表明接受方在本网络上,那么可以把数据包直接发送到目标主机。
路由器寻址工作中,也就是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。
怎么进行子网划分?
通过子网掩码划分出网络号和主机号,那实际上子网掩码还有一个作用,那就是划分子网。
子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址
未做子网划分的 ip 地址:网络地址+主机地址
做子网划分后的 ip 地址:网络地址+(子网网络地址+子网主机地址)
举例
C 类地址中前 24 位是网络号,最后 8 位是主机号,根据子网掩码可知从 8 位主机号中借用 2 位作为子网号。
公有IP地址与私有IP地址
公有 IP 地址由谁管理呢?
私有 IP 地址通常是内部的 IT 人员管理,公有 IP 地址是由
ICANN
组织管理,中文叫「互联网名称与数字地址分配机构」。IANA 是 ICANN 的其中一个机构,它负责分配互联网 IP 地址,是按州的方式层层分配。
IP地址与路由控制
IP地址的网络地址这一部分是用于进行路由控制。
路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在主机和路由器上都会有各自的路由器控制表。
在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。
如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。
环回地址是不会流向网络
环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。
计算机使用一个特殊的 IP 地址 127.0.0.1 作为环回地址。与该地址具有相同意义的是一个叫做
localhost
的主机名。使用这个 IP 或主机名时,数据包不会流向网络
IP分片与重组
每种数据链路的最大传输单元
MTU
都是不相同的每种数据链路的 MTU 之所以不同,是因为每个不同类型的数据链路的使用目的不同。
最常见数据链路是以太网,它的 MTU 是
1500
字节。经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行,路由器是不会进行重组的
IPv6的亮点
可分配的地址变多
IPv6 可自动配置,即使没有 DHCP 服务器也可以实现自动分配IP地址,真是便捷到即插即用
IPv6 包头包首部长度采用固定的值
40
字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性
IPv6地址标识方法
IPv6 地址长度是 128 位,是以每 16 位作为一组,每组用冒号 「:」 隔开。
如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号 「::」隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。
IPv6地址的结构
IPv6 的地址主要有以下类型地址:
单播地址,用于一对一的通信
组播地址,用于一对多的通信
任播地址,用于通信最近的节点,最近的节点是由路由协议决定
没有广播地址
IPv6 单播地址类型
在同一链路单播通信,不经过路由器,可以使用链路本地单播地址,IPv4 没有此类型
在内网里单播通信,可以使用唯一本地地址,相当于 IPv4 的私有 IP
在互联网通信,可以使用全局单播地址,相当于 IPv4 的公有 IP
IPv4首部和IPv6首部
首部改进
取消了首部校验和字段。
取消了分片/重新组装相关字段。
取消选项字段。
IP协议相关技术
DNS
上网的时候,通常使用的方式是域名,而不是 IP 地址,因为域名方便人类记忆。
这一技术的就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP 地址。
域名的层级关系
域名都是用句点来分隔的,比如
www.server.com
,这里的句点代表了不同层次之间的界限。越靠右的位置表示其层级越高。
域名的层级关系类似一个树状结构:
根 DNS 服务器
顶级域 DNS 服务器(com)
权威 DNS 服务器(server.com)
客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。
域名解析的工作流程
浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件
hosts
,如果还是没有,就会 DNS 服务器进行查询DNS 域名解析的过程蛮有意思的,整个过程就和我们日常生活中找人问路的过程类似,只指路不带路
ARP
在传输一个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会通过主机「路由表」确定 IP 数据包下一跳。然而,网络层的下一层是数据链路层,所以我们还要知道「下一跳」的 MAC 地址。
主机的路由表中可以找到下一跳的 IP 地址,所以可以通过 ARP 协议
ARP 又是如何知道对方 MAC 地址的呢?
把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。
RARP 协议你知道是什么吗?
ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址。
通常这需要架设一台
RARP
服务器,在这个服务器上注册设备的 MAC 地址及其 IP 地址。然后再将这个设备接入到网络,接着:该设备会发送一条「我的 MAC 地址是XXXX,请告诉我,我的IP地址应该是什么」的请求信息。
RARP 服务器接到这个消息后返回「MAC地址为 XXXX 的设备,IP地址为 XXXX」的信息给这个设备。
DHCP
电脑通常都是通过 DHCP 动态获取 IP 地址,大大省去了配 IP 信息繁琐的过程。
DHCP 交互中,全程都是使用 UDP 广播通信。
DHCP 中继代理。有了 DHCP 中继代理以后,对不同网段的 IP 地址分配也可以由一个 DHCP 服务器统一进行管理。
NAT
互联网的用户增速是非常惊人的,所以 IPv4 地址依然有被耗尽的危险。
网络地址转换 NAT 的方法,再次缓解了 IPv4 地址耗尽的问题。
简单的来说 NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。
那不是 N 个私有 IP 地址,你就要 N 个公有 IP 地址?这怎么就缓解了 IPv4 地址耗尽的问题?这不瞎扯吗?
普通的 NAT 转换没什么意义。
绝大多数的网络应用都是使用传输层协议 TCP 或 UDP 来传输数据的。
可以把 IP 地址 + 端口号一起进行转换。
用一个全球 IP 地址就可以了,这种转换技术就叫网络地址与端口转换 NAPT。
两个私有 IP 地址都转换 IP 地址为公有地址 120.229.175.121,但是以不同的端口号作为区分。
生成一个 NAPT 路由器的转换表,就可以正确地转换地址跟端口的组合,令客户端 A、B 能同时与服务器之间进行通信。
NAT 那么牛逼,难道就没缺点了吗?
由于 NAT/NAPT 都依赖于自己的转换表,因此会有以下的问题:
外部无法主动与 NAT 内部服务器建立连接,因为 NAPT 转换表没有转换记录。
转换表的生成与转换操作都会产生性能开销。
通信过程中,如果 NAT 路由器重启了,所有的 TCP 连接都将被重置。
如何解决 NAT 潜在的问题呢?
第一种就是改用 IPv6
第一种就是改用 IPv6
ICMP
互联网控制报文协议。
ICMP 功能都有啥?
确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
ICMP 类型
一类是用于诊断的查询消息,也就是「查询报文类型」
另一类是通知出错原因的错误消息,也就是「差错报文类型」
IGMP
组播地址,也就是 D 类地址,既然是组播,那就说明是只有一组的主机能收到数据包,不在一组的主机不能收到数组包,怎么管理是否是在一组呢?需要
IGMP
协议了。IGMP 是因特网组管理协议,工作在主机(组播成员)和最后一跳路由之间
IGMP 工作机制
IGMP 分为了三个版本分别是,IGMPv1、IGMPv2、IGMPv3。
常规查询与响应和离开组播组