Linux:网络层——IP协议

本文详细介绍了IP协议,包括IP协议的版本、头部字段、地址管理(如A、B、C、D、E类地址划分,CIDR方案,私有IP和公网IP)、特殊IP地址以及路由原理。内容涵盖了IP数据报的结构、IP地址的分配和使用,以及IP数据包在路由器中的转发过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IP协议

先来看看我从百度百科上摘下来的定义,了解一下IP简单的了解一下IP协议:

IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。

还有IP协议中的一些基本概念:

主机:配有IP地址,但是不进行路由控制的设备
路由器:既配有IP地址,又能进行路由控制的设备
节点:主机和路由器的统称

IP协议的协议字段

在这里插入图片描述

4位版本号:指定IP协议的版本,对ipv4来说,就是4
4位头部长度:IP头部的长度是32bit,也就是说length4的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节
8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0),4TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只能选择一个,对于ssh/telnet这样的程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要
16位总长度:IP数据报整体占多少个字节
16位标标识:唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的
3位标志字段:第一位保留(保留的意思就是现在不用,但是还没想好说不定以后要用到),第二位置位1表示禁止分片,这个时候如果报文长度超过MTU,IP模块聚会丢弃报文。第三位表示“更多分片”,如果分片了的话,最后一个分片置为1,其它是0,类似于一个结束标记
13位分片偏移:是分片相对于原始IP报文开始处的偏移量,其实就是在表示当前分片在原报文中处在那个位置,实际偏移的字节数量是这个值
8得到的,因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)
8位生存时间:数据报到达目的的最大报文跳数。一般是64,每次经过一个路由,TTL-=1,一直减到0还没到达,那么就丢弃了,这个字段主要是用来防止出现路由循环
8位协议:表示上层协议的类型 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏 32位源地址和32位目标地址:表示发送端和接收端
选项字段:不定长,最多40字节

地址管理

早期IP地址的划分

我们知道ipv4版本的IP协议的类型位unit21_t的整数,能够标识的范围位【0.42亿+】
IP地址被分为网络号和主机号两个部分
网络号:保证互相连接的两个网段具有不同的标志,可以标识一个“网络”中的所有主机
主机号:同一网段内,主机之间具有不同的网络号,但是必须有不同的主机号,在”网络“中可以唯一标识一台主机
早期把所有的IP地址分为A、B、C、D、E五大类

A类地址:

在这里插入图片描述

网络号的范围:0 0000000 ~ 0 1111111,即【0,127】
主机号的范围:00000000 00000000 00000000 ~ 11111111 11111111 11111111
即【0.0.0~255.255.255】
A类IP地址的范围:0 0000000 00000000 00000000 00000000 ~ 0 1111111 11111111 11111111 11111111,即0.0.0.0 ~ 127.255.255.255

B类地址:

在这里插入图片描述

网络号的范围:10 000000 00000000 ~ 10 111111 11111111,即【128.0,192.255】
主机号的范围:00000000 00000000 ~ 11111111 11111111
即【0.0~255.255】
B类IP地址的范围:10 000000 00000000 00000000 00000000 ~ 10 111111 11111111 11111111 11111111,即128.0.0.0 ~ 192.255.255.255

C类地址:

在这里插入图片描述

网络号的范围:110 00000 00000000 00000000 ~ 110 11111 11111111 11111111,即【192.0.0,223.255.255】
主机号的范围 00000000 ~ 11111111
即【0~255】
C类IP地址的范围:110 00000 00000000 00000000 00000000 ~ 110 11111 11111111 11111111 11111111,即192.0.0.0 ~ 223.255.255.255

D类地址:

在这里插入图片描述

D类IP地址的范围:1110 0000 00000000 00000000 00000000 ~ 1110 1111 11111111 11111111 11111111,即192.0.0.0 ~ 223.255.255.255

E类地址:

在这里插入图片描述

E类IP地址的范围:11110 000 00000000 00000000 00000000 ~ 11110 111 11111111 11111111 11111111,即192.0.0.0 ~ 223.255.255.255

CIDR的划分方案

上面这种划分方案有局限性,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址,针对这种情况提出了新的划分方案,称为CIDR:
CIDR引入一个额外的子网掩码(subnet mask)来区分网络号和主机号,子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾,将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号,网络号和主机号的划分与这个IP地址是A类、B类还是C类无关
计算当前的网络的网络号

当前网络的网络号 = IP & 子网掩码

计算当前网络的最大主机数量

当前网络的最大主机数量 = 子网掩码取反

例子:IP地址位192.168.112.90,子网掩码是255.255.255.0计算网络号和最大主机号
在这里插入图片描述

IP地址192.168.112.90
子网掩码255.255.255.0
网络号192.168.112.0
IP地址范围192.168.112.0~192.168.112.255

总结

(1)IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;
(2)IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地为
140.252.20.68,子网掩码的高24位是1,也就是255.255.255.0

私有IP地址和公网IP地址

公网IP:具备直接访问互联网效力的IP
私网IP:不具备直接访问互联网的能力的,但是不同的私网可以进行互用
如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址

(1)10.*,前8位是网络号,共16,777,216个地址

(2)172.16.到172.31.,前12位是网络号,共1,048,576个地址
(3)192.168.*,前16位是网络号,共65,536个地址

包含在以上范围中的,都成为私网IP,其余的则成为公网IP

特殊的IP地址

网络号:将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
广播号:将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
本地回环地址:127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

路由

路由其实就是通过互联的网络把信息从源地址传输到目的地址的活动。路由的过程就有点像问路一样,但是一次只能问到一个目的地。 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。
在这里插入图片描述

IP数据包的传输过程也和问路一样.
当IP数据包, 到达路由器时, 路由器会先查看目的IP,路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器,依次反复, 一直到达目标IP地址。那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表
在这里插入图片描述
路由表可以使用route命令查看,如果目的IP命中了路由表, 就直接转发即可,路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址
在这里插入图片描述
部分名称解释

Destination:目的网络的网络号
Gatway:网关地址
Genmask:子网掩码
Flags:标志位,G代表网关, U代表可用,!代表不可用
Iface:网卡设备

路由转发的过程
(1)在转发数据的时候,先获取数据的目的IP地址,通过目的IP和路由表当中的子网掩码进行‘&’操作
(2)如果获取到的结果和当前路由项当中的destination相符合,说明这条数据是转发给当前子网当中的机器
(3)如果获取到的结果和当前路由项当中的destination不符合,则继续匹配下一个路由项,直到所有子网的路由项都匹配一边之后,还没有找到相应的转发的路由项,则会和网关路由项的子网掩码进行按位与操作,将数据通过网关(WAN)转发给路由器
注意
(1)上级路由器再说获取到这条数据之后,也是需要重复上述匹配路由项的操作的,直到将数据转发给响应子网网络当中的机器,或者转发给上级路由器
(2)在每一次路由器进行转发的时候,都会对IP数据报当中的IP协议的TTL字段进行减1操作,如果TTL==0,还是没有到达目标机器,则路由器丢弃该数据报,如果TTL > 0,到达目标机器,则为正常转发

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值