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组,每组之间用点(.)隔开,再将每组都用十进制的方式表示出来。

img

2.2 IP地址的分类

img

ABC类地址

ABC类地址由两个部分组成:网络号和主机号,前面的0,10,110是用于区分这三类地址的最快捷的方式。

img

其对应的最大主机数的计算公式为:2n-2, 其中n为主机号的位数。减去2的原因是因为有两个特殊ip地址不能够被使用:

  • 主机号全为 1 指定某个网络下的所有主机,用于广播
  • 主机号全为 0 指定某个网络

DE类地址

img

因为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

子网掩码方式获取主机号:

img

子网掩码还可以获取子网网络号,可以对网络层级做到进一步划分。

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 地址中只允许出现一次两个连续的冒号。

img

IPV6的地址类型

img

IPV4和IPV6首部的对比差异

img

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 服务器进行查询,查询的过程如下:

  1. 客户端向本地DNS服务器发送请求,询问目标域名的IP
  2. 本地DNS服务器收到客户端的请求后,在自己的缓存中查找,查找得到则直接返回,查找不到则向根域名服务器进行询问。

根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。

  1. 根域名服务器收到请求后,根据后缀找到顶级域名服务器地址,将其发给本地DNS服务器。
  2. 本地DNS服务器根据获得的顶级域名服务器地址,对其发送请求,顶级域名服务器地址将域名查询之后,发给客户端对应的权威DNS服务器地址。
  3. 本地DNS服务器根据获得的权威 DNS 服务器地址,对其发送请求,权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
  4. 本地 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 包被废弃的原因和改善网络设置等。

img

查询报文:回送请求和回送响应是查询报文的两种,主要的作用是用来确定发送的数据包是否到达对端的一种方式

差错报文:相当于我们平时编程语言中的异常

  • 目标不可达:类似于404,可能是网络不可达,可能是端口不可达,可能是主机不可达等

    • 网络不可达代码为 0
    • 主机不可达代码为 1
    • 协议不可达代码为 2
    • 端口不可达代码为 3
    • 需要进行分片但设置了不分片位代码为 4
  • 原点抑制:使用低网速传输的时候可能会出现网络拥堵情况,这时发送一个原点抑制的报文,可以增大 IP 包的传输间隔,减少网络拥堵的情况。

4.扩展知识

4.1 ICMP具体工作原理

https://xiaolincoding.com/network/4_ip/ping.html#ip%E5%8D%8F%E8%AE%AE%E7%9A%84%E5%8A%A9%E6%89%8B-icmp-%E5%8D%8F%E8%AE%AE

不想写了。。。认认真真的看过了!

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不通的