Bootstrap

『 Linux 』网络层 - IP协议(一)

IP协议报文格式

IP协议报文格式与TCP协议的报文格式类似;

IP报文的宽度也是32位;

对应的IP的实际报头为20字节为定长报头(固定长度);

  • 版本

    4位,标示IP协议的版本号,对于IPv4时值为4;

  • 首部长度

    4位,标示IP首部的长度,以4 byte(32 bit)为单位;

    通常情况下范围为0000 ~ 1111(二进制),即(0~15) * 4 byte0~60 byte;

    首部长度包括实际报头,选项以及填充;

    实际报头的大小是固定长度20 byte,

    故首部长度通常为0011 ~ 1111 (二进制),即5 ~ 60 byte;

  • 服务类型(TOS)

    8位,标示指定数据包的优先级和服务质量特征,如延迟低,高吞吐量,高可靠性等;

    其中3位标示优先权字段(已弃用),4位TOS字段以及1位保留字段(置为0);

    4位TOS分别表示最小延时,最大吞吐量,高可靠性以及最小成本,这四种TOS相互冲突,需要根据具体的场景选择其中一种服务类型;

  • 总长度

    16位,标示整个IP数据包的长度,这个长度包括首部和数据,以字节为单位,最大长度为65535 byte;

  • 标示

    16位,用于唯一标识主机发送的每个数据报,在数据报分片时用于识别分片属于哪个数据报;

  • 标志

    3位,控制分片的属性,第1位为保留位,通常为0,第二位为DF(Don't Fragment)不分片标志,第三位为MF(More Fragments)表示后续还有更多分片;

  • 片偏移

    13位,表示分片相对于原始数据报的起始位置,以8 byte位单位;

  • 生存时间

    8位,表示数据包在网络中允许存活的跳数;

    这里的跳数指的是从一个设备到另一个设备表示为一跳;

    每经过一个路由器,这个值将-1,若减到0数据包会被丢弃;

  • 协议

    8位,指示数据部分使用的协议类型,如TCP (6),UDP (17)等;

  • 首部校验和

    16位,用于校验IP头部的完整性以确保数据未被篡改,首部校验和每经过一个路由器都将重新计算;

  • 源IP地址和目标IP地址

    各占32位,其中源IP地址表示数据包发送方的IP地址,目标IP地址表示数据包接收方的IP地址;

  • 选项

    选项通常为可变长度字段,用于支持网络测试,调试,安全等功能,不是常用字段,使用选项字段时通常会增加数据包的复杂性;

  • 填充

    用于确保IP头部是32位的整数倍;

  • 数据

    实际承载的有效载荷,通常是更高层协议的报文数据,如TCP或者UDP;


IP协议报文如何进行报头与有效载荷分离

IP协议报文与TCP协议报文相似,通常采用定长报文与自描述字段的方式将报头与有效载荷进行分离;

IP报文的报头固定长度为20byte;

其中16位总长度表示整个报文的大小,这个字段为实际报头,选项,填充以及数据的共计大小;

4位首部长度为实际报头,选项,填充的总大小;

  • 假设:

    16位总长度字段计算为60byte

    4位首部长度字段计算为40byte

通过16位总长度字段所计算出来的长度减去4位首部长度字段所计算出来的大小即得到数据的大小;

数据大小为即为60byte - 40byte20byte;

通过4位首部字段所计算出来的长度减去实际报头固定长度20byte即得到是否存在选项即选项大小;

选项大小即为40byte - 20byte20byte;

当报头与有效载荷进行分离后需要将数据交付给上层协议,在IP报文中的 8位协议 字段即表示需要将该有效载荷交付给上层的哪个协议,即TCP或UDP;

每一层负责将对应的有效载荷交付给上层,IP协议负责将数据交给上层协议,如TCP或UDP,对应的上层协议通过端口号将有效载荷交付给上层,如Http/Https协议,以此类推;


网段划分

IP协议通常由两个部分组成:

  • 网络号

    保证相互连接的两个网段具有不同的标示;

  • 主机号

    同一网段内主机之间具有相同的网络号,但是必须要不同的主机号;

把网络比喻为同一届的专业,其中网络号就是专业中每个班级的班级号,主机号则为每个班级中不同学生班级内的学号;

在同一个班级中每个人的号数是独立的,同样的在同一届的专业中,每个班级的班级号也是独立的,但是在不同的班级中可以有相同的班内学号;

即:

  • 不同的子网其实就是把网络号相同的主机放到一起
  • 同一子网内的两台主机网络号必须一致但主机号必须不同
  • 不同子网中两个主机的网络号必须不同但主机号可以相同

同时在网络中路由器扮演了一个重要的角色,即使得设备与设备之间可以进行跨网段数据传输,而实际上路由器本质也是特定一个子网的主机,也要配置IP地址;

路由器与普通主机不同,一个路由器至少要连接两个不同的子网,即一台路由器必须配置两个或以上的IP地址;

在不同网段中,路由器通常为至少一个子网中的第一台设备,这时它的IP地址通常为xxx.xxx.xxx.1(IPv4);

路由器的功能通常为IP报文的转发以及构建子网(局域网),其中构建子网时路由器设备是该子网中的第一台设备;

最初在进行网段划分时采用了一种将网络号和主机号进行划分的方案,将所有的IP地址分为五类,分别为A ~ E类;

其中每类网络的网段划分为如下:

  • A类

    0.0.0.0127.255.255.255;

    第一个字节(8位)用作网络号,剩下的24位用作主机号;

    除去全0和全1的情况,有效的网络范围为1.0.0.0126.0.0.0;

    可支持约1.26亿个主机地址;

  • B类

    128.0.0.0191.255.255.255;

    前两个字节用作网络号,后16位作为主机号;

    同样除去全零和全一,有约1.6w个网络,每个网络可容纳65534个主机;

  • C类

    192.0.0.0223.255.255.255;

    前三个字节用作网络号,剩下的八位用作主机号;

    这允许约210w个网络,每个网络能够拥有254个主机;

  • D类

    224.0.0.0239.255.255.255;

    这一类是保留给多播使用的(不同于单播用途的A,B,C类);

    在多播中,数据被同时发送到多个目标地址,不划分网络号和主机号;

  • E类

    240.0.0.0247.255.255.255;

    这一类网络是保留用于科研和开发用途,同样不划分网络号和主机号;

这种方式被称为 “分类划分法” ;

当需要区分网络属于哪一类时只需要遍历该IP的前一个字节即可,A类网络的第一个字节值在0~127之间,B类网络为128~191之间,C类网络为192~223之间,D类网络为224~239之间,E类网络为240~255之间;

通常负责进行网络划分的有一种特定的组织,为因特网提供组织,即运营商(ISP);

这种传统的IP地址划分使得地址分配存在很大的不灵活性,通常情况下很多机构与组织都会更加热衷于申请B类地址,而申请一个B类地址意味着需要将65535个主机号都分配给他,但可能这个组织与机构并用不到这么多的地址从而导致大多资源被浪费;

针对这种方式提出了一种新的网络划分方式 —— CIDR;


CIDR

CIDR为在传统的分类划分基础上引入了一个额外的子网掩码来区分网络号和主机号;

每一个子网都有自己的子网掩码,子网掩码实际就是一个32bit的正整数,通常以一串0来结尾;

将IP地址与子网掩码进行按位与的操作,得到的结果即为网络号;

网络号和主机号的划分与IP地址的类型(A类,B类等)无关;

  • 假设一个IP地址为192.168.100.14/24

    其中/24表示子网掩码中1的长度;

    子网掩码即为11111111.11111111.11111111.00000000,为255.255.255.0;

    IP地址利用二进制表示为11000000.10101000.01100100.00001110;

    计算结果如下:

    11000000.10101000.01100100.00001110 (IP地址)
    11111111.11111111.11111111.00000000 (子网掩码)
    -------------------------------------------- (按位&)
    11000000.10101000.01100100.00000000 
    		↓ 转化为点分十进制 ↓
    		  192.168.100.0 
    
    • 首地址为192.168.100.1
    • 广播地址为192.168.100.255
    • 尾地址为192.168.100.254
    • IP范围为192.168.100.1 ~ 192.168.100.254(除去网络号与广播号)

子网掩码的主要作用是划分或者说"裁剪"一个IP地址中的网络部分和主机部分,这样可以更有效的管理和分配IP地址资源;

通过设置子网掩码可以将一个较大的IP网络划分成若干个更小的网络(子网),这种划分不仅节省IP地址资源,还能提高网络的效率和安全性,对网络进行合理的划分可以减少广播域的大小从而提升网络传输效率;

子网掩码可以对32位的IP进行任意划分,并不止是以八位八位的方式进行划分,例如子网掩码可以为/28,/30等等;


特殊的IP地址

并不是所有的IP地址都能作为主机的IP地址;

在一个子网中通常存在两种较为特殊的地址为网络号与广播号;

如上文中举例的IP范围为192.168.100.1 ~ 192.168.100.254实际上就是去除了网络号和广播号;

网络号的IP地址通常设主机地址为全0,而广播号的IP地址通常设主机地址为1;

以上面的例子为例,其中192.168.100.0即为网络号,192.168.100.255为广播号;

除了这两个特殊的IP地址外还有一个更为特殊的IP地址,即环回地址;

  • 环回地址(Loopback Address)

    环回地址是一个特殊的IP地址,主要用于网络软件和设备的测试和诊断;

    这个地址不指向任何实际的物理接口和外部网络,而是指向计算机系统自身的内部地址;

    在IPv4中环回地址的范围被定义在127.0.0.0/8的网络内;

    对应的IP范围为127.0.0.0127.255.255.255;

    本地环回的数据会贯穿网络协议栈,但最终不会将数据发送到网络当中;

    本地环回的数据将自顶向下贯穿协议栈进行一次封装的过程,然后通过以太网驱动程序判断该数据是否属于本地环回数据,若是为本地环回数据时已经封装了的数据将再次贯穿协议栈自底向上一次将数据进行解包和分用;


IP地址的数量限制

IP地址(IPv4)是一个四字节的正整数,那么一共只有 232 个IP地址,大概是43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址,虽然采用了DICR缓解了IP地址过于浪费的问题,提高了IP地址的利用率,但实际上IP地址的绝对上限并没有增加;

为了解决IP地址不足的问题有以下解决办法:

  • 动态分配IP地址

    动态分配IP地址为只给接入网络的设备分配IP地址,因此同一个MAC地址的设备每次介入互联网中所得到的IP地址不一定是相同的;

  • NAT技术

    能够让不同局域网当中同时存在两个相同的IP地址,NAT技术不仅能解决IP地址不足,同时能够有效避免外部网络攻击,隐藏并保护网络内部计算机;

  • IPv6

    IPv6技术并不是IPv4的升级,这是两个毫不相关的协议,彼此之间并不兼容;

    IPv6采用16 byte128位来表示一个IP地址,但目前IPv6并未普及;


私有IP和公网IP

通常情况下如果一个组织在内部组建子网,IP地址值用于局域网内进行通信而不与公网进行连接时理论上使用任意的IP地址都是可以的;

RFC1918规定了用于组建局域网的私有IP地址;

  • 10.*

    8bit为网络号,一共16.777.216个地址;

  • 172.16 ~ 172.31

    其中前12bit为网络号,一共1048576个地址;

  • 192.168.*

    其中前16bit为网络号,一共65535个地址;

包含在上面的范围中的IP地址都称为私有IP,其余的则称为全局IP,即公网IP;

通常情况下可以通过ipconfig来查看当前机器的一些网络信息;

   本地链接 IPv6 地址. . . . . . . . : fe80::5747:caab:5a0f:63bc%3
   IPv4 地址 . . . . . . . . . . . . : 192.168.0.101
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.0.1

其中192.168.0.101即为当前的私网IP;


理解运营商

通常情况下入网需要两个设备,分别为调制解调器以及路由器,其中调制解调器用来解析光纤中的光电信号,将光电信号转化为模拟信号,数字信号;

入网时通常会有一个用于入网的账号密码,路由器连接光纤,配置路由器中的入网密码;

使用路由器可以进行无线的局域网连接,即路由器构建了一个局域网,为了防止网络安全,即不被陌生人进行网络连接,路由器本身也将会有一个账号密码用来识别身份从而避免陌生人使用该路由器的网络从而连接该路由器的局域网;

运营商拥有大量的网络基础设施,包括路由器,交换机,光纤线路等,这些设备构建了连接不同网络和主机的物理通道;

运营商之间通过告诉的中继线路相互连接从而形成一个庞大的网络;

  • IP地址分配

    运营商向其用户分配IP地址;

    这些IP地址可以是公网IP地址,也可以是被NAT技术转换后的私有IP地址;

    对于家庭或小型企业用户,通常采用动态IP分配方式,即用户每次连接互联网时都可能获得一个不同的IP地址;

    而对于需要固定IP的用户,如大型企业或服务器提供商,运营商则提供静态IP地址;

  • 域名系统(DNS)

    运营商还提供DNS服务,将人类可读的域名解析为机器可读的IP地址;

    当用户在浏览器输入一个网址时,DNS服务负责查找该网址对应的IP地址,以便用户能够访问目标网站;

  • 网络维护与安全

    运营商还负责网络的维护和安全;

    他们监控网络流量,确保网络畅通无阻,并采取措施保护网络免受恶意攻击;

    同时,运营商还可能提供额外的网络安全服务,如防火墙,入侵检测系统等;

  • 数据中心服务

    许多大型运营商还运营数据中心,为企业提供服务器托管,云计算和大数据处理等服务;

    这可以帮助企业降低建立和维护自有数据中心的成本;

  • 访问控制和服务质量

    运营商根据不同服务套餐,在用户的带宽,数据使用量及其他服务特性上进行限制和控制;

    例如,可能对流量进行优先级排序,使某些服务(如IPTV)具有较高的传输质量;

  • 国际互联

    由于互联网是全球性的,运营商还通过海底光缆,卫星链路等方式与其他国家的网络进行连接;这些国际链路使得跨国数据通讯成为可能;


;