Linux:带你理解网络层IP协议


网络层

负责地址管理与路由选择:路由器(IP协议)

IP地址:无符号32位的一个整数,在网络中唯一标识一台主机(IP地址给主机的分配一定要保证唯一性)

IP协议头格式

在这里插入图片描述

  • 4位协议版本:IPV4 / IPV6
  • 4位头部长度:IP报头也是不定长的,最长60字节,最小20字节,有40字节的选项数据(以4字节为单位)
  • 8位TOS字段:3位优先权弃用,4位服务类型(最小延时,最大吞吐量,最高可靠性,最小成本),1位保留位必须置0
  • 16位数据报大小:包含IP报头在内的一个IP报文的大小,最大大小65535(意味着一个IP报文的最大长度不能超过64K)

tcp在传输层会自己选择合适大小MSS数据发送,udp报文数据最大大小应该小于64K-20-8

  • 16位标示:udp数据在网络层有可能会进行数据分片,标识当前分片属于哪个完整报文

  • 3位分片标志:1位保留,1位禁止分片标志 — 是否禁止分片,1位更多分片标志 - 类似于结尾标志

  • 13位分片偏移:以8个字节为单位,标识当前分片在完整报文中的位置(相对起始位置偏移量)

  • 8位TTL:报文最大生存周期 — 一个数据能够经过多少路由器,经过路由器就会-1,为0的时候则将数据丢弃(防止路由环路)

  • 8位传输层协议:在数据分用时,网络层取出数据,需要通过这个协议类型,决定传输层使用哪个协议对数据进行分用解析

  • 16位校验和:校验数据一致性

  • 32位源IP地址 / 32位目的IP地址:负责描述数据从哪个主机来到哪个主机去

  • 40字节选项数据:例如保留经过的路由器地址信息

注意:

  1. 网络层的数据分片

若传输层交付下来的数据大小过大,会在网络层将这个大数据截断为多个小的数据分片,然后每个分片封装IP报头进行发送,到达对端之后进行分片重组,组合成为完整的一个报文交付给上层。

  1. 传输层交付下来的数据大小过大,到底是多大就会分片?

这个大小取决于链路层最大数据帧的限制 — MTU(最大传输单元)

传输层tcp协议协商的MSS就是根据MTU计算得到的,因此tcp传输的数据到了网络层通常是不会进行分片的
但是udp协议传输数据,只限制数据小于64k-28就可以传输,但是若大于MTU大小就会在网络层进行数据分片 — 网络层数据分片主要针对udp

  1. 13位分片偏移,为什么要以8字节为单位?

13位能够表示的最大大小事 8192 = 2^10 * 2^3;但是一个完整的udp报文有可能是接近64K的大小,最后一个分片有可能偏移量都6万多了,13位的偏移大小是没法表示;
因此这个字段中的大小是以8字节为单位 8 = 2^3;这时候8192就表示具体的偏移量为 8192 * 8 = 64K;这样就可以完整表示偏移量了(因此每个分片除了最后一个,大小都是8的整数倍)

地址管理

网络非常大,人为分配是搞定不了的;只能机器分配 — DHCP — 动态地址分配

整个网络是由很多的小型网络组成的,按照网络进行地址分配,每个网络中的主机IP地址带有这个网络的标识符,只要每个网络的标识符不同,就可以保证分配的IP地址不同

IP地址的组成:网络号(网段) + 主机号

  • 网络号:用于标识当前的网络

一个路由器组建局域网的时候,所对应的网络表示(每个路由器对于接收到的数据进行源地址判断,这个网络是否属于自己的网络,属于才会转发,不属于则直接丢弃)

  • 主机号:主机号就是在局域网中大家拥有相同网络号的情况下,标识唯一的一个主机
网段的划分:

主机号的唯一,路由器很容易就可以实现;主要保证的是网络号如何划分?

  • 早期

将所有的IP地址划分为五类地址,组建什么样的网络,就使用什么样的网络号,分配什么样的地址。

在这里插入图片描述

  • A类:用于组建超大型网络,IP地址中:高一位固定为0,高七位是网络号,低24位是主机号 0.0.0.0 ~ 127.255.255.255
    比如我要组建超大网络,使用10.这个网络号,则这个网络的IP地址分配范围:10.0.0.0 ~ 10.255.255.255
  • B类:用于组建中型网络,IP地址中:高2位固定为10,高14位是网络号,低16位为主机号:128.0.0.0~ 191.255.255.255
  • C类:用于组建小型网络,IP地址中:高3位固定为110,高21位是网络号,低8位是主机号 192.0.0.0 ~ 223.255.255.255
  • D类:特殊网络,地址中:高4位固定为1110,28位多播组号
  • E类:特殊网络,地址中:高5位固定11110,27位保留

你要组建什么网络,然后去权威机构进行申请,分配一个网络号,接下来组建网络,主机号的分配由自己完成

随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就 分配完了, 而A类却浪费了大量地址;

  • 例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.
  • 然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了.

  • 当前划分方式 — CIDR方案

引入了一个新的字段 — 子网掩码

