Linux网络--6、网络层

目录

一、引言

二、IP协议

2.1基本概念

2.2协议头格式

三、网段划分

3.1介绍

3.2划分方法

(1)五类划分法:

(2)子网掩码

3.3特殊的IP地址

四、私有与公有

五、路由

如何发送给下一个路由器


一、引言

前面我们介绍了一个要传输的数据已经从用户在应用层进行封装并到传输层进行序列化等协议封装,已经做好了进行网络转发的准备,那么怎么在网络中传输到目的主机?今天我们来介绍数据包在复杂的⽹络环境中确定⼀个合适的路径--网络层IP

二、IP协议

2.1基本概念

(1)主机:每个主机都配有IP地址,进行路由控制

(2)路由器:既配有IP地址,又能进行路由控制

(3)节点:主机和路由器的统称

(4)IP地址 = 网络号 + 主机号

2.2协议头格式

(1)4位版本号:指定IP协议的版本;例如:IPV4就是4

(2)4位首部长度:4位表示的最大数字是15,且单位为4字节,因此IP头部最大长度是60字节

(3)8位服务类型(TOS):包括3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为0)4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本(这四者相互冲突只能选择一个

(4)16位总长度:IP数据报整体占多少个字节

(5)16位标识id:唯⼀的标识主机发送的报⽂. 如果IP报⽂在数据链路层被分⽚了, 那么每⼀个⽚⾥⾯的这个id都是相同的

(6)3位标志字段: 第⼀位保留(保留的意思是现在不⽤, 但是还没想好说不定以后要⽤到).

第⼆位置为1 表⽰禁⽌分⽚, 这时候如果报⽂⻓度超过MTU, IP模块就会丢弃报⽂.

第三位表⽰"更多分⽚", 如果分⽚了的话, 最后⼀个分⽚置为0, 其他是1. 类似于⼀个结束标记

(7)13位分片偏移:相对于原始IP报⽂开始处的偏移. 其实就是在表⽰当前分⽚在原报⽂中处在哪个位置.

实际偏移的字节数是这个值除以 8 得到的. 因此, 除了最后⼀个报⽂之外, 其他报⽂的⻓度必须是8的整数倍(否则报⽂就不连续了).

除以8进行储存,在读取时就要进行乘以8,2^13*8 = 2^16 == 16位总长度,刚好包含整个IP数据报

(8)8位生存时间(TTL):数据报到达⽬的地的最⼤报⽂跳数. ⼀般是64. 每次经过⼀个路
由, TTL -= 1, ⼀直减到0还没到达, 那么就丢弃了. 这个字段主要是⽤来防⽌出现路由循环
(9)8位协议 :标识传输层使用的协议类型
(10)16位头部校验和: 使用CRC进行校验,来鉴别头部是否损坏
(11)32位源地址和目的地址: 表示发送端和接收端

三、网段划分

3.1介绍

基础概念中我们提到IP地址分为两个部分:网络号和主机号
• ⽹络号: 保证相互连接的两个⽹段具有不同的标识;
• 主机号: 同⼀⽹段内, 主机之间具有相同的⽹络号, 但是必须有不同的主机号;

通过合理设置 主机号和⽹络号, 就可以保证在相互连接的⽹络中, 每台主机的IP地址都不相同.
• 有⼀种技术叫做DHCP, 能够⾃动的给⼦⽹内新增主机节点分配IP地址, 避免了⼿动管理IP的不便.
• ⼀般的路由器都带有DHCP功能. 因此路由器也可以看做⼀个DHCP服务器.

3.2划分方法

(1)五类划分法:

• A类 0.0.0.0到127.255.255.255
• B类 128.0.0.0到191.255.255.255
• C类 192.0.0.0到223.255.255.255
• D类 224.0.0.0到239.255.255.255
• E类 240.0.0.0到247.255.255.255

(2)子网掩码

随着网络的发展,第一类划分法就导致分配不均,有些被分配完,而有些却被浪费所以提出了子网掩码的方法


,IP地址与⼦⽹掩码做 按位与 运算可以得到⽹络号, 主机号从全0到全1就是⼦⽹的地址范围;
IP地址和⼦⽹掩码还有⼀种更简洁的表⽰⽅法,例如140.252.20.68/24,表⽰IP地址为140.252.20.68, ⼦⽹掩码的⾼24位是1,也就是255.255.255.0

3.3特殊的IP地址

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

四、私有与公有

若⼀个组织内部组建局域⽹,IP地址只⽤于局域⽹内的通信,⽽不直接连到Internet上,理论上 使⽤任意的IP地址都可以,但是RFC 1918规定了⽤于组建局域⽹的私有IP地址
• 10.*,前8位是⽹络号,共16,777,216个地址
• 172.16.*到172.31.*,前12位是⽹络号,共1,048,576个地址
• 192.168.*,前16位是⽹络号,共65,536个地址
包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公⽹IP)
• ⼀个路由器可以配置两个IP地址, ⼀个是WAN⼝IP, ⼀个是LAN⼝IP(⼦⽹IP).
• 路由器LAN⼝连接的主机, 都从属于当前这个路由器的⼦⽹中.
• 不同的路由器, ⼦⽹IP其实都是⼀样的(通常都是192.168.1.1). ⼦⽹内的主机IP地址不能重复. 但是⼦⽹之间的IP地址就可以重复了.
• 每⼀个家⽤路由器, 其实⼜作为运营商路由器的⼦⽹中的⼀个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN⼝IP就是⼀个公⽹IP了.
• ⼦⽹内的主机需要和外⽹进⾏通信时, 路由器将IP⾸部中的IP地址进⾏替换(替换成WAN⼝IP), 这样逐级替换, 最终数据包中的IP地址成为⼀个公⽹IP. 这种技术称为NAT(Network Address Translation,⽹络地址转换).
• 如果希望我们⾃⼰实现的服务器程序, 能够在公⽹上被访问到, 就需要把程序部署在⼀台具有外⽹IP的服务器上. 这样的服务器可以在阿⾥云/腾讯云上进⾏购买

