IP协议格式解析
画图解析IP协议报头成员:
![在这里插入图片描述](https://img-blog.csdnimg.cn/06e80c4271014cd5add6966539b75027.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGlsaWdlbnRfd3U=,size_19,color_FFFFFF,t_70,g_se,x_16)
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字节网络数据:某些情况下使用,比如路由追踪
地址管理
IP地址的管理:
IP地址:在网络中唯一标识一台主机
IPV4:uint32_t类型的整数
管理:根据网络不同进行分配
IP协议地址组成:
网络号:是一个网络的标识,每个网络中所分配的IP地址都包含对应的网络号
主机号:一个主机在一个网络内部的标识
只要使用不同的网络号并且每个网络中的主机号不用就可以实现IP不同。
网段的划分:
32位地址
A类网段:
高1位固定为0,7位网络号,24位主机号
用于组件超大型网络,127是网络号,2^24个主机(一千六百多万个)
A类范围:0.0.0.0 ~ 127.255.255.255
B类网段:
高2位固定为10,14位网络号,16位主机号
用于组建中型网络,191.256是网络号,2^16个主机(65535个)
B类范围:128.0.0.0 ~ 191.255.255.255
C类网段:
高3位固定为110,21位网络号,8位主机号
用于组件小型网络,223.255.255是网络号,2^8个主机(256个主机)
C类范围:192.0.0.0 ~ 223.255.255.255
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个
一个公司中申请了一个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
特殊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.节省公网地址的使用
建立一个私网,可以使私网中的主机使用同一个公网进行上网。
RFC1918文档中规定用于组建私网的地址:
10.*.*.* 172.16.*.* 192.168.*.*
我们的虚拟机ip都处于一个小型的私网中
路由选择
路由器为每一条流经路由器的数据选择一条合适的路径进行转发。
首先,路由器进行路由选择之前会判断目标IP处于哪一个网络
路由表: route命令
每一个路由器都有一张路由表,记录了当前路由器所连的网络。
路由器对途径的数据,取出目标IP地址,与自己路由表中的路由表项进行比对,判断目标地址属于哪一个网络,判断完成之后使用连接这个网络的网卡将数据发送到指定网络
怎么比对?
路由表项中有自己支持的目标网络号、网关、子网掩码、连接网络的网卡信息和defult信息。
取出数据目标IP,与每一个支持子网掩码掩码相与得到目标IP的网络号,再与对应的路由表项中的网络号比对,不是则进行下一次比对,
如果网络号相同就使用对应的网关将数据发送出去;
如果都没有找到与对应IP网络号相同的就对应defult信息进行地址替换(子网IP换成局域网IP)在上层网络进行匹配。
有很多路由表的生成算法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)