IP协议

本文详细解释了IP协议头格式、网段划分、特殊IP地址、公网与私有IP的区别,以及WAN口和LAN口IP的作用。探讨了路由、数据链路层要求、分片与组装,以及MAC帧封装和局域网通信原理。重点强调了TCP在提供可靠传输中的作用和IP地址作为网络标识的重要性。
摘要由CSDN通过智能技术生成

0. 前言

举个例子:

假设张三跑五公里很快,有着极大的概率,每次都能跑进20分以内,但是着不代表着张三每次都能跑进20分。

李四是张三的班长,为了保证张三每次都能跑进20分,于是定制了策略:跑进20分,可以2天不用跑;如果没跑进,这次成绩不算,重新跑,直到跑进为止,然后记录成绩。

这样张三每次五公里成绩记录每次就是20分以内了

以上例子,张三就是TCP协议,李四就是IP协议

  • TCP协议并没将数据发送到网络当中,而是提供可靠的策略
  • IP协议提供能力,能将数据跨网络发送

IP协议的本质就是提供一种能力,将A主机发送到B主机

上层用户并不需要这种能力,上层用户需要的是可靠的将数据跨网络发送


一个局域网的A主机要将数据发送到另一个局域网的B主机,是要经过很多路由器的,这就需要对每台主机进行标识,即源ip目的ip

《西游记》中,唐僧去西天取经,西天这么大,他要去指定的地点大雷音寺,即:

  • 目标城市:西天

  • 目标地点:大雷音寺

ip地址是由目标网络 + 目标主机构成的,打个比方:

我们学生有学生证号,但是这个学生证号里面是含义信息的,例如2340210128,前面的2340代表着学院专业编号,210代表着是哪个年级,128代表着哪个班的多少号。我们这里简化一下,学生证号 = 学院编号 + 学号

假设小李是计算机学院的他捡到一张学生证,一看学号并不是计算机学院的,如果他很耿直,站在人流量较大的路边,碰见一个人就问:“同学这是你的学生证吗?”,这样问一天可能都问不到,甚至一直问不到,这就是直接遍历。

这时有人提出建议“小李,你直接给你辅导员吧,辅导员他们可能有一个大群,里面有学校所以的辅导员,让她发群里”,这样小李就将这个学生证给了辅导员小赵。当辅导员小赵拿到这个学生证之后拍照发到了大群,问这是哪个学院的,该学院辅导员看到之后,申领这个消息,然后再转发到学院群,问这个哪个学生的,这样,这个学生证就匹配到了该学生。

通过这种方法,一次性排除了一大批人,排除的效率高了

image-20240326153627240

1. IP协议头格式

image-20240326155441096

  • 4位版本:指定IP协议版本,IPV4就是4

  • 4位首部长度:IP协议标准格式为20字节,4位的范围位[0, 15],因此范围是20~60字节

  • 8位服务类型:3位弃用(优先权字段),4位TOS字段和1位必须保留字段
    4位TOS表示:最小延迟、最大吞吐量、最高可行性、最小成本,这四字相互冲突,只能选择一个

  • 16位总长度:IP协议报文的总长度

UDPTCP是没有总长度字段的,这说明不管是UDP还是TCP都要把数据交给IP层,所以不管是字节流还是数据报,最后都是数据报

  • 8位生存数据:IP报文再转发的时候,可能会经过多个路由器,每经过一个路由器TTL(一般是64)就-1,如果到0了还没到达,那就丢弃了

  • 8位协议:要将IP的有效载荷交给上层的哪个协议

  • 16位首部校验和:使用CRC进行校验, 来鉴别头部是否损坏

  • 32位源IP地址、目的IP地址:表明发送端和接收端

    TCP提供端口号,IP提供IP地址,因为TCP是在双方的系统当中的,而中间的路由器是没有TCP层的(路由器只工作在网络层)

    由于IP报头源IP和目的IP是四字节,所以才需要将点分十进制的IP转换成4字节的IP

2. 网段划分

