网络层 IP协议(第一部分)

IP 协议

1)地址管理 针对网络上的各种设备,所在的位置,进行描述和区分 => IP 地址

2)路由选择 网络结构非常复杂 挑选出合适的路径

先认识 IP 协议的报文结构

有点像 TCP/UDP 的报文结构

ipv4,ipv6 其他版本没有大规模推广使用

IP 协议中,报头也是变长的(包含选项的)

0 - 15单位 4 字节, IP 报头的最大长度 60 字节

其中只有 4 位是有效的

最小延时: 发送时间和收到数据的时间尽量短

最大吞吐量: 单位时间内传输的数据尽可能的多

最高可靠性: IP 本身并不考虑可靠性在 IP 层面上尽量减少丢包的概率

最小成本: 消耗的系统资源最少

IP 数据包, 报头 + 载荷 总长度

对于单个 IP 数据报来说,是的.但是,如果需要在 IP 数据报中携带超过 64KB 的载荷数据的时候, IP 协议也是可以做到的

IP 协议自身也是支持拆包/组包

如果传输层数据包太长了,IP 自动拆成多个,每个 IP 数据报,负责携带一部分传输层数据包

UDP 来说,载荷太大了,G了,除非应用层,自己写代码实现拆包和组包

长度超出64KB 一个IP 数据报就自动拆包

接收方收到这些IP数据报就能把载荷组装到一起,拼接成完整的 TCP 数据报

上述的拆包组包的过程是如何实现的呢?

16位标识位:拆出来的多个 IP 数据报标识是相同的

3位标识位:有一位不用,有一位表示当前是否触发了拆包,有一位表示这个IP数据报是否是最后一个数据包

当前的 IP 数据报能够在网络上存活多久

初始情况下是一个 32/64/128单位不是"时间"而是"次数"

数据报每次经过路由器转发一次,TTL -= 1,如果TTL为 0 了,要没有到达对方,就可以认为包永远也到不了了,就可以丢弃了。

tracert www.xxx.com 通过这个命令可以追踪,中间的转发节点都有哪些

进行 IP 数据报转发的时候,必须要根据目的 IP,进行转发,万一数据报中的目的 IP 是错误的,此时这个数据包是不可能到达对方的,也不应该在网络中被"无限的转发"

六度空间理论

类似于 TCP/UDP

描述的是当前的 IP 数据报,载荷部分,是使用的那个协议(传输层协议)

协议类型

接收的时候,分用的时候,就需要知道当前数据包载荷是使用那种协议

传输层的协议中,"目的端口"就解决了这个问题(解决了 传输层的数据包载荷,交给应用层的哪个协议(应用程序)来处理)

网络层的协议中,"8位协议"区分载荷交给传输层的哪个协议来处理

计算校验和,本身都是需要有开销的,IP协议只关心 IP 报头自身是否出现传输错误,载荷部分的传输层数据,自然有 TCP/UDP负责校验

IP 地址,标识了网络上某个设备所处的位置

IP 地址采用点分十进制的标识,通过 三个点,把一个 IP 地址分成 4 个部分,每个部分 1个 字节,每个部分的取值 0-255,站在计算机的角度,识别/存储 IP 地址,直接使用 32 位的整数进行

理论来说,需要给不同的设备分配不同的 IP (IP 地址应该是唯一的)

32位的整数,表示的范围有多大?(0 - 42亿9千万)

IP 地址不够用怎么办?

1.动态分配 IP 地址(上网在分配,不上网就先不分配)

早期,IP 地址不是很紧张的时候,是可行的

后来,IP 地址紧张程度进一步提升了

2.NAT 机制(网络地址映射)【核心方案】

把所有的 IP 分成两个大类

1)外网 IP / 公网 IP

1)内网 IP / 私网 IP

a)10.*

b)172.16 - 172.31.*

c)192.168.*

家用路由器,一般都是 192.168 开头的内网 IP,局域网内部使用的(保证内网 IP 在一个局域网中不重复即可)

不再是每个设备都有唯一的 IP 地址了,允许不同的局域网,设备的 IP 地址相同

在 NAT 机制下网络转发的情况,有 两个设备 A B

1)如果 A 和 B 都在同一个局域网中

直接按照 IP 地址进行转发即可(同意个局域网,即使是内网 IP,也不会重复)

2)如果 A 和 B 是在两个不同的局域网中,禁止直接传输

3)如果 A 是内网 IP 设备,B 是外网 IP 设备

A 主动访问 B 是可以的

B 不能主动去访问 A(但是如果 A 已经去访问过 B 了,此时 B 就沿着原来返回的路找到 A)

4)如果 A 是外网 IP,B 也是 外网 IP,也不涉及 NAT 直接转发即可

红色的方框:转发的过程中,涉及到的某个路由器是带有公网 IP 的(NAT 设备,运营商提供的路由器)

NAT 相当于把网络传输分成两个阶段

1)局域网内部的转发(使用局域网 IP 进行)

2)公网上的转发(使用公网 IP 进行)

NAT 解决了 IP 地址不够用的问题

这样的替换,本质上是让一个局域网内部的所有设备,公用同一个 外网 IP(本来是一个外网 IP 代表一个设备,现在是一个外网设备代表数以千计个设备(和真实世界的地址类似))

比如我的电脑现在在访问CSDN的服务器,我的平板也在访问CSDN,这两台设备是在同一个局域网,公用一个外网 IP(运营商路由器)

CSDN 的服务器,如果区分,收到的数据,是我电脑这边的客户端数据,还是我的平板的客户端数据,返回响应的时候,运营商路由器,怎么区分,把正确的包转发给正确的设备???

解决上述的问题,引入端口号作为区分(引入端口号辅助映射的过程,称为 NAPT,NAT 补充)

之前端口号是用来区分同一个主机上的不同程序,也可以让端口号来区分不同主机上不同程序

NAT 主要出现在内网设备和外网设备交互过程中,必须内网设备(客户端)主动去访问外网设备(服务器)

想让外网设备(客户端)来访问内网设备(服务端)也是可以做到的(内网穿透)

相关推荐
七夜zippoe2 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥2 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
会员源码网3 小时前
理财源码开发:单语言深耕还是多语言融合?看完这篇不踩坑
网络·个人开发
米羊1213 小时前
已有安全措施确认(上)
大数据·网络
Fcy6484 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满4 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
主机哥哥4 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
ManThink Technology5 小时前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络
珠海西格电力科技5 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
QT.qtqtqtqtqt5 小时前
未授权访问漏洞
网络·安全·web安全