子网掩码:无符号32位的整数,不过数据由连续的二进制1组成(由一串“0”来结尾)

  • 子网掩码取反可以得到局域网中的最大主机号
    从0到最大主机号就是局域网中主机号的分配范围 255.255.255.0 — 255(0~255)
  • 子网掩码与IP地址相与,可以得到网络号
    路由器收到一个数据,拿数据的源地址与自己的网络号相与,看看与自己的网络号是否匹配

在这里插入图片描述

特殊的IP地址
  1. 主机号全为0的IP地址:网络号 — 用于标识网络(这个主机号不能分配给主机)
  2. 主机号全为1的IP地址:udp局域网广播地址(这个主机号不能分配给主机)
    udp支持局域网广播,将数据发送的广播地址,可以认为是发送给局域网中的所有主机(局域网所有主机都能识别)
  3. 127.0.0.1:这个地址是每个主机上都有的一个本地虚拟回环网卡地址(主要用于本机的网络测试)
  4. 0.0.0.0:这个地址适配本机上任意网卡地址,常用于服务端监听地址(监听本机所有网卡IP)
  5. 255.255.255.255:全网广播地址 — 任意一个主机拿到发往这个地址的数据都会认为和自己匹配(常用于DHCP广播)

路由选择

根据数据中的目的地址,来为数据选择一条合适的路径

每一个主机连接上路由器之后,都会全网广播dhcp请求,路由器收到后会进行回复:

  • dhcp响应:
  • 给主机分配的IP地址
  • 当前所在网络的子网掩码
  • 当前所在网络的网关地址

在这里插入图片描述

IP数据包的传输过程也和问路一样.

  • 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  • 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  • 依次反复, 一直到达目标IP地址;

如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表;

在这里插入图片描述

  • 如果目的IP命中了路由表, 就直接转发即可;
  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

在这里插入图片描述

  • 这台主机有两个网络接口,一个网络接口连到192.168.2.0网络,另一个网络接口连到 192.168.1.0网络;
  • 路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口
  • 拿到数据之后,根据数据的目的地址,与路由表中的每条信息进行比对(目的IP地址与对应网络的子网掩码相与,得到网络号,判断与对应网络的网络号是否相同)
  • 判断这个数据的目的主机是否属于这个网络,若属于这个网络,则使用加入这个网络的对应网卡将数据发送出去。若都没有对应,则发送到自己的网关设备上。

公网与私网(外网与内网)

  • 私网:仅限于网络内部通信的网络,无法连接外部
  • 外网:互联网

IPv4的IP地址不够用,除了DHCP动态地址分配技术(谁上网给谁分配地址)之外还有一种NAT技术 — 网络地址转换技术

一个路由器可以组建一个私网,仅限于私网内部通信,若要进行外部通信,则大家使用同一个对外IP地址进行上网,这样的话,只要保证相邻的两个私网网络号不同,分配的地址不同,其他的私网之间,IP地址是否冲突就不重要了。

  • 只要保证不与外部的IP地址冲突就行,但是相邻的两个网络不能使用相同的网络号
  • 网络是否相邻,主要取决于路由器的连线,与路由器相连线的网络都属于相邻网络

在RFC1918中规定,能够用于组建私网的地址有以下几种

大型私网中型私网小型私网
10. * . * . *172.16. * . * ~172.31. * . *192.168. * . *
  • 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的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.

知识点习题

在这里插入图片描述

  1. 下列关于TCP,UDP,IP协议的定义及主要有什么作用描述正确的有?(多选)

A.UDP,TCP 在传输层,IP在网络层

B.IP协议负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机

C.TCP在传输层负责传送数据,并且确定数据已被送达并接收。

D.UDP提供的是一种可靠的数据流服务,TCP相反

正确答案:AC

Ip协议是不可靠的,不能保证每一数据块均能到达目的主机。

  1. 关于IP地址下列说法错误的是?

A. IP地址采用分层结构,它由网络号与主机号两部分组成
B. 根据不同的取值范围IP地址可以分为五类
C. 202.112.139.140属于B类地址
D. 每个C类网络最多包含254台主机
E. IPv6采用128位地址长度
F. A类,B类和C类地址为内部私有地址

正确答案: CF

答案解析:

  • A类地址: 1.0.0.1—126.155.255.254
    ① 10.X.X.X 是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。
    ② 127.X.X.X 是保留地址,用做循环测试用的。

  • B类地址: 128.0.0.1—191.255.255.254 。
    ① 172.16.0.0—172.31.255.255 是私有地址
    ② 169.254.X.X 是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。

  • C类地址 : 192.0.0.1—223.255.255.254 。
    192.168.X.X 是私有地址。

  • D类地址 : 224.0.0.1—239.255.255.254

  • E类地址 : 240.0.0.1—255.255.255.254

  1. 关于IP报文头的TTL字段,以下说法正确的有( )(多选)

A. TTL的最大可能值是65535
B. 在正常情况下,路由器不应该从接口收到TTL=0的报文
C. TTL主要是为了防止IP报文在网络中的循环转发,浪费网络带宽
D. IP报文每经过一个网络设备,包括Hub、LAN SWITCH和路由器,TTL值都会被减去一定的数值

