网络原理3——IP详解及IP相关技术
一.IP基本知识
- IP在TCP/IP模型中处于第三层,网络层。网络层主要实现主机之间点对点(end to end)通信
- IP层与MAC层(数据链路层)之间的关系,链路指两个物理上直连的设备,而IP负责总体导航,期间IP源地址和目的地址不变,MAC地址一直都在改变。可以理解成每一跳归mac层管,总体路线归IP层管。
IP地址
IPv4地址由32位二进制数表示,表示成十进制每8位点断开。其中第一部分为分类号,固定。然后是网络号,代表当前主机处在哪个网络之中,最后剩下来的是主机号,代表该主机是当前网络中哪一台。
ip地址分类


最大主机数的计算:
用主机号(2的次方)-2.
这个2:
一个代表全0,全0代表网络号。
一个代表全1.全1代表广播。意思就是网络中全体会议。广播用于同一链路中互连主机之间共享信息,不得跨越路由器
要想跨越路由器怎么办?
D类地址多用于多/组播,用于将包发送给组内特定所有主机,多/组播可穿透路由器
CIDR无分类地址
正因为 IP 分类存在许多缺点,所以后⾯提出了⽆分类地址的⽅案,即 CIDR 。
表示形式 a.b.c.d/x ,其中 /x 表示前 x 位属于⽹络号, x 的范围是 0 ~ 32 ,这就使得 IP 地址更加具有灵活性。
⽐如 10.100.122.2/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是⽹络号,剩余的 8 位是主机号。
子网掩码
有另⼀种划分⽹络号与主机号形式,那就是⼦⽹掩码,掩码的意思就是0掩盖掉主机号,剩余的就是⽹络号
子网掩码 & IP地址 =网络号 ,注意按位相与

路由器根据网络号进行转发。
子网掩码的另一个作用,进行子网划分。
子网划分
子网划分将主机号进一步拆分为 1.子网地址 2.子网主机地址

假设对C类地址: 192.168.1.0 进行划分。
子网掩码为:码 255.255.255.192 。即最后一个字节的前两位可用作子网号,由此00 01 10 11分为四个子网络

- 00子网:网络地址192.168.1.0,第一个可用地址192.168.1.1 ,由第二个子网反推回来可知最后一个地址为63
- 01子网:网络地址192.168.1.64,第一个可用地址为,192.168.1.65,由于主机地址6位每个子网64个地址。用64+64-1=127也可得到最后一个地址127.
- 后同不赘述
划分后:

IP路由
路由表记录着网络地址与下一跳地址。在主机和路由器上都有路由表。
发送IP包的时候,首先确定IP包的目标网络地址,再在路由表中找最长匹配的相同网络地址(无匹配的就发送至默认路由),下一跳发送到该地址。

