当前位置: 首页 > news >正文

网络层 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 主要出现在内网设备和外网设备交互过程中,必须内网设备(客户端)主动去访问外网设备(服务器)

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

相关文章:

  • JSON Schema 2020-12 介绍
  • Web前端基础之HTML
  • C++ call_once用法
  • 第四章无线通信网
  • QDialog的show()方法与exec_()方法的区别详解
  • BUUCTF两道目录包含题目
  • Go 协程(Goroutine)入门与基础使用
  • Maven 之 打包项目时没有使用本地仓库依赖问题
  • JAVA(Day_4
  • 使用 Pandas 进行数据聚合与操作:从合并到可视化的全面指南
  • 25/6/11 <算法笔记>RL基础算法讲解
  • 入门Scikit-learn:让机器学习像呼吸一样自然!
  • IDE(集成开发环境),集成阿里云的通义大模型
  • 2024 CKS题库+详尽解析| 1. kube-bench 修复不安全项
  • ElasticSearch配置详解:什么是重平衡
  • Pytorch 的编程技巧
  • PyTorch:让深度学习像搭积木一样简单有趣!
  • 通过Docker和内网穿透技术在Linux上搭建远程Logseq笔记系统
  • GlusterFS 分布式文件系统深度解析
  • Linux操作系统故障排查案例实战
  • 做监控的有哪些网站/如何制作一个自己的网站
  • WordPress腾讯云短信插件/seo站内优化最主要的是什么
  • 玉树州公司网站建设/成都网站快速优化排名
  • 学习制作网页的网站/网站权重排名
  • 做网站用php转html/百度指数 移民
  • confluence和wordpress/盐城seo推广