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

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

相关推荐
搬码临时工8 分钟前
如何开启自己计算机远程桌面连接功能? 给别人或异地访问
运维·服务器·网络·远程工作
啃火龙果的兔子28 分钟前
在服务器上使用 Docker 部署 Node.js 后端服务和前端项目
服务器·docker·node.js
勤奋的小王同学~38 分钟前
(javaEE)网络原理-初识 局域网和广域网 ip地址和端口号 协议 五元组 协议分层 OSI七层模型 网络数据通信的基本流程
运维·服务器·网络
2501_915106321 小时前
无需 Mac,使用Appuploader简化iOS上架流程
websocket·网络协议·tcp/ip·http·网络安全·https·udp
工程师0071 小时前
C#AES加密
网络·安全·web安全·c#
程序猿小D1 小时前
第28节 Node.js 文件系统
服务器·前端·javascript·vscode·node.js·编辑器·vim
极客奇点2 小时前
基于 Nginx 服务器的泛域名 SSL 证书申请与部署
服务器·nginx·ssl
闲倚一枝藤2 小时前
51la批量创建站点繁琐?悟空统计一站式高效解决方案
运维·服务器·站长工具·站长必备·流量统计平台
厦门辰迈智慧科技有限公司2 小时前
水库大坝安全监测之渗流监测
网络·物联网·安全
sztomarch3 小时前
Router-Routing
linux·运维·服务器·前端·网络