IP
1.IP基本认识
1.1 IP的基础概念
是位于网络层的一个协议,实现主机和主机之间的通信,也叫点对点通信。
通过源IP地址和目标IP地址这两个关键信息,在众多路由器的转发中实现通信。
路由器实现转发机制:当一台主机朝网络中发送数据包时,他会将目标IP地址设置为接收方的IP地址。随后传给本地网络,本地网络中的路由器通过检查数据包中的目标IP地址,并与自己的路由表进行匹配。如果发现目标ip地址时自己的网络,就会转发回去,否则,转发到路由表上对应的路由器。
具体转发机制:https://zhuanlan.zhihu.com/p/145946764?utm_id=0
1.2 IP和MAC的区别
- 位置不同:MAC位于数据链路层,IP位于网络层
- 管理内容不同:IP管理的是网络间两台没有直连主机之间的位置,数据链路层强调的是两台设备在物理意义上的直接连接
- 也就是说,数据链路层可以是主机和路由器之间的连接,而IP只能是主机和主机之间的连接.而ip主机和主机之间的连接中间还隔了若干路由器。
2.IP地址的基础知识
2.1 IP地址的基础定义
在 TCP/IP 网络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址,否则无法实现正常的通信。
针对IPV4协议的IP地址进行分析
点分十进制
IPV4协议中的IP地址是32位的,人类为了方便记忆,使用点分十进制的方法对ip地址进行了简化,即将32位IP地址每八位划分为1组,每组之间用点(.
)隔开,再将每组都用十进制的方式表示出来。
2.2 IP地址的分类
ABC类地址
ABC类地址由两个部分组成:网络号和主机号,前面的0
,10
,110
是用于区分这三类地址的最快捷的方式。
其对应的最大主机数的计算公式为:2n-2
, 其中n为主机号的位数。减去2的原因是因为有两个特殊ip地址不能够被使用:
- 主机号全为 1 指定某个网络下的所有主机,用于广播
- 主机号全为 0 指定某个网络
DE类地址
因为DE类地址中没有主机号,所以其不可以用于主机ip。
- 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地址都会收到这个信息,同一个链路中相互连接的主机之间发送数据包
组播:将信息发送给特定组内的所有主机,也就是说广播比组播的范围更加广泛,但是考虑到安全性的话,组播是更为优秀的。
由于广播无法穿透路由,若想给其他网段发送同样的包,就可以使用可以穿透路由的多播。
2.3 无分类地址 CIDR
针对于ABC类IP地址最大主机数分配不均匀的问题,提出了一种新的地址分类方式。
表示形式 a.b.c.d/x,其中 /x 表示前 x 位属于网络号, x 的范围是 0 ~ 32
子网掩码方式获取主机号:
子网掩码还可以获取子网网络号,可以对网络层级做到进一步划分。
2.4 IP地址一些特性
路由控制
计算机使用一个特殊的 IP 地址 127.0.0.1 作为环回地址。与该地址具有相同意义的是一个叫做 localhost 的主机名。使用这个 IP 或主机名时,数据包不会流向网络。
通过路由器和路由表,首先数据会先传到本地的路由器,其根据传输过来数据报文中的目标ip地址,对比自己的路由表,找到这份数据应该去向何方,并将其传向对应的路由器。
分片与重组
那么当 IP 数据包大小大于 MTU 时, IP 数据包就会被分片。
经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行,路由器是不会进行重组的。
在分片传输中,一旦某个分片丢失,则会造成整个 IP 数据报作废,所以 TCP
引入了MSS
也就是在 TCP 层进行分片不由 IP 层分片,那么对于 UDP
我们尽量不要发送一个大于 MTU
的数据报文。
2.5 IPV6 & IPV4
IPV6出现的原因:IPV4是32
位的,其能够承受的IP地址只有232(约42亿)个IP地址,是远远不能够满足人类的需求的。所以,出现了具有128
位的IPV6地址
IPV6的表示方式
每十六位为一个单位,用:
分割开,如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号 「::」隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。
IPV6的地址类型
IPV4和IPV6首部的对比差异
IPv6 相比 IPv4 的首部改进:
- 取消了首部校验和字段。 因为在数据链路层和传输层都会校验,因此 IPv6 直接取消了 IP 的校验。
- 取消了分片/重新组装相关字段。 分片与重组是耗时的过程,IPv6 不允许在中间路由器进行分片与重组,这种操作只能在源与目标主机,这将大大提高了路由器转发的速度。
- 取消选项字段。 选项字段不再是标准 IP 首部的一部分了,但它并没有消失,而是可能出现在 IPv6 首部中的「下一个首部」指出的位置上。删除该选项字段使的 IPv6 的首部成为固定长度的 40 字节。
3.IP相关协议技术
3.1 DNS域名解析
域名之间的层级关系
DNS中的域名是用.
进行分割的,越往右边表示层级越高,如www.baidu.com
表示一共有三个层级域名
分别为:com
, baidu.com
, www.baidu.com
- 根 DNS 服务器
- 顶级域 DNS 服务器(com)
- 权威 DNS 服务器(baidu.com)
域名解析的全过程
浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件 hosts,如果还是没有,就会 DNS 服务器进行查询,查询的过程如下:
- 客户端向本地DNS服务器发送请求,询问目标域名的IP
- 本地DNS服务器收到客户端的请求后,在自己的缓存中查找,查找得到则直接返回,查找不到则向根域名服务器进行询问。
根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
- 根域名服务器收到请求后,根据后缀找到顶级域名服务器地址,将其发给本地DNS服务器。
- 本地DNS服务器根据获得的顶级域名服务器地址,对其发送请求,顶级域名服务器地址将域名查询之后,发给客户端对应的权威DNS服务器地址。
- 本地DNS服务器根据获得的权威 DNS 服务器地址,对其发送请求,权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
- 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
总结:本地 DNS与若干DNS服务器的无限问答,以及本地DNS的无数次寻找,最后找到了IP地址。
3.2 ARP协议和RARP协议
- ARP:已知IP地址可以求得MAC地址
- RARP:已知MAC地址可以求得IP地址
ARP协议如何得知MAC地址
- 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
- 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。
操作系统通常会把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。
3.3 DHCP动态获取IP地址
- 客户端首先发起 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 地址。
简化来讲,就是客户端去求职BOSS海投,然后看上这个客户端的服务端就给他发送offer,这个offer告诉他我能给你提供的条件(没错,不用面试),然后客户端选来选去,最后只回了一家,签约成功。之后服务端在发个合同入职须知什么的,结束。这是多少人梦寐以求的状态。
如果租约的 DHCP IP 地址快期后,客户端会向服务器发送 DHCP 请求报文:
- 服务器如果同意继续租用,则用 DHCP ACK 报文进行应答,客户端就会延长租期。
- 服务器如果不同意继续租用,则用 DHCP NACK 报文,客户端就要停止使用租约的 IP 地址。
3.4 NAT网络地址转换
两个私有 IP 地址都转换 IP 地址为统一的公有地址,但是以不同的端口号作为区分。
生成一个 NAPT 路由器的转换表,就可以正确地转换地址跟端口的组合,令客户端 A、B 能同时与服务器之间进行通信。
这种转换表在 NAT 路由器上自动生成。例如,在 TCP 的情况下,建立 TCP 连接首次握手时的 SYN 包一经发出,就会生成这个表。而后又随着收到关闭连接时发出 FIN 包的确认应答从表中被删除。
缺点:
- 外部无法主动与 NAT 内部服务器建立连接,因为 NAPT 转换表没有转换记录。
- 转换表的生成与转换操作都会产生性能开销。
- 通信过程中,如果 NAT 路由器重启了,所有的 TCP 连接都将被重置。
3.5 ICMP互联网控制报文协议
ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
查询报文:回送请求和回送响应是查询报文的两种,主要的作用是用来确定发送的数据包是否到达对端的一种方式
差错报文:相当于我们平时编程语言中的异常
目标不可达:类似于404,可能是网络不可达,可能是端口不可达,可能是主机不可达等
- 网络不可达代码为 0
- 主机不可达代码为 1
- 协议不可达代码为 2
- 端口不可达代码为 3
- 需要进行分片但设置了不分片位代码为 4
原点抑制:使用低网速传输的时候可能会出现网络拥堵情况,这时发送一个原点抑制的报文,可以增大 IP 包的传输间隔,减少网络拥堵的情况。
4.扩展知识
4.1 ICMP具体工作原理
不想写了。。。认认真真的看过了!
4.2 ping 127.0.0.1
断网了还能ping的通127.0.0.1吗
可以,因为还没走出到网络,客户端发出网络请求会第一步先走到本地路由器,本地路由器如果判断是自己的本地地址就会直接返回,如果不是再去对比自己的路由表。本地路由器是不需要网络的,所以我们发现ping 127.0.0.1不需要联网
127.0.0.1 和 localhost 以及 0.0.0.0 有区别吗
localhost
是一个域名,相当于baidu.com
, 其ip地址为127.0.0.1,所以意义上有区别但是实际使用是没什么区别的- 0.0.0.0 , 表示本机上的所有IPV4地址。是ping不通的