【网络协议】网络层--IP协议

一、网络层的作用

  1. 路径规划
  2. 地址管理

TCP和UDP是传输层协议,关注的只是数据传输的可靠性和效率,真正负责数据在网络中的传输则是网络层和数据链路层。
我们再来回顾一下TCP/IP模型。
在这里插入图片描述
在网络中,数据的传输并不是直接从一方的传输层直接发送到另一方的传输层,而是需要将传输层的数据层层向下传递,经过网络层和链路层的层层封装,通过网络传输到另一方的链路层,再向上经过层层分用,最终传输层拿到数据,最后传给应用层。

那么网络层做的事情:

  1. 路径规划
    在保证数据传输的稳定性的情况下,选择最优(最快)的传输路线
  2. 地址管理
    数据从哪里来,到哪里去,需要将网络中的联网设备的位置信息用一个统一的标准给表示出来。

二、IP协议是什么?

IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。

三、IP报文格式

在这里插入图片描述

  • 版本: 占四位,目前的版本号只有两种,4和6,也就是IPv4和IPv6
  • 首部长度: 占四位,四个bit能表示0~15.它的单位是四字节,所以最大的IP报头为60个字节。
    图中已经标注了报头部分占20个字节,剩下的40个字节在‘选项’中,这一点和TCP报头相同。
  • 服务类型: TOS(type of service): 3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表⽰: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择⼀个.对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要.
    最小延迟:传输过程消耗的时间最短
    最大吞吐量:单位时间内传输的数据量
    最高可靠性:数据发生丢包的概率最低
    最小成本:系统最小的开销
  • 总长度: 整个IP数据包的长度。IP数据包并不是最高只能有64KB,IP拥有一个自动拆包和装包的功能,当长度过长时,就会自动拆成几个包,到达接收方就会自动再拼接好。
    在这里插入图片描述
    如图,当所要传输的数据报过长时,IP就会自动将其拆分成多段,分段进行传输,
    在到接收方后,再次进行拼接。
    拼接当然不是随机拼接的。
    标识就是可以知道哪个几个是一个整体,拼接时就会将这几个进行拼接。
    标志用于得知这个IP数据报是不是分片。
    片偏移就是可以知道这几个片段的位置,比如谁是报头谁是载荷,谁该放到什么位置

那么用这种方法,是不是就能解决UDP数据报的64KB长度大小限制呢?
答案是不可以
因为即使可以将UDP数据报拆分成几个分片
但在接收方还是要将他们组合在一起,组合成为一个数据报
在传输层要对UDP数据报进行解析,分析报头和拿到载荷
这里的拿到载荷需要根据UDP报头中的长度信息来拿到载荷,
此时你的载荷过长,而UDP报头中的长度信息表示范围有限,那么拿到的载荷就不完整

  • 标识: 唯⼀的标识主机发送的报⽂. 如果IP报⽂在数据链路层被分⽚了, 那么每⼀个⽚⾥⾯的
    这个id都是相同的.
  • 标志: 第⼀位保留(保留的意思是现在不⽤, 但是还没想好说不定以后要⽤到). 第⼆位置为1表
    ⽰禁⽌分⽚, 这时候如果报⽂⻓度超过MTU, IP模块就会丢弃报⽂. 第三位表⽰"更多分⽚", 如果分⽚了的话, 最后⼀个分⽚置为1, 其他是0. 类似于⼀个结束标记
  • 片偏移: 是分⽚相对于原始IP报⽂开始处的偏移. 其实就是在表⽰当前
    分⽚在原报⽂中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后⼀个报⽂之外, 其他报⽂的⻓度必须是8的整数倍(否则报⽂就不连续了).
  • 生存时间: 数据报到达⽬的地的最⼤报⽂跳数. ⼀般是64. 每次经过⼀个路
    由, TTL -= 1, ⼀直减到0还没到达, 那么就丢弃了. 这个字段主要是⽤来防⽌出现路由循环
    次数: 每经过一个路由器,次数就减一。减到0这个数据报就要丢弃。
  • 协议: 表⽰上层协议的类型
  • 首部校验和: 使⽤CRC进⾏校验, 来鉴别头部是否损坏
  • 源IP地址: 表示发送端
  • 目的IP地址: 表示接收端

源IP和目的IP地址是32位,也就代表IP地址是存在着上限的。
0~42亿9千万

解决IP地址不够用

那么就引入了几种解决方案来解决这个问题

1. 动态分配

也就说当机器上网时,才分配IP地址,不上网就不分配
这种解决方案没有从根本上解决问题。

2. NAT网络地址转换

  • 私网IP
    在这里插入图片描述

  • 公网IP
    外网IP 必须不能重复
    内网IP 在不同的局域网中,可以重复

3. IPv6

使用16个字节,128位,;但是⽬前IPv6还没有普及。

四、IP地址基本规则

1.网段划分

同一个局域网的主机,按照一定的规则分配IP地址
将一个IP地址分为两部分
前半部分,网络号:标识局域网
后半部分,主机号:区分同一个局域网中的主机
但是,网络号相同,不一定在一个局域网中
局域网之间,网络号可以相同,但两个相同的局域网(同一个路由器,WAN口和LAN口处于两个不同的局域网)网络号不能相同。

2.ABCDE分类划分

这种规则现在已经不再使用,取而代之的是子网掩码,接下来会讲到。
这种规则规定了网络号和主机号的划分。
一个网络号下,例如在A类地址中,一个子网下可以拥有一千六百多万的主机,而在现实的情况下,根本没有那么多的主机在同一个子网下运行,这就造成了IP地址的大量浪费。

在这里插入图片描述

  • 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地址是属于哪一类时,只需要遍历IP地址的前五个比特位,第几个比特位最先出现0值,那么这个IP地址对应就属于A、B、C、D、E类地址。

为了减少IP地址大量浪费的这种情况,引入了新方案CIDR(Classless Interdomain Routing):

  • 引⼊⼀个额外的⼦⽹掩码(subnet mask)来区分⽹络号和主机号;
  • ⼦⽹掩码也是⼀个32位的正整数. 通常⽤⼀串 “0” 来结尾;
  • 将IP地址和⼦⽹掩码进⾏ “按位与” 操作, 得到的结果就是⽹络号;
  • ⽹络号和主机号的划分与这个IP地址是A类、B类还是C类⽆关;

3.子网掩码(Mask)

是一个32位的整数
左半部分都是1,右半部分都是0
不会0和1交替出现。
在这里插入图片描述
这里我们的IP地址是 101.7.142.67
子网掩码是 255.255.225.0
那么我们的网络号就是101.7.142
主机号就是67

在另一篇文章中有对子网掩码的详细解读
子网掩码是什么?有什么作用?

4.特殊的IP地址

  • 将IP地址中的主机地址全部设为0, 就成为了⽹络号, 代表这个局域⽹;
  • 将IP地址中的主机地址全部设为1,就成为了广播地址。向广播IP上发送数据,就相当于向整个局域网中的设备发送数据。TCP不支持,UDP支持。
  • 127.*这样的IP地址就是环回地址(loopback)向这个IP发送数据,也是自己接收数据,一般是127.0.0.1

五、路由选择

在网络中,一个主机通过网络向另一个主机传输数据,之间要经过很多的路由器(自己家中的路由器,通信厂商的地区局部路由器,总路由器等),每一个路由器在传输数据时,可能并不知道直接的路径是什么,它只知道与它相连的路由器的路径,在这些路径中会选择一个比较快(近)的来及进行传输。

在传输过程中,是选择性的寻找最优解来进行传输。

  • 114
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 74
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱吃南瓜的北瓜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值