Linux_网络_网络层协议 IP(报文结构,报头字段,网段划分,子网掩码,公网IP与私网IP,路由转发)

14 篇文章 3 订阅

网络层解决的问题:将数据从一台主机发送到另一台主机。

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

节点:主机与路由器的统称

1. IP协议

TCP协议:为IP协议提供策略支持,IP协议拥有通信的能力,TCP通过自己的决策,保证了IP协议在通信时的可靠性。同时TCP还负责将数据交付到上层的应用层。

IP协议:知道目的IP地址,经过路径选择,将数据跨网络传送到对端主机的功能。

路径选择是靠路由器实现的,前提是路由器的路由表已经建立。

IP协议报头字段

报文格式为:
在这里插入图片描述

  • IP协议报头与有效载荷的分离

IP协议报头与TCP相似。除了报头选项字段后长度固定为20字节。读取前20字节后,通过4位首部长度可以找到报头的总大小

在这里插入图片描述

与TCP相似,这个4位首部长度每单位是4字节,所以报头长度最大为60字节(选项最大为40字节)
在这里插入图片描述

再根据报头的16位总长度获取到IP协议报头+有效载荷的总长度。

综上,上述两个字段实现IP协议报头与有效载荷的分离

UDP中有16位UDP总长度

TCP中没有类似字段,因为TCP是面向字节流的。TCP只是将有效载荷拷贝到缓冲区即可,至于报文之间的区分由上层来做。

IP协议需要16位总长度,因为IP报文在网络中以一批一批的IP数据报发送,接受时需要处理每一个IP报文的有效载荷,不能出现粘包问题,需要区分不同的IP报文,需要16位总长度字段。


  • IP协议将有效载荷传递给上层(分用)

在这里插入图片描述

IP协议报头上的8位协议字段:表示上层协议类型编号,系统根据这个编号来将有效载荷传递给上层的协议。


4位版本
在这里插入图片描述
指定IP协议的版本,对于IPV4来讲为4。


8位服务类型
在这里插入图片描述
3位优先权字段(弃用),4位TOS字段,1位保留字段(设置为0)。

TOS字段分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。
注意:这些字段互相冲突,只能选择一个。eg:对于ssh选择最小延时,ftp选择最大吞吐量等等


8位生存时间
在这里插入图片描述
记录一个IP报文可以经过的节点总数,每经过一个节点,生存时间-1,当生存时间为0时报文自动丢弃


16位首部校验和

在这里插入图片描述
对收到的IP报文进行校验,当报文出错后,报文丢弃。重传文体靠TCP决策


32位源IP与目的IP
在这里插入图片描述
源地址与目的地址:在套接字中将自己的IP地址和对端IP地址填写到sockaddr_in结构体中,IP地址根据这两个地址进行通信。


IP可以进行跨网络通信,首先要把数据从本机送到与本机直接相连的主机上。(数据链路层MAC协议)

MTU

其中MAC携带的最大有效载荷长度mtu不能超过1500字节,mtu包含了IP的报头+IP有效载荷
在这里插入图片描述
如果超过1500字节(MTU),IP须将数据分片发送。

如果分片发送,到对端IP协议还需要进行组装。
注意:每一片都有IP报头。

16位标识
在这里插入图片描述
唯一标记主机发送的报文,如果IP报文在数据链路层分片,每片的标识都是相同的,代表属于一个IP报文。


13位片偏移
在这里插入图片描述
分片后,相对IP报文开始处的偏移量(当前片在原报文的位置)


正常情况组装时:

  1. 先根据16位标识符,找到所有标识符相同的报文
  2. 再根据偏移量从小到大排列,将所有片拼接起来。

判断所有片都收到是根据3位标志字段:

3位标志字段
在这里插入图片描述

  • 第一位保留
  • 第二位为1代表禁止分片(如果此时超过mtu会直接丢弃报文)
  • 第三位表示更多分片,如果分片,每片报文第三位设置为1代表后序还有分片,整个报文的最后一片这个字段设置为0,代表最后一片。(不分片的报文这一位设置为0)

根据13位片偏移和3位标志字段来判断是否丢包:

  1. 根据片偏移从小到大排列完毕后,如果第一片片偏移不为0,代表首报文丢失。
  2. 如果最后一片标志位第三位不为0,代表最后一片报文丢失。
  3. 当前报文的片偏移量+当前报文长度=下一片报文的片偏移量,根据这个公式来判断中间报文是否丢包。

注意:
如果一个报文分太多片,会增加丢包概率。分片这种情况是少概率事件。

为了减少IP传输时分片,传输层要控制传递数据的大小。TCP在3次握手时双方会建立MSS(最大传输尺寸)

2. 网段划分

IP的构成:
目的IP=目标网络+目的主机。这样划分为了提高检索效率。

eg:IP协议将数据从A主机跨网络发送给B
首先,先找到B主机所在的网络,其次在网络中找到B主机。

这种将网络分成不同局域网方便检索的模式就是网段划分。

