5.1 IP 基础知识全家桶
IP 基本认识
- 网络层:实现主机之间的点对点通信,可以在没有直连设备之间,MAC 是在直连之间(IP 找到之后也算直连)。
- 一个网卡一个IP,一台主机可能有多个 IP 地址
- IPv4:
32位正整数,8位一组,每组以「.」隔开,分为5类- 第一位是0,为A类(后24位主机号),否则
- 10.xx是私有地址
- 第二位是0,为B类(后16位主机号),否则
- 172.16.xx - 172.31.xx 是私有地址
- 第三位是0,为C类(后8位主机号),否则
- 192.168.xx 是私有地址
- 第四位是0,为D类,后28位组播地址,将包发给特定组内所有地址,否则
- 通常用于UDP,表示发送给所有主机
- 第五位是0,为E类,待定
- 主机号全1,表示网络下的所有主机,广播地址
- 本地广播,全1的IP「255.255.255.255」,不走路由传播
- 主机号全0,指定某个网络
- 可以看到A类主机太多,C类太少
- CIDR(无分类地址):通过子网掩码确定网络号和主机号,如
10.100.122.2/24,前24是网络号,后8位是主机号- 在当前网络中通过子网再划分网络,比如C类地址,可以设置掩码为26,表示24位网络号,2位子网号,6位主机号,更加灵活
- 环回地址:
172.0.0.1默认等价于localhost(如果host表没有被修改过),使用这个 IP 时,数据包不会流向网络,其他的通过路由器进行下跳传播。 0.0.0.0:不能作为目标地址,可以作为源地址进行监听,表示监听本地所有IP,通常用于nginx监听,或者应用的监听IP
- 第一位是0,为A类(后24位主机号),否则
- IPv6:
128位, 16 位一组, 每组用冒号「:」隔开,出现连续 0 可以省略用「::」隔开,只能出现一次两个连续冒号,否则地址不明确- 可以不需要 DHCP 生成 IPv6 地址
- 环回地址:
::1
- IP分片:IP最大传输1500字节,大于会进行分片,目标主机重组。
- IP 过滤:阻止或者允许特定 IP 访问。
- 获取客户端真实 IP:
- X-Forwarded-For请求头:但是可以被伪造,且如果经历多个代理服务器,会有多个 IP,只适用于 HTTP 和 SMTP 协议。
IP 协议相关技术
DNS
DNS (domain name system,域名解析):将域名网址自动转换为具体的 IP 地址
域名层级,越靠右的位置表示其层级越高,如
.com、.cn就是顶级域- 解析路径:本地服务器->权威服务器(
server.com)->顶级服务器(.cn)->根服务器(.),ISP(互断网服务提供商)的 DNS 服务器不在范畴内,只是缓存作用- 递归:上面的路径
- 直接:直接从最上级开始问,相反的路径
- 根服务器的信息保存在所有的DNS服务器中
- 解析路径:本地服务器->权威服务器(
应用层协议,可以在 UDP 或者 TCP 协议之上运行,端口为 53
URL中有:
- 协议:一般是http或者https
- 域名:解析IP地址用
- 端口:默认http为80,https为443
- 资源路径:域名(端口)后面紧接着的,第一个
/开始的,是服务器上的资源路径 - 参数:一般是对于get请求,通过
?拼接,用 & 连接不同参数,使用key=value进行表示 - 锚点:要访问的页面大部分都多于一页,其定位作用,相当于一个小书签,以
#开头,并且不会作为请求的一部分发送给服务端。
这个 域名<->IP 对应关系多级缓存
- 浏览器自身缓存
- 操作系统缓存
- hosts文件缓存
- 本地DNS服务器缓存
- 当然这些缓存有过期时间
DNS 劫持了解吗?如何应对?
DNS 劫持是一种网络攻击,它通过修改 DNS 服务器的解析结果,使用户访问的域名指向错误的 IP 地址,从而导致用户无法访问正常的网站,或者被引导到恶意的网站。DNS 劫持有时也被称为 DNS 重定向、DNS 欺骗或 DNS 污染。DNS 劫持详细介绍可以参考:黑客技术?没你想象的那么难!——DNS 劫持篇。
路由器作为互联设备,具有多个接口,每个接口同样也应该具备不重复的 IP 地址和 MAC 地址。因此,在讨论 ARP 表时,路由器的多个接口都各自维护一个 ARP 表,而非一个路由器只维护一个 ARP 表。
ARP
ARP(Address Resolution Protocol 地址解析协议)
- 由IP地址解析MAC(Media Access Control Address,媒体访问控制地址) 地址。
- 每个设备一个 MAC 地址,不会重复,且和设备一直绑定。
- 主机通过广播发送 ARP 请求,携带了想要知道的 MAC 地址的主机 IP。
- IP 符合自己的主机将自己的 MAC 地址放入 ARP 响应包中。
- 广播问询,单播响应
- 这个映射关系会在操作系统缓存,但是有过期时间。
- 如果目标 IP 不在本子网内部,会通过路由器进行转发获取。 RARP(Reverse Address Resolution Protocol 反向地址转换协议)正好相反,它是已知 MAC 地址求 IP 地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到(无法使用DHCP或者没有任何输入接口的设备)
DHCP
DHCP(Dynamic Host Configuration Protocol 动态主机配置协议)
- 动态获取 IP 地址,使用 UDP 广播通信
- 向 DHCP 服务器请求 IP 地址(包括地址、子网掩码、默认网关、DNS 服务器、IP 地址租用期)
- 到期后,客户端发送续租请求,服务器可以同意或者拒绝。
- 可以有多级 DHCP 服务器。
NAT
NAT(Network Address Translation 网络地址转换)
- 缓解了 IPv4 地址耗尽的问题。
- 对称型NAT:内部 IP 和外部 IP 一对一转换
- 非对称型NAT:内部 IP 和外部IP 多对一转换
- NAPT(Network Address Port Translation 网络地址与端口转换):把 IP 地址 + 端口号一起进行转换可以实现一个公有IP绑定N个私有IP ,也是使用一个缓存转换表。
- 外部无法主动与 NAT 内部服务器建立连接,初始没有转换记录
- NAT 路由器重复签,所有连接被重置
- 两者都称为 NAT 穿透
- 外部无法主动与 NAT 内部服务器建立连接
ICMP
ICMP(Internet Control Message Protocol 互联网控制报文协议)
- 确认 IP 包是否成功送达目标地址
- 「查询报文类型」:用于诊断
- 「差错报文类型」 :用于通知出错原因
- 报告发送过程中 IP 包被废弃的原因和改善网络设置等。
OSPF 协议(Open Shortest Path First, 开放最短路径优先)
- 基于Dijkstra 算法,路由器计算数据包走的最优路径
读者问答
读者问题:“组播不太懂。。。假设一台机器加入组播地址,需要把 IP 改成组播地址吗?如果离开某个组播地址,需要 dhcp 重新请求个 IP 吗?”
组播地址不是用于机器 ip 地址的,因为组播地址没有网络号和主机号,所以跟 dhcp 没关系。组播地址一般是用于 udp 协议,机器发送 UDP 组播数据时,目标地址填的是组播地址,那么在组播组内的机器都能收到数据包。
是否加入组播组和离开组播组,是由 socket 一个接口实现的,主机 ip 是不用改变的。
