• 网络层解析——IP协议、地址管理、路由选择


    IP协议格式解析

    画图解析IP协议报头成员:
    在这里插入图片描述

    4位版本号: 4 --- ipv6    6 --- ipv6
    4位头部长度:ip报头最小20个字节,最大60个字节,用于数据分用
    8位服务类型:3位优先权弃用、1位固定位0、4位服务类型
    16位数据报长度:限制IP报头包含头部在内最大不超过64k大小
    	对tcp报文最大数据不超过64k-40(IP报头20字节,tcp报头20字节)
    	对udp报文最大数据不超过64k-28(IP报头20字节,udp报头8字节)
    16位分片标识:表示当前分片属于哪一个报文,用于分片重组
    	网络层的数据分片:
    		在网络层要求一个报文最大不能超过64字节,如果报文超过64字节,则直接丢弃,小于64字节才能进行传输。
    		而在链路层还有一个报文的长度限制MTU,大小可以设置,以太网默认位1500,如果报文超过MTU就需要在网络层进行数据分片。
    		将大报文分割成小的分片,然后分别封装包头进行传输。在发送端进行数据分片,在接收端就需要进行分片重组。分片标识就是干这个事情的。
    3位标志位:
    	0表示不用,对应位置1表示对应功能
    	分片保留位:现在还不想用,但不知道以后用不用
    	分片禁止位:禁止分片,如果报文长度大于64字节,网络层直接丢弃
    	分片结束标志位
    13位分片偏移:标识当前分片在原始报文中的位置,以8字节为单位。
    8位TTL:生命周期,最大数字255。
    	表示一个报文所能经过的路由器跳数,每经过一个路由器跳数减1,减为0就丢弃数据。
    	避免路由环路导致数据传输传不出来。
    8位协议类型:
    	表示当前数据所使用的协议类型,用于数据分用上层选择
    16位校验和:校验数据一致性
    	每一层都有自己的传输设备,每一层都应该有自己的数据校验
    32位源端-对端IP地址:用于描述通信两端主机
    0~40字节网络数据:某些情况下使用,比如路由追踪
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    地址管理

    IP地址的管理:

    IP地址:在网络中唯一标识一台主机
    IPV4:uint32_t类型的整数
    管理:根据网络不同进行分配
    IP协议地址组成:
    	网络号:是一个网络的标识,每个网络中所分配的IP地址都包含对应的网络号
    	主机号:一个主机在一个网络内部的标识
    	只要使用不同的网络号并且每个网络中的主机号不用就可以实现IP不同。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    网段的划分:
    32位地址
    A类网段:

    	高1位固定为0,7位网络号,24位主机号
    	用于组件超大型网络,127是网络号,2^24个主机(一千六百多万个)
    	A类范围:0.0.0.0 ~ 127.255.255.255
    
    • 1
    • 2
    • 3

    B类网段:

    	高2位固定为10,14位网络号,16位主机号
    	用于组建中型网络,191.256是网络号,2^16个主机(65535个)
    	B类范围:128.0.0.0 ~ 191.255.255.255
    
    • 1
    • 2
    • 3

    C类网段:

    	高3位固定为110,21位网络号,8位主机号
    	用于组件小型网络,223.255.255是网络号,2^8个主机(256个主机)
    	C类范围:192.0.0.0 ~ 223.255.255.255
    
    • 1
    • 2
    • 3

    D/E类网段
    但这种网段划分方式导致的情况就是,大量的公司抢占B类网段IP,导致A类网段IP浪费。
    所以在早期的基础上使用了新的方案:CIDR使用子网掩码进行网络划分
    子网掩码:

    uint32_t 类型的数据,由-连续-的二进制1组成
    ··必须保证1是连续的
    1.用于辨别一个IP地址属于哪一个网络
    	子网掩码与IP地址相与可以得到网络号
    	192.168.1.2 & 255.255.255.0 ->192.168.1.0
    2.用于确定或限制子网中主机号个数
    	子网掩码取反得到子网中最大主机号个数
    	~255.255.255.0 ->0.0.0.255   255个
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    一个公司中申请了一个C类网络,192.154.53.0 /24,公司有4个部门,现在需要将网络平均划分为4个子网,请问每个子网的网络号,子网掩码和IP范围分别是多少?

    C类网络可以有256个主机,平均划分为四个子网,每个子网最多有64个主机号,每个子网的主机号范围位0~64.
    子网掩码取反得到最大主机号,同理,用最大主机号取反就可以得到子网掩码:~0.0.0.64 ->255.255.255.0
    所以得到的IP地址范围为:
     子网1:192.154.53.0 ~ 192.154.53.63;
     网络号:192.154.53.0 & 255.255.255.0 ->192.154.53.0
     子网2:192.154.53.64 ~ 192.154.53.127;
     网络号:192.154.53.64 & 255.255.255.0 ->192.154.53.64
     子网3:192.154.53.128 ~ 192.154.53.191;
     网络号:192.154.53.128 & 255.255.255.0 ->192.154.53.128
     子网4:192.154.53.192 ~ 192.154.53.255;
     网络号:192.154.53.192 & 255.255.255.0 ->192.154.53.192
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    特殊IP地址:

    0.0.0.0:被识别为当前主机上任意网卡地址,常使用于服务端绑定地址
    255.255.255.255:全网广播地址,常用于DHCP请求
    	DHCP:动态地址分配协议,谁上网给谁分配地址
    	路由选择时,数据中没有对方路由的IP,怎么将数据发送出去,只能通过广播发送给所有的路由,让相关的进行识别。
    127.0.0.1:每个主机上都有的虚拟回环网卡地址,用于本地网络测试
    主机号全为0的IP地址:就是网络号,不会分配给主机
    主机号全为1的IP地址:udp局域网广播地址,也不会分配给主机
    	所以说一个C类网络中有256个IP,但是分配给主机的IP只有254个
    	这和全网广播地址是不一样的,因为网络号不同,位数不同。
    	一个网络中能够分配给主机的IP地址的个数是主机号个数-2。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    公网与私网:

    公网/外网:通常所说的互联网
    私网/内网:私自组建的私有网络不与外界直接通信
    	目的:1.只想进行内部通信     比如军政领域
    		 2.节省公网地址的使用
    		 	建立一个私网,可以使私网中的主机使用同一个公网进行上网。
    	RFC1918文档中规定用于组建私网的地址:
    		10.*.*.*    172.16.*.*    192.168.*.*
    		我们的虚拟机ip都处于一个小型的私网中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    路由选择

    路由器为每一条流经路由器的数据选择一条合适的路径进行转发。

    首先,路由器进行路由选择之前会判断目标IP处于哪一个网络
    路由表:    route命令
    	每一个路由器都有一张路由表,记录了当前路由器所连的网络。
    	路由器对途径的数据,取出目标IP地址,与自己路由表中的路由表项进行比对,判断目标地址属于哪一个网络,判断完成之后使用连接这个网络的网卡将数据发送到指定网络
    	怎么比对?
    		路由表项中有自己支持的目标网络号、网关、子网掩码、连接网络的网卡信息和defult信息。
    		取出数据目标IP,与每一个支持子网掩码掩码相与得到目标IP的网络号,再与对应的路由表项中的网络号比对,不是则进行下一次比对,
    		如果网络号相同就使用对应的网关将数据发送出去;
    		如果都没有找到与对应IP网络号相同的就对应defult信息进行地址替换(子网IP换成局域网IP)在上层网络进行匹配。
    有很多路由表的生成算法。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    Linux fdisk实战
    git 时忽略某个文件或文件夹
    k8s可练习实验分享
    获取文件创建时间
    js 取整,保留2位小数
    深入了解 Redis 集群:分片算法和架构
    数学 (一个正整数分解成多个连续正整数的和) + 整数每次减少一位加和
    《Linux高性能服务器编程》--高级I/O函数
    GIS教程之哪种语言更适合地理可视化:R 还是 Python?
    R语言使用dplyr包的mutate函数基于自定义的组合判断条件将dataframe中的特定数值数据列进行因子化(分组、分箱)、并生成新的数据列
  • 原文地址:https://blog.csdn.net/Diligent_wu/article/details/121597508