举例说明:
- 主机要发送一个目的地址为10.1.2.10的包,查找主机自己的路由表,由于没有匹配的,默认路由发送至10.1.1.1.至路由器1.
- 路由器1:收到包之后也进行搜索路由表,找到10.1.2.0/24的匹配。找到下一跳10.1.0.2.至路由器2.
- 路由器2:收到包之后再次匹配,因为下一跳在自己身上的另一个接口,路由器2经由这个接口发送给网络中目标主机。
环地址127.0.0.1
默认一个特殊的IP127.0.0.1作为本地环回地址,代表本机。数据包不会流向网络,只在本机内流通。
IP分片?
数据链路的最大传输单元MTU是不同的,常见的以太网的MTU为1500字节。如4000字节的数据包要分成3个片。
所以当数据包大于这个大小的时候就要分片。
但因为IP不保证可靠性,一旦某个数据丢失整个IP数据包都作废,所以在TCP引入MSS在传输层TCP来分片,不由IP来分片
对于UDP协议,我们尽量不要发送一个大于MTU的数据报即可。
二.IP相关技术
DNS域名解析(应用层)
上网通常使用网址和域名,而不是IP地址。
DNS域名解析,可以将域名网址自动转换成具体的IP地址
DNS域名等级从高到低:
根域名服务器
顶级域名服务器(比如:com
权威域名服务器(xxx.com
域名解析过程:
常见的由迭代查询和递归查询两种。
- 主机/客户端向本地DNS服务器查询,一般是递归查询(所谓递归,就是本地服务器代替主机继续查询)
- 本地DNS服务器向根域名服务器查询一半采用迭代查询(迭代像问路,每次只给你指路而不带你去,意思是说每次本地DNS都要自己去问然后自己去找)
按下图示例:
图下解释

在dns之前:
客户端先检查自己的浏览器缓存有没有,没有看操作系统缓存有没有,再没有看本机dns解析文件hosts有没有。三个都没有发起DNS请求:
- 客户端发起一个DNS请求,问本地DNS服务器:xx网址的IP是啥。
- 本地DNS服务器先自查,查到了就告诉他; 如果没有先问最大的大哥“根”DNS服务器。
- 根DNS作为大领导,听到这个问题,笑了一笑,给本地DNS说去找对应的顶级DNS服务器,他的地址是xxx,去吧。
- 然后本地DNS拿到顶级DNS地址之后就去问,二哥。
- 顶级DNS作为小领导,听到也笑了,我给你负责这个事儿的权威DNS服务器的地址,你去找他。
- 然后本地DNS拿到权威DNS服务器的地址又去问三哥。
- 权威DNS服务器是干活儿的,知道具体的IP地址,告诉了本地DNS。
- 然后本地DNS返回结果给客户端。
ARP物理地址解析协议
我们知道了IP怎样寻址。但是在路由的过程中,点对点的寻址是在数据链路层完成的,而链路层的MAC物理地址才是他们的流通地址。
所以ARP主要解决IP地址到MAC地址的映射问题这样我知道了下一跳的IP就能通过ARP知道下一跳的具体物理地址。
ARP主要通过ARP请求和ARP响应两种包确定MAC地址。
在同一个子网内,主机广播发送ARP请求,问xxIP这个地址是谁的。
同一个子网内的设备收到ARP请求后,解析包的内容,这个包的目的地址如果和自己的IP地址一致,就将自己的MAC地址塞入ARP响应包返回给主机,告诉他xxIP这个地址是我的,我的MAC地址是xxxx。
然后操作系统会吧第一次ARP解析的结果缓存起来,下次他直接查缓存就能找到对应的IP和MAC。(注:有期限,定期清理,超出存储能力也会清理)
还有一个RARP协议,顾名思义,解决知道MAC但不知道IP的情况。解决方法一样,两次消息。通常用于小型嵌入式设备(如打印机)接入网络中的时候。
DHCP动态获取IP地址(基于UDP)
电脑通常通过DHCP动态获取IP地址。
- 客户端先发起DHCP发现报文,因为本身没有IP是一个没有身份的人,也不知道DHCP服务器的地址。所以使用UDP广播通信。客户端将该IP数据报传给链路层之后,链路层将帧广播到所有网络设备
- 服务器收到之后回应DHCP提供报文。
- 客户端可能会收到多个提供报文,选一个即可。并向其发送DHCP请求报文。
- 该客户端回应DHCP ACK应答。交互完成。
全程使用UDP广播通信,但广播只限于同一局域网,如果需要转发到另一个网络中,岂不是每个网络都要配一个DHCP服务器?
DHCP中继代理,对不同网段IP地址分配可以用同一个DHCP服务器同一管理
实现的方式就是路由器扮演中继代理的角色,把广播的信号中继单播出去。
NAT+端口=NAPT 公私网络地址转换
普通NAT没有什么意义,是公私有地址一对一映射。
私有网络内不同IP可以经由NAT路由器,映射为同一个共有IP地址,但是由于发来的端口号不同,所以包发回来的时候路由器还是能区分该转发回给谁。
ICMP控制报文协议(IP层协议)
ICMP 全称是 Internet Control Message Protocol,
ICMP报文类型
- 查询报文类型
- 差错报文类型

由上述报文就可实现以下功能: - 确认IP包是否送达
- 报告IP包被丢弃原因
- 改善网络设置
ping 基于ICMP
ping 命令执⾏的时候,源主机⾸先会构建⼀个 ICMP 回送请求消息数据包。
ICMP包中最重要的有两个字段:
- 类型字段:表示该包类别,ICMP回送请求包字段为8
- 序号
每发出一个数据请求包,序号就会自加1。为了计算RTT,在发送报文的数据部分会插入时间戳。
然后开始封装:
ICMP协议将数据包交给IP层,IP层提取目的地址,加上自己的源地址等信息加上IP头。
然后继续向下到链路层,加上MAC头,加之前需要查MAC地址,所以这里可能需要用到ARP协议。再附加上一些控制信息。就可以发出去了。
接收方:
先拆MAC头,看对不对。接收帧,将IP包提取出来。IP层最终提取ICMP报文。
此时接收方会构建一个ICMP回送应答包,类型字段为0.

这是在同一网段的情况,如果不在同一网段,还需要经过网关和路由器的转发等步骤。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
