Linux网络 - 网络层

我们产生的报文会从发送缓冲区通过对应的传输层协议封装,此时可以通过报头来知道是主机的哪个端口。此时会将封装好的报文继续往下传递,通过网络层解决发送到哪个主机的问题。

IP = 目标网段+目标主机

我们以IPv4的网络报头来进行讲解

IP报头

这是IPv4的

IPv6的IP地址是128位,由20字节固定字段变为40字节的固定字段

4位版本

区分是IPv4还是IPv6

4位首部长度

IP头部是多少字节。和TCP的报头一样,最短是5*4=20字节,最长是15*4=60字节

8位服务类型

3位优先权字段(已经弃用),4位TOs字段,和1位保留字段(必须置为0).4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本.这四者相互冲突,只能选择一个.对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要

16位总长度

IP数据报整个占多少字节

16位标识

IP报文如果过长会进行分片,分片后为了区分是否是同一个报文的,会有标识,同一个报文的分片标识相同。

3位标准字段

第一位现在不用。第二位1标识禁止分片,如果长度超过限制就会被丢弃,因为无法分片。第三位标识更多分片,如果分片了话,最后一个分片置为0,其他的置为1

13位分片偏移

是分片在原报文里面的片偏移。

因为下一层数据链路层只会发送小于等于MTU(1500)的报文长度,所以会在IP层对可以分片的进行分片,不能分片的丢弃。

8位生存时间

数据报到达目的地的最大报文跳数,一般经过一个路由器次数就减一,一般是64,如果减到零还没到达就会舍弃,这个是为了防止路由循环。

8位协议

标识上层协议的类型

16位头部校验和

校验头部是否损坏

32位源地址和32位目的地址

表是发送端和目的端

选项字段

最多40字节

网段划分

IP地址分为 网络号+主机号

网络号相当于不同地区,主机号是不同地区的具体实体

路由器有DHCP技术,自动给网段里面新加入的电脑分配IP

将IP地址分为五类

五类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

这个分法也出现了问题,A、B类的网络号很少,导致会很快分完。且一个网络号很多的主机号,产生很多的浪费。

针对这个情况,出现了

子网掩码(CIDR)

使用一个32位的整数来表示子网掩码,通常是由连续n个1标识网络号,连续(32-n)个0标识主机号。通过按位与操作得到的就是网络号

可见让IP地址与上子网掩码得到的就是网络号,然后让0的部分从0增到全1就是主机号的范围

IP地址加子网掩码还有更简洁的标识范围,例如140.252.20.68/24,表示IP是140.252.20.68,子网掩码高位24个1,低位8个0

子网掩码相当于是对网络号进行更细致的划分

特殊的IP地址

将主机地址全部设置为0,就成了网络号,代表这个局域网

将主机地址全部置为1,就成了广播地址,用于给链路中的所有主机发送数据报

127.*的用于网络环回,通常是127.0.0.1

IP地址的数量限制

我们知道,ip地址就只有32位整数(IPv4),那么就一共只有2^32,差不多43亿个,这意味着最多只能接入43亿的设备?

主要用三种方式来解决或缓解

动态分配IP地址,只有接入到网络里面的设备才会为其分配IP,同一个MAC地址的设备,接入网络里面的IP是不同的。

NAT技术(后面说)

IPv6 将IP地址扩展到128位,这样就根本用不完了。

私有IP地址和公网IP地址

私有IP

私有IP是用于公网IP内部使用的IP,一下的网络字段是私有IP

10.*,前8位是网络号,共16,777,216个地址

172.16*到172.31,前12位是网络号,共1,048,576个地址

192.168.,前16位是网络号,共65,536个地址

一个路由器它会有两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)

路由器的LAN口ip属于自己子网内的IP

不同路由器,子网IP都是一样的,使用私有地址,通常是192.168.1.1,子网内主机IP地址能重复,但是子网间IP可以重复

NAT

这个路由器,又会作为上级网络的一个主机,此时使用WAN口IP作为主机的IP。但私有IP是无法进入公网的,私有IP在各个子网都有使用,因此在报文传到路由器的时候,会进行地址转换,将私有IP转成这个路由器的WAN口IP,通过这种逐级替换,最后走到公网的过程就叫做NAT

返回数据要怎么转换呢?路由器内部会有一个NAT映射表,存储了要发送的内网ip+port和公网ip+port(即要访问的主机),返回时就会去查找这个映射从而返回到私网

因为有大量私有IP的使用,这基本解决了目前IP地址不够用的情况。

公有IP

公有IP是各个人已知的IP,全球独一份,我们可以持有公网IP加端口号访问到这个服务器。公网IP之间是可以直接通信的,我们也必须借助公网IP才能进行通信,私有IP无法进行通信,NAT技术也是必不可少的。

内网穿透

如果两个主机之间要建立数据交互,不借助公网的服务器是无法实现的。那么内网穿透就是让两个私网的主机同时连接一个公网的服务器,服务器通过两个私有主机身份匹配(看是不是你们两个要通信),如果是就会做一个传话筒帮你传数据。

更有甚者,可以直接尝试让双方进行公网IP的连接,如果连接成功,完全就不需要服务器的传话筒了。

相关推荐
learndiary22 分钟前
Linux、Windows双系统根分区扩容要点
linux·运维·扩容·双系统
thginWalker25 分钟前
演进篇 · 维护篇
服务器·数据库
Doro再努力26 分钟前
【Linux操作系统15】深入理解Linux进程概念:从理论到实践
android·linux·运维
余瑜鱼鱼鱼33 分钟前
NAT机制总结
运维·服务器·网络
暴力求解37 分钟前
Linux--重定向
linux·运维·服务器
LongQ30ZZ38 分钟前
博客系统测试报告
运维·服务器
The_Uniform_C@t241 分钟前
AWD | ATT&CK实战系列--蓝队防御(一)
网络·学习·网络安全
夜来小雨1 小时前
MSTP——多生成树协议
网络
希望之晨1 小时前
c++ 11 学习 函数模板
linux·开发语言·c++
十月南城1 小时前
Exactly-once的真实成本——端到端一致性、两阶段提交与延迟权衡
网络