上面提到IP地址是分为两部分的:

  • 网络号:保证互相连接的网段具有不同的标识
  • 主机号:同一网段内,主机之间具有相同的网络号,但主机号不能相同
  1. 路由器本质也是子网的一个主机,所以路由器也需要配置IP地址;
  2. 路由器要进行数据包转发,所以路由器一定会至少同时连接2个子网,也相当于同时在2个子网及以上(简单理解路由器有多张网卡)
  3. 路由器一般是子网的第一个设备,IP地址一般是网络号.1
  4. 路由器功能不仅仅能对IP报文进行转发,还要很多功能(构建子网、对子网的IP进行管理…)

IP用32位标识,2^32约为42亿多,但是全球的人数,远远大于42亿,这就说明**IP地址是有限的资源**,这个有限资源是需要各个国家分配的。

历史上曾经提出过一种方式:

IP地址分为5类:

image-20240326175432751

(图片来源:数据分析该知道的IP地址知识

这种方案随着互联网的快速发展,这种方案的局限性就出来了,B类网络网络号多,主机号也不少,大部分组织都喜欢申请B类网络,导致B类网络很快就被分配完了

B类一个子网能允许6万5千多个主机,而A类更多

但是在实际上,一个子网不会存在这么多的主机,这就导致了大部分的IP地址都被浪费了

针对这种情况,提出了一个新方案CIDR

在原来的基础之上引入子网掩码来区分网络号和主机号;

子网掩码也是32位的正整数,通常用一串0来结尾;

IP地址和子网掩码进行按位与操作,得到的结果就是网络号;

网络号和主机号的划分与A、B类…无关;

子网掩码被配置在路由器当中。

IP地址140.252.20.68
子网掩码255.255.255.0:/24
网络号140.252.20.0
子网范围140.252.20.0 ~ 140.252.20.255

140.252.20.0140.252.20.255这两个IP地址是不用的,前者叫网络号,后者叫广播

这虽然了缓解资源的浪费,但是资源仍然是不够的,采用以下三种方式解决:

  • 动态IP:只给入网的设备分配IP,因此同一个MAC地址设备每次接入网络,得到的IP地址不一定是相同的

  • NAT技术

  • IPv6:IPv6和IPv4是两个完全不相干的协议,彼此不兼容,目前还未普及

    用16字节128位表示一个IP地址

    我们国家是IPv6的技术是世界最顶尖的

3. 特殊IP地址

  • IP地址中的主机地址全部设为0,就成了网络号,代表这个局域网
  • IP地址中的主机地址全部设为1,就成了广播地址,用于给同一链路中互相连接的所有主机发送数据包
  • 127.*IP地址用于本地环回测试,通常是127.0.0.1

4. 公网IP和私有IP

如果组建内部局域网,IP地址只用于局域网通信,不连接到Internet上,理论上可以随意使用IP地址,但是RFC 1981规定用于组建局域网的私有IP:

  • 10.*,前8位是网络号,共16777216个地址

  • 172.16. ~ 172.31. ,前12位是网络号,共1048576个地址

  • 192.168.*,前16位是网络号,共65536个地址

    包含在这个范中的,都是私有IP,其余的都是公网IP

    image-20240326190521959

    云服务器内网IP

我们之前一直用的都是私有IP,云服务器采用公网IP登录

image-20240326190833815

谈谈运营商

要上网之前,需要联系运营商,让工作人员来接网线,给我们装一个路由器,交钱之后在运营商内部注册账号密码,然后每次上网的时候,在经过运营商验证,然后就可以入网了。

路由器还有一个功能就是构建局域网,所有我们可以给路由器本身设置账号和密码,然后家里人就可以一起使用了。

路由器有2套账号密码

我国不管是大城市还是小乡村,都可以上网,这就得益于我国的网络基础设施建设,国家提供经济支持运营商进行基础设施建设,就有了很多网民,人一多,需求就多,然后就孵化出了大大小小的互联网公司,互联网公司一起来,提供了岗位,带动了经济,国家还能通过税收资金回流,这样的循环,就使我国网络越来越发达。

WAN口IP和LAN口IP

我们目前都是使用的内网IP,内网IP是不能够出现在公网的。

我们的路由器有子网IP和WAN口IP:

  • 子网IP:家里所使用的IP
  • WAN口IP:家里的路由器和运营商是构建子网的,相当于运营商的内网IP

image-20240327174327850

当我们要访问公网的时候,先是转交给路由器,路由器发现我们要出去,访问的目标不变,源IP变为WAN口IP转发出去;

到运营商公网出口路由器之后,访问目标依旧不变,源IP变为WAN口IP转发到公网。

这私有IP不断替换的过程,叫做NAT技术

所有整个互联网世界,采用的是公网+私网构成了现在的互联网

5. 路由

网络层是由操作系统实现的,所以我们的主机也是可以工作在网络层的,可以用route指令查到本地的路由表。

image-20240327204415683

我们查路由表的时候,用目标主机的IP地址&Genmask,然后与Destination做对比,比对结果分几种情况:

  • 给出具体下一跳
  • 不知道,转到默认路由(同一网段的另一台路由器)
  • 到达入口路由器

这样就会越来越接近目标网络,又因为IP = 目标网络+目标主机,所以在转发的时候,我们是先到达目标网络的。

6. 数据链路层要求

实际上一台主机中,报文也并没有通过网络层直接发送到对方主机,而是继续向下交付(数据链路层)。

而数据链路层规定,一次不能发送过大的报文,这就表明上层不能给它交付过大的报文。

TCP流量控制,当网络情况良好,对方接收能力良好,可以直接发送大量的数据,而是将数据分成了一个一个的数据段,就是因为数据链路层不能收太大的报文

数据链路层能转发的最大字节数:

image-20240327210150050

如果上层的数据就是特别大,这就需要IP层进行分片操作

7. 分片与组装

  • **16位标识:**每个报文都有自己的编号,而分片之后的报文,编号是相同的

  • **3位标志:**第2位为0表示允许分片,第3为表示结束标记(最后一个小包为0)

  • **13位片偏移:**每一位在原始报文偏移量

如何判断是否分片:

正常报文片偏移都是为0,如果不为0,则一定是分片的报文

如果是第一个,有3位标志位的第3位标识

判断条件片偏移!=0 || 更多分片 == 1

如何保证分片全部聚集在一起:

  1. 丢第一个
    如果丢的是第一个,拼报文的时候,发现没有片偏移位0的,就能分辨出来第一个丢失

  2. 丢最后一个

    所以报文都收到,但没有结束标记的(标志第3位位0的),就能发现最后一个丢失

  3. 丢失中间
    分片排序的时候,前面报文的长度是下一个的片偏移,这样能识别出来

每个分片都是要加上IP报头的

但是分片并不是很建议,因为分片多了,发送的数据包就多了,这样就增加了丢包的概率,这个由TCP来控制

TCP有滑动窗口,但是还是分为了一小块一小块的,这就是因为数据链路层发送的报文不能太大,所以要一小块一小块发送,这个叫MSS

这样上层有了MSS,下层有MTU,就能减少IP的分片

8. 数据链路层

在网络层决策是转发到同一个网段的其他主机还是下一跳

网络层解决的是将报文从A主机发到B主机当中,要解决这个问题之前,要先解决这么将报文从A主机转发到相连的路由器当中

数据链路层解决的就是直接相连的主机(包括路由器)之间数据交付的问题

每个网卡都有自己唯一的MAC地址,这个主要用来区分在同一个局域网当中区分特定的主机

9. mac帧封装与解包

image-20240327221829768

mac帧采用的是定长报文,根据定长的报头就可以将报头和有效载荷分离:

  • **目的地址:**要去的目标主机的mac地址

  • **源地址:**本台主机的mac地址

    • **类型:**分别对应IP、ARP、RARP
      image-20240327222640279

10. 局域网通信原理

image-20240327223617134

同一局域网内,一个主机向另一个主机发送消息,其他主机是能收到的,对比目的地址,不是自己就直接丢弃了;如果是就接收报文做出处理。

可能同一时刻多头主机都发送消息,数据帧会发生数据碰撞,但是这个可以检测到,要进行碰撞避免算法,避免同时发送。

这就是mac数据包为什么有限制,因为短的数据包能够很快的放到局域网当中,这样就能将更多的报文在局域网当中发送

image-20240327225446887

mac帧只在局域网内有效,因为在网络层核对完毕之后,如果不是,根据路由表,会重新发送到指定路由器,然后重新封装mac帧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

加法器+

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

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

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

打赏作者

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

抵扣说明:

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

余额充值