小林图解网络IP篇
1. IP基础知识
IP 的作用是主机之间通信用的,而MAC 的作用则是实现「直连」的两个设备之间通信,而IP 则负责在「没有直连」的两个网络之间进行通信传输。
IP 地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有 2 个以上的网卡,也就是它们会有 2 个以上的 IP 地址 。使用NAT可以增加计算机连接数。
- 主机号全为1指定网络下的所有主机,用于广播。
- 主机号全为0指定某个网络地址,不能分配给主机。
存在的缺点:
- 同一网络下没有地址层次,也就是不能分配子网。
- 不能很好的与现实网络匹配,C类地址主机数太少,只有255,B类地址主机又太多,浪费很多;
正因为 IP 分类存在许多缺点,所以后面提出了无分类地址的方案,即 CIDR
在 A、 B、 C 分类地址,实际上有分公有 IP 地址和私有 IP 地址。
IP分片和重组:
每种数据链路的最大传输MTU都是不相同的,如以太网的MTU是1500字节等。当IP数据包大于MTU时,IP数据包就会被分片。
但是存在一个问题,就是一旦某个分片丢失,会造成整个IP数据包作废,因此TCP引入了MSS,也就是在TCP层就进行分片,不在IP层进行,对于UDP,只能人为控制尽量不发送大于MTU的数据报文。
IPV6基本认识:
IPV4地址是32位的,IPV6为128位的,此外IPV6还有更好的安全性和扩展性。
- IPv6 可自动配置,即使没有 DHCP 服务器也可以实现自动分配IP地址,真是便捷到即插即用啊。
- IPv6 包头包首部长度采用固定的值 40 字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能。
- IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性。
IPV6单播地址类型:
对于一对一通信的 IPv6 地址,主要划分了三类单播地址,每类地址的有效范围都不同。
- 在同一链路单播通信,不经过路由器,可以使用链路本地单播地址, IPv4 没有此类型
- 在内网里单播通信,可以使用唯一本地地址,相当于 IPv4 的私有 IP
- 在互联网通信,可以使用全局单播地址,相当于 IPv4 的公有 IP
IPV4和IPV6首部差异比较:
IPv6 相比IPv4的首部改进:
- 取消了首部校验和字段。 因为在数据链路层和传输层都会校验,因此 IPv6 直接取消了 IP 的校验。
- 取消了分片/重新组装相关字段。 分片与重组是耗时的过程, IPv6 不允许在中间路由器进行分片与重组,这种操作只能在源与目标主机,这将大大提高了路由器转发的速度。
- 取消选项字段。 选项字段不再是标准 IP 首部的⼀部分了,但它并没有消失,而是可能出现在 IPv6 首部中的「下⼀个首部」指出的位置上。删除该选项字段使的 IPv6 的首部成为固定长度的 40 字节。
IP协议相关技术
DNS协议:将域名网址自动转换为具体的IP地址,在域名中,越靠右的位置表示其层级越高。
域名解析的工作原理:浏览器首先看⼀下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件 hosts ,如果还是没有,就会 DNS 服务器进行查询。
ARP协议:根据主机路由表确定IP数据包下一跳。因外网络层的下一层是数据链路层,因此可以根据IP地址,得到MAC地址。具体流程为:
- 主机广播ARP请求,包含了想知道MAC地址的主机IP地址。
- 当同个链路中的所有设备收到ARP请求时,如果请求包的目标IP是自己的IP,就将MAC地址塞入ARP响应包返回主机。
RARP是已知MAC地址求IP地址,在将打印机等小型嵌入式设备接入到网络时会用到。
DHCP协议:动态分配IP地址
- 客户端发送DHCP发现(DHCP DISCOVERY)报文,使用UDP广播通信,源地址是0.0.0.0,目的地址是255.255.255.255。
- DHCP 服务器收到 DHCP 发现报文时,用DHCP 提供报文(DHCP OFFER) 向客户端做出响应。该报文仍然使用IP广播地址 255.255.255.255,该报文信息携带服务器提供可租约的 IP 地址、子网掩码、默认网关、 DNS 服务器以及 IP 地址租用期。
- 客户端收到⼀个或多个服务器的 DHCP 提供报文后,从中选择⼀个服务器,并向选中的服务器发送DHCP 请求报文(DHCP REQUEST)进行响应,回显配置的参数。
- 最后,服务端用DHCP ACK 报文对 DHCP 请求报文进行响应,应答所要求的参数。
NAT协议:网络地址转换协议,缓解IPV4地址耗尽的问题。
实际上就是把私有IP地址转换为公有IP地址,但是普通的转换没有什么意义。
可以将IP地址+端口号一起转换,即NAPT,将私有不同IP映射为公有相同IP不同端口号。
ICMP协议:Internet Control Message Protocol,也就是互联网控制报文协议
ICMP 主要的功能包括: 确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。 ICMP报文封装在IP包里面,是IP协议的助手。
ICMP主要分为两大类:
一类用于诊断的查询消息,也就是查询报文类型,回送请求和回送应答,类型0和8,PING就是利用这个消息实现的。
一类通知出错原因的错误消息,也就是差错报文类型
IGMP协议:组播成员管理协议
- 用来在接收者主机和直接相邻的组播路由器之间建立和维护组播组成员的关系
- 常规查询和相应
离开组播组:
组播地址不是用于机器IP地址的,因为组播地址没有网络号和主机号,所以跟DHCP没关系。组播地址一般是用于UDP协议,机器发送UDP组播数据时,目标地址填的是组播地址,那么在组播组内的机器都能收到数据包。
是否加入组播组和离开组播组,是由socket一个接口实现的,主机ip是不用改变的。
有一个利用ICMP差错报文类型的应用叫traceroute,他的作用有:
- 设置特殊的TTL,以此递增 ,来追踪去往目的地沿途经过的路由器,ICMP报文会有源端的IP地址,这样就可以拿到所有路由器的MAC地址。
- 故意设置不分片,从而确定MTU。发送时IP首部故意不分片,由ICMP通知下一次MTU的大小。
Ping 127.0.0.1时实际上不会经过真实的网卡,而是经过一个虚拟的网卡,本质上是一个挂在这本机的各种消息的网卡,消息发送到这个链表时,会再触发一个软中断。
Ping回环地址和本地地址都不会走真正的网卡,都是走的本地回环接口。
- 127.0.0.1 是回环地址。 localhost 是域名,但默认等于 127.0.0.1 。
- ping 回环地址和 ping 本机地址,是⼀样的,走的是lo0 “假网卡”,都会经过网络层和数据链路层等逻辑,将数据插入到⼀个链表后就软中断通知 ksoftirqd 来进行收数据的逻辑, 压根就不出网络。所以断网了也能 ping 通回环地址。
- 如果服务器 listen 的是 0.0.0.0,表示本机的所有IP地址,那么此时用127.0.0.1 和本机地址都可以访问到服务。