IP笔记汇总
总览
IPv4和IPv6、IP和路由、广播多播、子网掩码、网关
# 什么是IP
IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。
网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。
IP 的作用是主机之间通信用的,而 MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。
![](/assets/img/image-20230314104809024.5217b0cc.png)
![](/assets/img/image-20230314104954004.f791b946.png)
源IP地址和目标IP地址在传输过程中是不会变化的(前提:没有使用 NAT 网络),只有源 MAC 地址和目标 MAC 一直在变化。
计算机网络中需要数据链路层和网络层才能实现向最终目标地址的通信。
# IPv4
在 TCP/IP 网络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址,否则无法实现正常的通信。
IP 地址(IPv4 地址)由 32
位正整数来表示,IP 地址在计算机是以二进制的方式处理的。
![](/assets/img/image-20230314105348714.37a41141.png)
也就说,最大允许 2^32 = 43 亿台计算机连接到网络。
而世界上计算机的数量肯定远不止43亿台,但有一种可以更换 IP 地址的技术 NAT
,使得可连接计算机数超过 43 亿台
# IPv4地址类型
互联网诞生之初,IP 地址显得很充裕,于是计算机科学家们设计了分类地址。
IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。
![](/assets/img/image-20230314110511775.742fd723.png)
![](/assets/img/image-20230314151208217.3eafee80.png)
最大主机个数,就是要看主机号的位数,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数:2^8 - 2 = 254
减二是因为在 IP 地址中,有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址。
- 主机号全为 1 指定某个网络下的所有主机,用于广播
- 主机号全为 0 指定某个网络
因此,在分配过程中,应该去掉这两种情况。
![](/assets/img/image-20230314152217561.2450a98a.png)
D 类和 E 类地址是没有主机号的,所以不可用于主机 IP,D 类常被用于多播,E 类是预留的分类,暂时未使用。
IP地址分类好处
不管是路由器还是主机解析到一个 IP 地址时候,我们判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址。
IP地址分类缺点
同一网络下没有地址层次,比如一个公司里用了 B 类地址,但是可能需要根据生产环境、测试环境、开发环境来划分地址层次,而这种 IP 分类是没有地址层次划分的功能,所以这就缺少地址的灵活性。
不能很好的与现实网络匹配。C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个网吧都不够用。而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。
这两个缺点,都可以在 CIDR
无分类地址解决。
# 公有 IP 地址和私有 IP 地址
在 A、B、C 分类地址,实际上有分公有 IP 地址和私有 IP 地址
平时我们办公室、家里、学校用的 IP 地址,一般都是私有 IP 地址。因为这些地址允许组织内部的 IT 人员自己管理、自己分配,而且可以重复。因此,你学校的某个私有 IP 地址和我学校的可以是一样的。
公有 IP 地址基本上要在整个互联网范围内保持唯一。公有 IP 地址是由 ICANN
组织管理,中文叫「互联网名称与数字地址分配机构」。
IANA 是 ICANN 的其中一个机构,它负责分配互联网 IP 地址,是按洲的方式层层分配。
# 广播
广播地址用于在同一个链路中相互连接的主机之间发送数据包。
当主机号全为 1 时,就表示该网络的广播地址。例如把 172.20.0.0/16
用二进制表示如下:
10101100.00010100.00000000.00000000
将这个地址的主机部分全部改为 1,则形成广播地址:
10101100.00010100.11111111.11111111
再将这个地址用十进制表示,则为 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 类地址,其前四位是 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 为本地管理组播地址,可供内部网在内部使用,仅在特定的本地范围内有效。
# 无分类地址 CIDR
这种方式不再有分类地址的概念,32 比特的 IP 地址被划分为两部分,前面是网络号,后面是主机号。
表示形式 a.b.c.d/x
,其中 /x
表示前 x 位属于网络号, x 的范围是 0 ~ 32
,这就使得 IP 地址更加具有灵活性。
比如 10.100.122.2/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是网络号,剩余的 8 位是主机号
# 子网掩码
一种划分网络号与主机号形式,那就是子网掩码,掩码的意思就是掩盖掉主机号,剩余的就是网络号。将子网掩码和 IP 地址按位计算 AND,就可得到网络号。
![](/assets/img/image-20230314164841316.28ae4709.png)
子网掩码还有一个作用,那就是划分子网。子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址
![](/assets/img/image-20230314165338049.47b828a7.png)
子网网络地址被划分成 2 位,那么子网地址就有 4 个,分别是 00、01、10、11, 列举其中两个
![](/assets/img/image-20230314165535761.4ecbb125.png)
![](/assets/img/image-20230314165851240.50c5900a.png)
![](/assets/img/image-20230314165701448.08fa04c0.png)
为什么要分离网络号和主机号?
因为两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址是否相同。如果网络地址相同,表明接受方在本网络上,那么可以把数据包直接发送到目标主机。路由器寻址工作中,也就是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。
当局域网设备通信时,通过IP地址和子网掩码,就可以判断发送与接收的设备是否处于同一网段。如果两个设备处在同一网段,发送和接收数据只需要经过交换机,不需要经过路由器。不同网段的设备收发数据就需要经过路由器,这时就必须用到网关。
# 网关
网关它可以是路由器,交换机或者是PC。在同一网段之内进行通信,是不需要将网关介入其中,只有当主机个非本网段设备进行通信的时候,才需要将数据包全部发给网关设备,再经由网关设备进行转发或者是有路由处理等。只要连接两个不同的网络的设备都可以叫网关
网关实质上是一个网络通向其他网络的IP地址,网关在网段内的可用IP中选一个,不过,一般用的是第1个和最后一个。
例如:网络A的IP地址范围是192.168.1.1~192.168.1.254,子网掩码是255.255.255.0,如果需要与其它网段通信,那么它的网关可以设置为192.168.1.1。 网关实现通信:没有路由器的情况下,两个网段不能通信。网络A中的主机向外发包时,首先判断目的IP地址与自己是否在同一网段,如果发现目的主机不在本地网络中,就把数据包转发给自己的网关,再由网关转发给网络B的网关,再转发到网络B的目的主机。 只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信
网关这种设备它主要是用来连接两种不同的网络,同时,网关它还能够同时与两边的主机之间进行通信。但是两边的主机是不能够直接进行通信,是必须要经过网关才能进行通信。网关的工作是在应用层当中。
路由器它是属于网络层设备,通常是以包为单位进行数据的发送。在路由器的子接口,是有分割广播域的作用,所以当我们用交换机做VLAN以后,都是要在路由器上做一个三层的路由
路由器它可以进行数据格式的转换,连通不同的网络和信息传输作用,成为不同于协议之间的网络互连的必要设备。
本质区别
路由器:通过为各种网络安装路由信息并根据目标地址路由转发数据包和各种内部网络管理服务。
网关:区分什么是内部网络和什么是外部网络,并管理协议、过滤内外网络之间的通信等。
# IP 地址与路由控制
IP地址的网络地址这一部分是用于进行路由控制。
路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在主机和路由器上都会有各自的路由器控制表。
在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配
![](/assets/img/image-20230314174550652.039552ec.png)
- 主机 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 数据包转发到了目标主机
# 0.0.0.0
在路由器配置中可用0.0.0.0/0表示默认路由,作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去。严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有未知的主机和目的网络。这里的“未知”是指在本机的路由表里没有特定条目指明如何到达
# 主机回环地址
环回地址是不会流向网络
凡是以127
开头的IP地址,都是回环地址(Loop back address),其所在的回环接口一般被理解为虚拟网卡,并不是真正的路由器接口。我们在主机上发送给127
开头的IP地址的数据包会被发送的主机自己接收,根本传不出去,外部设备也无法通过回环地址访问到本机。
相比127.0.0.1,localhost具有更多的意义。localhost是个域名,而不是一个ip地址。之所以我们经常把localhost与127.0.0.1认为是同一个是因为我们使用的大多数电脑上都讲localhost指向了127.0.0.1这个地址。但是localhost的意义并不局限于127.0.0.1。
localhost是一个域名,用于指代this computer或者this host,可以用它来获取运行在本机上的网络服务。
在大多数系统中,localhost被指向了IPV4的127.0.0.1和IPV6的::1。
# IP 分片与重组
什么是MTU (见TCP分割数据小节)
每种数据链路的最大传输单元 MTU
都是不相同的,如 FDDI 数据链路 MTU 4352、以太网的 MTU 是 1500 字节等。每种数据链路的 MTU 之所以不同,是因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。
其中,我们最常见数据链路是以太网,它的 MTU 是 1500
字节。那么当 IP 数据包大小大于 MTU 时, IP 数据包就会被分片。经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行,路由器是不会进行重组的。
假设发送方发送一个 4000 字节的大数据报,若要传输在以太网链路,则需要把数据报分片成 3 个小数据报进行传输,再交由接收方重组成大数据报。
![](/assets/img/image-20230314175903377.ba49d82a.png)
在分片传输中,一旦某个分片丢失,则会造成整个 IP 数据报作废,所以 TCP 引入了 MSS
也就是在 TCP 层进行分片不由 IP 层分片,那么对于 UDP 我们尽量不要发送一个大于 MTU
的数据报文。
# IPv6
IPv6 的地址是 128
位的,这可分配的地址数量是大的惊人,除了有更多的地址之外,还有更好的安全性和扩展性,但是因为 IPv4 和 IPv6 不能相互兼容,所以不但要我们电脑、手机之类的设备支持,还需要网络运营商对现有的设备进行升级
- IPv6 可自动配置,即使没有 DHCP 服务器也可以实现自动分配IP地址,便捷到即插即用啊。
- IPv6 包头包首部长度采用固定的值
40
字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能。 - IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性。
IPv6 地址长度是 128 位,是以每 16 位作为一组,每组用冒号 :
隔开。如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号 ::
隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号
# IPv6地址类型
单播地址,用于一对一的通信
对于一对一通信的 IPv6 地址,主要划分了三类单播地址,每类地址的有效范围都不同。
- 在同一链路单播通信,不经过路由器,可以使用链路本地单播地址,IPv4 没有此类型
- 在内网里单播通信,可以使用唯一本地地址,相当于 IPv4 的私有 IP
- 在互联网通信,可以使用全局单播地址,相当于 IPv4 的公有 IP
组播地址,用于一对多的通信
任播地址,用于通信最近的节点,最近的节点是由路由协议决定
没有广播地址
![](/assets/img/image-20230315075703178.7c25b0ae.png)
IPv4和IPv6首部
Traffic Class 占8bit 交通类别:指示数据包的类别或优先级,可以帮助路由器跟据数据包的优先级处理流量,如果路由器发生拥塞,则优先级最低的数据包将被抛弃
Flow Label 占20bit 流标签: 指示数据包属于哪个特定序列(流),用数据包的源地址目的地址流标签标识一个流
Payload Length 占16bit 有效负载长度: 最大值为65535字节,包括扩展头部、上层(传输层)数据的长度
Next Header 占8bit 下一个头部: 指示扩展头部的类型、上层数据包的协议类型如TCP、UDP
Hop Limit 占8bit 跳数限制: 与IPv4数据包的TTL相同
- 取消了首部校验和字段。 因为在数据链路层和传输层都会校验,因此 IPv6 直接取消了 IP 的校验。
- 取消了分片/重新组装相关字段。 分片与重组是耗时的过程,IPv6 不允许在中间路由器进行分片与重组,这种操作只能在源与目标主机,这将大大提高了路由器转发的速度。
- 取消选项字段。 选项字段不再是标准 IP 首部的一部分了,但它并没有消失,而是可能出现在 IPv6 首部中的「下一个首部」指出的位置上。删除该选项字段使的 IPv6 的首部成为固定长度的
40
字节。
# 与IP相关的协议
# 参考
小林coding
计算机网络-自顶向下方法
图解TCP/IP