网段划分的方式

  • 同一个子网其实是把相同的网络号主机放到一起。不同网络号的主机属于不同的子网。
  • 同一个子网不同主机的主机号不同,但网络号相同。

通过设置网络号和主机号可以标记互联网的唯一 一台主机

DHCP
自动给子网内新增的主机分配IP地址,不需要手动分配IP。(一般路由器自带这项服务,所以路由器又称DHCP服务器)。

粗粒度划分5类IP

在这里插入图片描述

如果IP首位为0,直接去A类网络找下一个子网,不需要从其他类找,提高了检索效率。

类似的区分其他不同类网络,根据下一个比特位来确定。

eg:A类网络IP中还有7位网络号,说明在A类网络下最多还可以有2^7个局域网。

  • 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

子网掩码

随着网络发展,上述划分局限性越来越明显,IP浪费很严重。

eg:
申请B类网络,理论上一个子网上可以拥有6万多个主机,实际上一个子网不可能有这么多主机,其他空余主机位置全部被浪费了。

这里引出CIDR划分方法(子网掩码)

  • 引出子网掩码来区分网络号与主机号
  • 子网掩码是32位正整数,通常以0结尾
  • 将IP地址与子网掩码&操作,可以得到网络号

eg:
主机IP地址:192.168.3.10
子网掩码(mask):255.255.255.0

192.168.3.10 & 255.255.255.0=192.168.3.0(网络号)

每一个子网都具有子网掩码和网络号。

目的IP与当前子网的子网掩码&后找到对应网络号,与路由器中每个子网的网络号对比,找下一个子网。重复上述过程,直到找到对应主机。

①、缺省子网掩码

也叫默认子网掩码,即未划分子网,对应的网络号的位都置 1 ,主机号都置 0 。

未做子网划分的IP地址:网络号+主机号

A类网络缺省子网掩码: 255.0.0.0,用CIDR表示为/8

B类网络缺省子网掩码: 255.255.0.0,用CIDR表示为/16

C类网络缺省子网掩码: 255.255.255.0,用CIDR表示为/24

②、自定义子网掩码

将一个网络划分子网后,把原本的主机号位置的一部分给了子网号,余下的才是给了子网的主机号。其形式如下:

做子网划分后的IP地址:网络号+子网号+子网主机号

如:192.168.1.100/25,其子网掩码表示:255.255.255.128

25个1
子网掩码:11111111.11111111.11111111.10000000=255.255.255.128

特殊的IP地址

  • IP地址的主机号全0,代表网络号,表示这个局域网,eg:192.0.0.0
  • IP地址的主机号全1,代表广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
  • 127.*的IP地址用于本地环回,通常是127.0.0.1

IP地址的数量限制

IP地址(IPV4)是4字节32位一共有2^32个IP地址,大约43亿左右。
由于特殊IP地址存在数量要比43亿还要小

CIDR(子网掩码)在一定程度上缓解了IP浪费文体,但还是IP地址相对于全球还是不够用。

以下三种方式解决

  • 动态分配IP地址,只给接入网络的主机分配IP地址(因此同一MAC地址设备,每次上网时IP地址可能不同)
  • NAT技术:地址转化协议
  • IPV6(IPV6与IPV4不兼容,IPV6使用16字节128位来表示一个IP地址)

3. 公网IP与私网IP

所有IP地址=公网IP+私网IP

网络规定,公网IP与私网IP相互独立,没有交集。

  • 10.*开头的IP是私网IP,前8位是网络号,共有16777216个地址。
  • 172.16——172.31,前12位是网络号
  • 192.168.*开头,前16位是网络号

上述范围的IP地址是私网IP,其余IP地址都是公网IP。
局域网IP是可以重复的,因为使用的网络并不是公网IP,而是路由器设备构建出的局域网。所以私有IP不能出现在公网上,否则会出现歧义。

一般来讲,局域网的1号主机就是路由器。

路由器是连接多个局域网的设备
对于本局域网的网口IP称为LAN口(局域网的子网IP),当路由器想要访问外网时网络接口称为WAN口。这个网络路由器的WAN口可能作为下一个网络LAN口。

跨网络通信的细节如下:
在通过局域网路由器时,目的IP不变
源IP替换为路由器的WAN口地址

将数据从主机发送到服务器:
在这里插入图片描述
服务器将处理数据发送回主机涉及MAC协议,先空开不谈。

之所以这样发送网络数据,是因为IP地址不足。

4. 路由转发

IP地址转发基本思路:以数据从主机A到主机B来看
在这里插入图片描述

所以:每一台网络中的设备都有路由表
在这里插入图片描述
link-local指的是默认路由,如果路由表查不到时,会交给默认路由进行发送。

数据在发送时先在本机上查找路由表,如果查到了同属于同一局域网,则不需要路由器转发。如果查不到,说明发送的不在一个局域网,需要路由转发离开局域网(默认路由)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NUC_Dodamce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值