正确答案: B,C

答案解析:

TTL(time to live)生存时间字段设置了IP数据报能够经过的最大的路由器数,TTL字段是由发送端主机初始设置的,以防止数据包不断在IP互联网络上永不终止地循环。每个处理该数据报的路由器都需要将其TTL值减1,当路由器收到一个TTL值为0的数据报时,路由器会将其丢弃,TTL的最大值是255。

  1. 局域网ip地址不够用怎么解决?

一、改子网掩码

因此当子网掩码设置成255.255.255.0时,路由器下面的局域网最多只能"254台"电脑分配相对独立的IP地址。

要想增加局域网IP,那么可以修改下子网掩码就可以了,比如子网掩码从255.255.255.0修改成255.255.0.0,那么我们局域网里面的电脑IP就相当于可以设置254乘以254台电脑,有64516个IP地址。

而IP的第三个X也可以从0到255之间任意一个数字变192.168.X.X。

如果还要更多,那么可以设置成255.0.0.0,局域网就可以拥有254254254台电脑。

不过这样设置的话相当于这些所有电脑都处于一个局域网里面,而且可以相互访问,容易引起“网络风暴”。

二、增加路由器的方法

也可以通过路由器后面再接路由器来分成多个网段,不过这种方法不太超大型网络。

在这里插入图片描述

如果原来的网段为192.168.1.1。那么可以新增网段,192.168.X.1 。

操作步骤:新增加一个路由器即可!分配一个IP地址给新增的路由器静态IP绑定下,然后如果想省事可以启用DHCP,如果不想省事就自己设置IP地址。

路由器的网关一定要改!一般默认的都是192.168.0.1 或 192.168.1.1 ,你新增网段的网关应该是192.168.X.1切记!

如果你新设置IP地址设置为192.168.2.1的话。新路由器的IP地址池可以为 192.168.2.2~~~192.168.2.254之间。

连接方法: 之前的路由器LAN口和现在路由器的WAN口相连接。 然后你新的路由器就可以上网了。可以再接一个交换机插在新路由器的LAN口。

三、划分vlan(没有掌握)

最好的方法是通过设置虚拟局域网“VLAN”,将局域网里面的电脑分成多个虚拟的局域网,可以减少网络风暴,而且可以提高交换机跟路由器的工作效率。有的交换机自带有VLAN接口,那么只要将网线按需要分别接到相应的网段。

在这里插入图片描述

通过子网划分!你可以将IP地址设置成192.168.0.0/23

那么可以划分192.168.0.x和192.168.1.x二个网段,增加了IP的数量,当然也可以续继续划分多个网段。

网段一:192.168.0.x,192.168.0.1——192.168.0.254

网段二:192.168.1.x ,192.1681.1——192.168.1.254

这样192.168.0.x和192.168.1.x就可以互通,而不需要其他设备。

  1. 两台主机A、B 通过网线直连,A的IP得知是128.255.36.48,A、B两台主机网口网络掩码均为255.255.255.0,主机B可用如下哪些IP地址与A进行通信?

A. 128.255.40.1
B. 128.255.39.0
C. 128.255.35.180
D. 128.255.36.255

正确答案: D

答案解析:

设置两台电脑的IP地址使其在同一个网段。

  • 子网掩码取反可以得到局域网中的最大主机号

  • 子网掩码与IP地址相与,可以得到网络号

  1. 如果C类子网的掩码为255.255.255.240,则包含的子网位数、子网数目、每个子网中的主机数目正确的是()

A. 5 30 6
B. 4 14 14
C. 2 2 2
D. 3 6 30

正确答案: B

答案解析:

240: 1111 0000

C类网络默认掩码是24位,现在是28位。前4位为子网位数,后四位为主机位数

子网位数:4
子网数目:24 - 2 = 14
子网的主机数目:24 - 2 = 14

因为都要去掉全0全1的ip

  1. 在掩码为255.255.224.0条件下,下面哪些 ip 地址属于同一网段()

A. 192.168.67.28
B. 192.168.248.187
C. 192.168.235.25
D. 192.168.188.99

正确答案: B、C

答案解析:

255.255.224.0 : FF FF 1110 0000 0000 0000

判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网。

67: 0100 0011
248: 1111 0110
235: 1110 1011
188: 1011 1100

前3位相同的位 248 和 235,所以选 BC

  1. 某路由器收到了一个IP数据报,在对其报头进行校验后发现该数据报存在错误,路由器最有可能采用的动作是( )。

A.抛弃该数据报
B.将该IP数据报反给源主机
C.通知目的主机数据报出错
D.纠正该数据报的错误

正确答案:A

答案解析

当数据报出错后,路由器往往会抛弃该数据报并向源主机发送IGMP报文报告出错信息。

  1. 1.1.1.1/29 这个ip段表示多少范围?

29就是有29个1,即掩码为:11111111 11111111 11111111 11111000 = 255.255.255.248

ip段表示的范围是 1.1.1.0~1.1.1.7


如果本篇博文有帮助到您,请动动您的小手,点赞激励博主呐~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值