摘要
IP协议提供的一种统一的地址格式。它为互联网上的每一个网络和主机分配一个逻辑地址所以IP地址也叫逻辑地址,用来屏蔽物理地址的差异,MAC地址每一个机器都有一个编码。IP地址是32位二进制数据分为4段每一段8位0~255来表示。通常是10进制的方式表示。凡是基于TCP/IP协议的智能设备都可以被分配IP地址。在同一个局域网中/本地局域网IP地址是唯一的。IP协议只是是网络之间的互联的协议。互联网/物联网的所有计算机网络实现相互通信的一套规则。规定了计算机在网络中进行通信时应当遵守的规则。所有设备只要是遵守IP协议就可以在网络中互联互通。
一、IP相关基础概念
IP在TCP/IP 参考模型中处于第三层,也就是网络层。网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。
1.1 网络层与数据链路层有什么关系呢?
其实很容易区分,在上⾯我们知道 IP 的作⽤是主机之间通信⽤的,而MAC 的作⽤则是实现直连的两个设备 之间通信,⽽ IP 则负责在没有直连的两个⽹络之间进⾏通信传输。源IP地址和⽬标IP地址在传输过程中是不会变化的,只有源 MAC 地址和⽬标 MAC ⼀直在变化。
1.2 IP的基础概念
在TCP/IP ⽹络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址,否则⽆法实现正常的通信。IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以⼆进制的⽅式处理的。而⼈类为了方便记忆采用了点分十进制的标记方法,也就是将 32 位 IP 地址以每 8 位为组,共分为4组,每组以.隔开,再将每组转换成⼗进制。
实际上,IP 地址并不是根据主机台数来配置的,而是网卡。像服务器、路由器等设备都是有 2 个以上的网卡,也 就是它们会有 2 个以上的 IP 地址。因此,让43亿台计算机全部连网其实是不可能的,更何况 IP 地址是由⽹络标识和主机标识这两个部分组 成的,所以实际能够连接到⽹络的计算机个数更是少了很多。
1.3 IP的分类
互联网诞生之初,IP 地址显得很充裕,于是计算机科学家们设计了分类地址。IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。
其中对于 A、B、C 类主要分为两个部分,分别是⽹络号和主机号。
广播地址的作用?
⼴播地址⽤于在同⼀个链路中相互连接的主机之间发送数据包。⼴播地址可以分为本地地⼴播和直接⼴播两种:
- 在本⽹络内⼴播的叫做本地⼴播。例如⽹络地址为 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类地址是没有主机号的,所以不可⽤于主机IP,D 类常被⽤于多播,E 类是预留的分类,暂时未使用。多播⽤于将包发送给特定组内的所有主机。由于⼴播⽆法穿透路由,若想给其他⽹段发送同样的包,就可以使⽤可以穿透路由的多播。
1.4 IP 地址与路由控制
IP地址的⽹络地址这⼀部分是⽤于进⾏路由控制。路由控制表中记录着⽹络地址与下⼀步应该发送⾄路由器的地址。在主机和路由器上都会有各⾃的路由器控制表。在发送 IP 包时,⾸先要确定 IP 包首部中的⽬标地址,再从路由控制表中找到与该地址具有相同⽹络地址的记录, 根据该记录将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 数据包转发到了⽬标主机。
环回地址是不会流向⽹络
环回地址是在同⼀台计算机上的程序之间进⾏⽹络通信时所使⽤的⼀个默认地址。 计算机使⽤⼀个特殊的 IP 地址 127.0.0.1 作为环回地址。与该地址具有相同意义的是⼀个叫做 localhost 的主机 名。使⽤这个 IP 或主机名时,数据包不会流向⽹络。
1.5 IP 分片与重组
每种数据链路的最⼤传输单元MTU都是不相同的,如 FDDI 数据链路 MTU4352、以太⽹的MTU是1500字节等。每种数据链路的 MTU 之所以不同,是因为每个不同类型的数据链路的使⽤⽬的不同。使⽤⽬的不同,可承载的 MTU 也就不同。其中,我们最常⻅数据链路是以太⽹,它的 MTU 是 1500 字节。那么当 IP 数据包⼤⼩⼤于 MTU 时, IP 数据包就会被分⽚。经过分⽚之后的 IP 数据报在被重组的时候,只能由⽬标主机进⾏,路由器是不会进⾏重组的。
假设发送⽅发送⼀个4000字节的⼤数据报,若要传输在以太网链路,则需要把数据报分⽚成 3 个小数据报进⾏传 输,再交由接收⽅重组成⼤数据报。
在分片传输中,⼀旦某个分片中丢失,则会造成整个IP数据报作废,所以 TCP 引⼊了 MSS 也就是在 TCP 层进⾏分⽚不由IP层分⽚,那么对于 UDP 我们尽量不要发送⼀个⼤于 MTU 的数据报文。
二、IP相关网络协议原理
2.1 DNS域名解析
那么实现这⼀技术的就是 DNS 域名解析,DNS 可以将域名⽹址⾃动转换为具体的 IP 地址。DNS 中的域名都是⽤句点来分隔的,比如www.server.com ,这⾥的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越⾼。 毕竟域名是外国⼈发明,所以思维和中国⼈相反,⽐如说⼀个城市地点的时候,外国喜欢从小到大的顺序说起 (如 XX 街道 XX 区 XX 市 XX 省),⽽中国则喜欢从⼤到⼩的顺序(如 XX 省 XX 市 XX 区 XX 街道)。 根域是在最顶层,它的下⼀层就是 com 顶级域,再下面是 server.com。
所以域名的层级关系类似⼀个树状结构: 根 DNS 服务器 顶级域 DNS 服务器(com) 权威 DNS 服务器(server.com)
根域的 DNS 服务器信息保存在互联⽹中所有的 DNS 服务器中。这样⼀来,任何 DNS 服务器就都可以找到并访问 根域 DNS 服务器了。因此,客户端只要能够找到任意⼀台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再⼀路顺藤摸⽠找到 位于下层的某台⽬标 DNS 服务器。
2.1.1 域名解析的工作流程
浏览器⾸先看⼀下⾃⼰的缓存⾥有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析⽂件 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 地址返回客户端,客户端和⽬标建⽴连接。
2.2 ARP协议与RARP协议
2.2.1 ARP协议
在传输⼀个IP数据报的时候,确定了源 IP 地址和⽬标 IP 地址后,就会通过主机「路由表」确定 IP 数据包下⼀ 跳。然⽽,⽹络层的下⼀层是数据链路层,所以我们还要知道「下⼀跳」的 MAC地址。由于主机的路由表中可以找到下⼀跳的 IP 地址,所以可以通过 ARP 协议,求得下⼀跳的 MAC 地址。
那么ARP又是如何知道对方的MAC地址的呢?
简单地说,ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。
- 主机会通过⼴播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
- 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包⾥的内容,如果 ARP 请求包中的⽬标 IP 地址与⾃⼰的 IP 地址⼀致,那么这个设备就将⾃⼰的 MAC 地址塞⼊ ARP 响应包返回给主机。
操作系统通常会把第⼀次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。 不过,MAC 地址的缓存是有⼀定期限的,超过这个期限,缓存的内容将被清除。
2.2.2 RARP协议
ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址。例如将打印机服 务器等⼩型嵌⼊式设备接⼊到⽹络时就经常会⽤得到。通常这需要架设⼀台 RARP 服务器,在这个服务器上注册设备的 MAC 地址及其 IP 地址。然后再将这个设备接 ⼊到⽹络,接着:
- 该设备会发送⼀条「我的 MAC 地址是XXXX,请告诉我,我的IP地址应该是什么」的请求信息。
- RARP 服务器接到这个消息后返回「MAC地址为 XXXX 的设备,IP地址为 XXXX」的信息给这个设备。
2.3 DHCP动态获取IP地址
DHCP 在⽣活中我们是很常见的了,我们的电脑通常都是通过 DHCP 动态获取 IP 地址,大大的省去了配IP信息繁琐的过程。
这 4 个步骤:
- 客户端⾸先发起 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 服务器分配的 IP 地址。如果租约的 DHCP IP 地址快期后,客户端会向服务器发送 DHCP 请求报⽂:
- 服务器如果同意继续租⽤,则⽤ DHCP ACK 报⽂进⾏应答,客户端就会延⻓租期。
- 服务器如果不同意继续租⽤,则⽤ DHCP NACK 报⽂,客户端就要停⽌使⽤租约的 IP 地址。
可以发现,DHCP 交互中,全程都是使⽤ UDP ⼴播通信。那如果 DHCP 服务器和客户端不是在同⼀个局域⽹内,路由器⼜不会转发⼴播包,那不是每个⽹络 都要配⼀个 DHCP 服务器?所以,为了解决这⼀问题,就出现了 DHCP 中继代理。有了 DHCP 中继代理以后,对不同⽹段的 IP 地址分配也 可以由⼀个 DHCP 服务器统⼀进⾏管理。
- DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,⽽ DHCP 中继代理在收到这个⼴播包以后,再以单 播的形式发给 DHCP 服务器。
- 服务器端收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包⼴播给 DHCP 客户端 。
因此,DHCP 服务器即使不在同⼀个链路上也可以实现统⼀分配和管理IP地址。
2.4 NAT网络地址转换
IPv4 的地址是⾮常紧缺的,在前⾯我们也提到可以通过⽆分类地址来减缓 IPv4 地址耗尽的速度,但是互联⽹的⽤ 户增速是⾮常惊⼈的,所以 IPv4 地址依然有被耗尽的危险。于是,提出了⼀种⽹络地址转换 NAT 的⽅法,再次缓解了 IPv4 地址耗尽的问题。 简单的来说 NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。
NAT当然有缺陷,肯定没有⼗全⼗美的⽅案。 由于 NAT/NAPT 都依赖于⾃⼰的转换表,因此会有以下的问题: 外部⽆法主动与 NAT 内部服务器建⽴连接,因为 NAPT转换表没有转换记录。 转换表的⽣成与转换操作都会产⽣性能开销。 通信过程中,如果NAT路由器重启了,所有的TCP连接都将被重置。
解决的⽅法主要有两种⽅法。
- 第⼀种就是改用IPv6可⽤范围非常大,以⾄于每台设备都可以配置⼀个公有 IP 地址,就不搞那么多花⾥胡哨的地址转换了,但是 IPV6普及速度还需要⼀些时间。
- 第⼆种 NAT 穿透技术 NAT 穿越技术拥有这样的功能,它能够让⽹络应⽤程序主动发现⾃⼰位于 NAT 设备之后,并且会主动获得 NAT 设 备的公有 IP,并为⾃⼰建⽴端⼝映射条⽬,注意这些都是 NAT设备后的应⽤程序⾃动完成的。 也就是说,在 NAT 穿透技术中,NAT设备后的应⽤程序处于主动地位,它已经明确地知道 NAT 设备要修改它外发 的数据包,于是它主动配合 NAT 设备的操作,主动地建⽴好映射,这样就不像以前由 NAT 设备来建⽴映射了。 说⼈话,就是客户端主动从 NAT 设备获取公有 IP 地址,然后⾃⼰建⽴端⼝映射条⽬,然后⽤这个条⽬对外通信, 就不需要 NAT 设备来进⾏转换了。
2.5 ICMP互联网控制报文协议与IGMP协议
ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报⽂协议。⽹络包在复杂的⽹络传输环境⾥,常常会遇到各种问题。当遇到问题的时候,总不能死个不明不⽩,没头没脑的作风不是计算机网络的风格。所以需要传出消息,报告遇到 了什么问题,这样才可以调整传输策略,以此来控制整个局⾯
ICMP 主要的功能包括:确认 IP 包是否成功送达⽬标地址、报告发送过程中 IP 包被废弃的原因和改善⽹络设置 等。 在 IP 通信中如果某个 IP 包因为某种原因未能达到⽬标地址,那么这个具体的原因将由 ICMP 负责通知。
如上图例⼦,主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器 2 未能发现主机 B 的存在, 这时,路由器 2 就会向主机 A 发送⼀个 ICMP ⽬标不可达数据包,说明发往主机 B 的包未能成功。 ICMP 的这种通知消息会使⽤ IP 进⾏发送 。 因此,从路由器 2 返回的 ICMP 包会按照往常的路由控制先经过路由器 1 再转发给主机 A 。收到该 ICMP 包的主机 A 则分解 ICMP 的⾸部和数据域以后得知具体发⽣问题的原因。
2.5.1 ICMP的类型
- ⼀类是⽤于诊断的查询消息,也就是查询报⽂类型
- 另⼀类是通知出错原因的错误消息,也就是差错报⽂类型
2.5.2 IGMP因特网组管理协
ICMP 跟 IGMP 是⼀点关系都没有的,就好像周杰与周杰伦的区别,⼤家不要混淆了。 在前⾯我们知道了组播地址,也就是 D 类地址,既然是组播,那就说明是只有⼀组的主机能收到数据包,不在⼀组 的主机不能收到数组包,怎么管理是否是在⼀组呢?那么,就需要 IGMP 协议了。
IGMP 是因特⽹组管理协议,⼯作在主机(组播成员)和最后⼀跳路由之间,如上图中的蓝⾊部分。
- IGMP 报⽂向路由器申请加⼊和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除⾮主机 通过 IGMP 加⼊到组播组,主机申请加⼊到组播组时,路由器就会记录
- IGMP 路由器表,路由器后续就会转 发组播包到对应的主机了。 IGMP 报⽂采⽤ IP 封装,IP 头部的协议号为 2,⽽且 TTL 字段值通常为 1,因为 IGMP 是⼯作在主机与连接 的路由器之间。
IGMP 工作作机制
常规查询与响应⼯作机制
- 路由器会周期性发送⽬的地址为 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地址号码 | 说明 |
网关地址 | 192.168.0.1/192.168.0.254 | 网关地址 |
广播地址 | 192.168.1.255 | |
子网掩码 | 255.255.0.0 | |
子网掩码 | 255.255.0.0 | |
子网掩码 | 255.255.255.0 | |
限制广播地址 | 255.255.255.255 | |
回环地址 | 127.0.0.1 | |
全部网段 | 0.0.0.0 | 表示任意一个地址 |
DNS地址 | 114.114.114.114 | |
DNS地址 | 233.5.5.5 | |
DNS地址 | 233.6.6.6 | |
DNS地址 | 1.2.4.8 | |
DNS地址 | 8.8.8.8 | |
DNS地址 | 202.106.0.20 | |
DHCP分配的地址 | 169.254.0.0 | 路由器假死(重启) |
组播地址 | 224.0.0.1 |
端口号 | 应用 | 说明 |
21 | FTP服务 | |
22 | SSH服务 | |
23 | Telent服务 | |
25 | SMTP服务 | 邮件协议 |
53 | DNS服务 | |
109 | POP2服务 | |
110 | POP3服务 | |
143 | IMAP服务 | |
465 | SMTPS服务 | SSL协议 |
995 | POP3S服务 | SSL协议 |
993 | IMAPS服务 | SSL协议 |
80 | HTTP服务 | |
443 | HTTPS服务 | |
3306 | MYSQL服务 | |
3389 | 远程桌面 | |
8080 | 代理服务(tomcat) | |
6379 | Redis服务端口 |