目录
3. 特殊的IP地址 (假设子网掩码都是255.255.255.0)
前言
上一篇文章讲到了IP协议的两种机制:
1. 地址管理 | IPv4,IPv6 |
2.路由选择 | (a)动态分配IP,(b)NAT机制(分类内网,外网) |
注:只要求外网IP是唯一的,内网在不同的局域网中式可以重复的(同一个局域网中不能重复)。
续上一篇文章继续讲接下来的内容:
1. 在NAT机制下网络如何进行通信?
外网设备 ----> 外网设备 | 不需要NAT,直接可以通信 |
内网设备 ----> 其他内网设备 | 不允许直接通信(借助外网设备作为中转站) |
外网设备 ----> 内网设备 | 不允许直接同通信 |
内网设备 ----> 外网设备 | 对应的内网设备的路由器可能会触发NAT机制,进行源IP的替换,此时就会给网络数据包的源IP替换成路由器的IP |
如果触发NAT机制,一个外网设备就对应一大批的内网设备了,现实中,是用动态分配IP和NAT机制一起来解决IP地址不够用的问题。
2. IP地址的组成
(1)IP地址分为两个部分,网络号和主机号。
- 网络号:标识一个网段(也就是一个局域网);保证互相连接的两个网段具有不同的标识。
- 主机号:标识一台主机在哪里(局域网内部的主机);同一个网段内,主机之间具有相同的 网络号,但是必须有不同的主机号。
如下图:(两个相邻的局域网的网络号是不能重复的)
一般来说,前三位(前3个字节)是网络号,最后一个字节是主机号,但是也不是一定都是如此的。
(2)网络号和主机号的区分
1. IP地址分类(ABCDE) | 每一类的网络号和主机号都是固定的(不常用了) |
2. 子网掩码 | 真实的划分方式: |
(a)IP地址分类:
如下图,缺点就是像AB类这种主机号太长了,在一个局域网内,不可能有 这么多太主机。(所以大部分都是用子网掩码来区分网络号和主机号了)
(b)子网掩码:
子网掩码就是用来的区分哪几位是网络号,哪几位是主机号的,子网掩码如上图:站在二进制的角度来看也是一个32位的整数,左侧都是1,右侧都是0(取直范围是0 - 255,不会有1010这种混合的情况),左侧有几个1,意思就是IP地址的哪些位就是网络号;
如上图:255.255.255.0就是前3个字节是网络号,最后一个字节是主机号。
对于一般的家庭网络都是255.255.255.0,这种,但是对于一些大型公司来说就不一定了,有网络管理员来划分这个事情。
3. 特殊的IP地址 (假设子网掩码都是255.255.255.0)
1. 主机号为 0 的IP(192.168.0.0) | 就是网络号(局域网种不存在某一个主机主机号是0) |
2. 主机号为 1 的IP(192.168.0.255) | 广播地址,往这个地址发udp数据包,此时这个数据包就会被转发给整个局域网中所有的主机。(tcp不支持广播) |
3. 127开头的IP(环回IP)(两个通信设备都在一台主机上,就用环回IP) | 最常用的就是127.0.0.1,像127.1.1.1,127.1.1.10这种都是环回IP。 |
4. 主机号为1(192.168.0.1),一般作为“网关IP” | 网关就是在一个局域网内控制流量传输的(局域网恶的出入口) |
广播地址还是很常用的:例如手机投屏,如果想把手机上的视频投屏到电脑或者电视上来看,此时投屏软件就要求你的手机和电视、电脑在同一个局域网中,你的手机就有一个自动查找电视的功能。
手机网局域网的广播地址上发送一个数据包,看看哪个IP有回应,电视上也有对应的投屏软件,收到了数据包就会回应了,此时说及就知道电视的IP了
注:广播功能是在不能预先知道对方的IP是啥,需要探测,此时才会使用广播功能。
4. IPv6
IPv4协议 | 传统协议,使用4个字节表示IP地址(32位的整数表示IP地址) |
IPv6协议 | 更新的协议,使用16个字节来表示(128位整数表示地址)(16进制表示IP) |
IPv6这个数字是非常大的,不是IPv4的四倍,是呈指数增长的,所以说IPv6可以给地球上的每一粒沙子都配上IP地址,但是现在网络层的协议还是以IPv4为主,因为IPv6和ipv4并不兼容。
一个普通的IPv4路由器,要想支持NAT,软件上只要升级一下系统即可(成本低)
一个普通的IPv4路由器,要想支持ipv6,光升级软件没有用,所有的硬件也是要进行更换的(成本高)
5. 路由选择
开始的时候互联网就是给军事上用的,要避免核打击就需要多条路径,此时网络传输中其实是用不了这么多的路径的,所以,网络中存在大量的冗余,如果主机A给主机B发消息,网络中有这么多条路径,要具体走哪一条路就是一个很大的问题。
解决方案:
网络上的环境是很复杂的,某一个路由器是无法站在上帝的角度来给你规划一条完整的路线来进行传输数据(无法把整个的网络环境都记录下来),路由器只能记录周围的情况(也就是只能知道邻居是谁)。
路由器是使用路由表来记录周围的情况的(内部是使用路由表这样的数据结构来记录邻居是谁)
在实际转发过程中都是“投石问路”的方式来进行转发数据的,逐渐接近目标主机。
- IP数据包在网络转发时,目的IP大概率是不在路由表中的,没有匹配结果)
- 下一步路由器就会给数据包指出一条默认的路径(路由表中的“下一跳表项”)
- 此时就会把数据包指引到更上一级的路由器,越上层的路由器路由表中存储的目标IP就越多(见多识广)
- 由上层的路由器来查询路由表最后将数据包指引到目的主机。
数据链路层
1.报文格式:如下图;
数据链路层数据帧最大载荷量被称为MTU,上图中的数据帧报文格式是以太网数据帧(数据链路层不只有以太网一个协议),以太网数据帧MTU是1500字节,如果承载的数据超过了MTU,此时就会在IP协议中分包,保证最大长度都小于MTU。
2. IP协议如何分包: 下图详解;
其中udp数据包是64kb,所以还是要比以太网MTU大很多,所以很大可能会在IP协议中进行分包,这也是IP协议的一项工作,就是进行分包和组包。这里的整队操作(排序数据包(可能后发先至)),在tcp那里也有,tcp也会进行整队,tcp的整队就是借助这个IP组包过程来完成整队的(本质上是一回事)。
3. IP分包重组的过程
如下图详解:
经过路由器后,将udp的数据部分和udp首部分成多份,每一小份数据包都配有一个IP首部(标识,偏移量),后续进行组包。
注:上图,虽然udp数据包可以拆分多份,但是udp首部只有一份,这个最大长度还是2个字节,64kb这个数据还是不能改变的,udp数据包最大长度还是64k。