IP协议
参考:IP协议看这篇就够了、小林coding、wiki
概况
TCP模块将网络包委托给 IP 模块才能发送给通信对象。
IP 协议的特点:IP 协议提供无连接的、不可靠的、尽力的数据报投递服务:
- 无连接的:通信双方无需像TCP那样建立连接便可直接通信,发送端可以在任何时刻发送数据,接收方永远也不知道自己什么时候会收到数据。
- 不可靠的:IP协议既不保证数据包能成功传输给对方,也不会对传输失败做任何检测,更不会通知对方本次传输是否成功。
- 尽力的:最大传输单元(MTU)规定了一个网络包的最大长度,以太网中一般为1500字节。对于较长的数据,IP协议会把原始数据分割成一个一个的数据包进行发送。
多网卡
当客户端设备有多个网卡(每个网卡各自有一个 IP 地址),系统在发送 IP 包时会根据路由表选择合适的网卡和源 IP 地址。至于到底选择那个网卡?系统会查找路由表中哪个网络前缀和当前IP的匹配程度最高,将这个网卡的 IP 作为 IP 包的源地址写入头部。
什么叫匹配度最高?谁和目标IP的重合度最高,谁最优先。举个例子,假设当前的路由表中有以下路由表
网络地址 | 子网掩码 | 前缀长度 | 接口 |
---|---|---|---|
192.168.1.0 | 255.255.255.0 | /24 |
eth0 |
192.168.1.128 | 255.255.255.128 | /25 |
eth1 |
0.0.0.0 | 0.0.0.0 | default |
eth2 |
现在我们要访问IP:192.168.1.130
192.168.1.0
: 根据子网掩码,可以计算该网络号可覆盖的的范围是192.168.1.0 - 192.168.1.255
192.168.1.128
: 同样计算网络的范围是192.168.1.128 - 192.168.1.255
default
: 匹配度为0,当本地IP都不匹配时才使用
可见路由1和路由2都覆盖了目标IP地址。但是路由2的网络范围比路由1更小,匹配度更高,所以优先选择路由2.
这就是操作系统和路由器采用的最长前缀匹配的机制。
再举个例子:假设你电脑的IP地址是:192.168.1.100
,子网掩码是:255.255.255.0
。也就是说你的本地网络号是:192.168.1.0/24
。也就是说只能直接访问192.168.1.x
的设备。除此之外所有的IP地址都属于外部网络,需要交给默认路由的网关转发给外部网络。
事实上,两台计算机要通讯,首先要判断的就是是否处于同一个广播域内,即网络地址(网络号)是否相同:
- 如果网络地址相同,表明接受方在本网络上(本地网络主机),那么可以把数据包直接发送到目标主机,无需转发给其他的网络。
- 网络号不相同的主机称之为远程网络主机,远程网络中的主机要相互通信必须通过本地网关(GateWay)来传递转发数据。
大多数情况下,当设备需要与本地子网之外的网络(比如互联网)通信时,会使用默认路由。默认路由是路由表中唯一不指定具体目标网络的路由条目,其网络目标是 0.0.0.0。任何无法通过更精确匹配找到目标地址的流量都会被引导到默认路由。
IP 地址
常见的IP地址分为IPv4与IPv6两大类,IP地址由一串数字组成。IPv4为32
位长,通常书写时以四组十进制数字组成,并以点分隔,如:172.16.254.1
;IPv6为128
位长,通常书写时以八组十六进制数字组成,以冒号分割,如:2001:db8:0:1234:0:567:8:1
。
IPv4
1981年,IETF定义了32位IP地址的IPv4。随着互联网的快速成长,IPv4的42亿个地址最终于2011年2月3日用尽。
IPv4地址可分为A、B、C、D、E五大类,其中E类属于特殊保留地址。
IP 第一段范围 | 属于哪一类 |
---|---|
1 ~ 126 | A 类 |
128 ~ 191 | B 类 |
192 ~ 223 | C 类 |
224 ~ 239 | D 类(组播) |
240 ~ 255 | E 类(实验) |
至于这样划分的原因,看看下面这张图就明白了:
其中可以分配给主机使用的是A、B、C类地址。D类用于组播(Multicast),无子网掩码;E类用于实验,也没有子网掩码。
在A类、B类、C类IP地址中,如果主机号是全1,那么这个地址为直接广播地址,代表所有主机,它是用来使路由器将一个分组以广播形式发送给特定网络上的所有主机。
如果主机号全为0,那么它代表的是某一个网络,不是可分类给主机的网络号。
受限广播地址(limited broadcast address)是指 IPv4
地址255.255.255.255
。它仅用于向当前本地网络中的所有主机发送消息,路由器不会该地址的广播。