五、路由

在复杂的网络结构中找到通往目的地的路线
• 当IP数据包, 到达路由器时, 路由器会先查看⽬的IP;
• 路由器决定这个数据包是能直接发送给⽬标主机, 还是需要发送给下⼀个路由器;
• 依次反复, ⼀直到达⽬标IP地址;

如何发送给下一个路由器

每个路由器都有自己的路由表,每个路由器都有自己的路由表

利用route查看路由表,假如某主机路由表如下:

路由表的Destination是⽬的⽹络地址,Genmask是⼦⽹掩码,Gateway是下⼀跳地址,Iface是发送 接⼝,Flags中的U标志表⽰此条⽬有效(可以禁⽤某些 条⽬),G标志表⽰此条⽬的下⼀跳地址是某个路由器的地址,没有G标志的条⽬表⽰⽬的⽹络地址是与本机接⼝直接相连的⽹络,不必经路由器转发;
每个路由器都有构建子网的功能,从运营商用申请的公网路由器建立公网广域网,然后不断进行网络建设,每个地区到各家各户进行分层,路由器构建子网,分层建立自己的私网
路由表拿到在ip层封装好的数据报时,按照路由表上的子网掩码和数据包中的目的IP进行按位与:
(1)得到的目的网络号和自己的一样就交给该网络号的路由器
(2)若不一样则与下一个子网掩码运算直到找到符合的下一跳
(3)若和路由表上的所有网络号都不符合,则交给默认的缺省路由表进行下一跳的路由分析

相关推荐
刺客xs3 小时前
linux GDB调试器
linux·运维·windows
せいしゅん青春之我3 小时前
【JavaEE初阶】1124网络原理
网络·网络协议·java-ee
ONE_SIX_MIX4 小时前
Debian 的 网络管理器 被意外卸载,修复过程
服务器·网络·debian
liulilittle4 小时前
国际带宽增长与用户体验下降的悖论
网络·网络协议·信息与通信·ip·ux·带宽·通信
wydaicls4 小时前
Linux 内核伙伴系统在快速路径分配内存时,对一个内存区域(Zone)进行水位线检查和内存压力评估的关键逻辑
linux·服务器
今天只学一颗糖5 小时前
Linux学习笔记--GPIO子系统和PinCtrl子系统
linux·笔记·学习
黄昏晓x5 小时前
Linux----权限
linux·运维·服务器
小白不想白a5 小时前
【shell】每日shell练习(系统服务状态监控/系统性能瓶颈分析)
linux·运维·服务器
shaominjin1235 小时前
Android 约束布局(ConstraintLayout)的权重机制:用法与对比解析
android·网络