Linux学习之IP协议

前言:

在学习IP协议i前,我们其实知道网络协议栈是一层层的,上层封装好之后就传给下层,对于我们治安学习到的TCP协议,在对数据进行封装之后,并不是直接就将数据进行传输,而是交给下一层网络层进行传输,将数据通过网络形式从一台主机传输到另一台主机。我们的TCP只是给我们网络层,提供了许多可靠性策略,但是数据的传输并不是直接靠TCP。

实际上IP协议已经可以帮我们跨网络传输数据,但是并不能保证每次数据都是可靠的,安全的传输,通过TCP协议提供的策略,基本上数据传输时完全可靠的,安全的。

IP协议

 首先从一台主机到另一台主机,进行数据传输的过程中首先要进行源地址与目的地址的确定,即从源ip到目的ip,其次就是进行路段的选择,即路由选择。

而ip地址就是由两部分组成:目标网络+目标主机。先到达目标的网络区域,在确定是哪一台主机。ip地址通过这种方式,在进行网络通信的过程中,就能有较高的效率去排除,知道知道对应的目标主机。

IP协议的报头

关于ip的报头还是主要有两个问题:

1.报头与载荷的有效分离 

靠固定长度加自描述字段进行分离,如这里的报头总共20字节,剩下的为数据,其次还有4位首部长度(一个字节4位)。子描述字段报头首部+总长。

 2.将有效载荷交付给上层。

有8位协议字段表示要交付的上层协议。

网段划分

我们知道ip地址有网络好于主机号构成:

网络号:保证相互连接的两个网段具有不同的标识。

主机号:同一网段中,主机间有相同的网络号,因此靠主机号唯一识别。

主机之间通过路由器在网络层上跨网段传输数据,实际上路由器可以是一个个子网的主机,需要对齐进行配置ip地址。一个路由器相当于在两个子网中。

根据主机与网络号不同的位数,我们就可以对ip地址进行划分。IPv4下总共用32位标识:

随着 Internet 的飞速发展 , 这种划分方案的局限性很快显现出来 , 大多数组织都申请 B 类网络地址 , 导致 B 类地址很快就 分配完了, A 类却浪费了大量地址 ;
例如 , 申请了一个 B 类地址 , 理论上一个子网内能允许 6 5 千多个主机 . A 类地址的子网内的主机数更多 .
然而实际网络架设中 , 不会存在一个子网内有这么多的情况 . 因此大量的 IP 地址都被浪费掉了 .
针对这种情况提出了新的划分方案 , 称为 CIDR(Classless Interdomain Routing):
引入一个额外的子网掩码 (subnet mask) 来区分网络号和主机号 ;
子网掩码也是一个 32 位的正整数 . 通常用一串 "0" 来结尾 ;
IP 地址和子网掩码进行 " 按位与 " 操作 , 得到的结果就是网络号 ;
网络号和主机号的划分与这个 IP 地址是 A 类、 B 类还是 C 类无关 ;

除此之外也有一些特定格式的特定ip地址。

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

我们知道ip地址的数量是有限的,并且数量是越来越少,为了较少ip地址的浪费,提高利用率,用了三种方式来解决:

动态分配 IP 地址 : 只给接入网络的设备分配 IP 地址 . 因此同一个 MAC 地址的设备 , 每次接入互联网中 , 得到 的IP 地址不一定是相同的 ;
NAT 技术 ( 后面会重点介绍 );
IPv6: IPv6 并不是 IPv4 的简单升级版 . 这是互不相干的两个协议 , 彼此并不兼容 ; IPv6 16 字节 128 位来表 示一个IP 地址 ; 但是目前 IPv6 还没有普及 ;

公网IP与私网IP

其次ip地址也被被硬性划分为公网ip和私网ip。(规定组建局域网的必须是私有ip)

我们在日常生活过中使用的一般都是直接的私网ip。不过对于我们使用的云服务器,这是事公网ip。

如果一个组织内部组建局域网 ,IP 地址只用于局域网内的通信 , 而不直接连到 Internet , 理论上 使用任意的 IP 地址都 可以, 但是 RFC 1918 规定了用于组建局域网的私有 IP 地址
10.*, 8 位是网络号 , 16,777,216 个地址
172.16. 172.31. , 12 位是网络号 , 1,048,576 个地址
192.168.*, 16 位是网络号 , 65,536 个地址
包含在这个范围中的 , 都成为私有 IP, 其余的则称为全局 IP( 或公网 IP);

理解运营商和全球网络

我们先来理解运营商:

运营商其实就是建设了网络基础设施的大型企业,负责让我们中国的每一个人用到互联网,为我们配备网络的。所以在网络通信时,首先要经过运营商。

全球网络

 ip地址就相当于是一个巨大的资源,因此就需要对资源进行划分,我们简单地以国家为个体进行划分(公网ip):

内网路由器就是由家庭管理,先来自运营商内部的子网,子网的路由器网络从广域网来,而广域网就是一些大公司组建的机房。

ip路由

IP 数据包的传输过程也和问路一样:
1.当 IP 数据包 , 到达路由器时 , 路由器会先查看目的 IP;
2.路由器决定这个数据包是能直接发送给目标主机 , 还是需要发送给下一个路由器 ;
3.依次反复 , 一直到达目标 IP 地址 ;
那么如何判定当前这个数据包该发送到哪里呢 ? 这个就依靠每个节点内部维护一个路由表 ;

路由器在进行数据传输中,如何选择其他网段呢,首先会将自己的ip地址与其他路由器的子网掩码按位与,如果结果是ip地址,就说明是传输的网段,就交给目标主机,如果不匹配,他回去再路由表按位与,找到你需要那个路由器的接口,从该接口转发给下一个路由器。

路由表可以使用 route 命令查看
如果目的 IP 命中了路由表 , 就直接转发即可 ;
路由表中的最后一行 , 主要由下一跳地址和发送接口两部分组成 , 当目的地址与路由表中其它行都不匹配 时, 就按缺省路由条目规定的接口发送到下一跳地址。

再往下,我们知道数据并不会直接就发送到网络层了,而是发送给数据链路层了,数据链路层是有要求的,要求一次不能发送太多的数据报,而此时的封装后的ip数据包已经很大了,所赐此时需要对ip数据包进行分片,并且在处理之后进行组装。

如何进行分片与组装呢:这里就看的是ip协议包头中的3位标志字段,其中只有第二位与第三位有含义,第二位为0,表示允许分片,第三位表示结束标记(是否是最后一个小包)。

数据链路层

用于两个设备(同一种数据链路节点)之间进行传递.

数据链路层实现了一个区间内的通信(一跳),而IP实现的是直至到最终目的通信(点对点)。

数据链路层处理的是:直接相连的主机之间进行数据交付的问题。

而MAC地址区分了一个局域网中特定的主机。

源地址和目的地址是指网卡的硬件地址 ( 也叫 MAC 地址 ), 长度是 48 , 是在网卡出厂时固化的 ;
帧协议类型字段有三种值 , 分别对应 IP ARP RARP;
帧末尾是 CRC 校验码

报头域有效载荷如何分离,怎么判断分用呢?

 还是一样,采用定长的报文格式,可以看到14字节的报头,剩下的就是有效载荷。

报头的前6个字节目的主机MAC地址,之后的6字节为u源主机MAC地址,之后的两个字节标识上一层协议的类型。

认识MAC地址

MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址)。
MAC地址用于一个局域网内的网络设备寻址和传输数据,MAC地址是硬件地址,是不可被修改的,(其实是网卡的地址),也是用来唯一标识一个局域网中的网络设备。
IP地址可以进行不同网段之间的划分,用于不同网段之间数据的传输和路由,是一种标识主机的逻辑地址。
MAC帧只在局域网中有效,在数据传输过程中,每经过一个网段,向上层决策之后解包,之后在封装(重新添加MAC帧),到下一网段在解包,在封装 -----整个过程类似于唐僧取经,每到一个地方,都会被问“你从哪里来,要到哪里去?”先拆掉之前的包,在换上新的包。直到到达终点。

随着局域网增多,数据在传输过程中就有大概率会发生碰撞,为了应对这一问题,于是又出现了交换机,交换机管理者与它相连的路由器的通信。

认识ARP

虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议。

数据链路层获取到了上层封装后的ip数据帧,可以进行网络传输,但是网络通信不仅仅看ip地址,这只是表示主机的,那么主机上的网络设备呢?是靠MAC地址标识的,找不到目的网络设备的地址先进行处理,就算找到了该主机,还是会丢弃数据包的。

ARP 协议的作用
ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系 .
在网络通讯时 , 源主机的应用程序知道目的主机的 IP 地址和端口号 , 却不知道目的主机的硬件地址 ;
数据包首先是被网卡接收到再去处理上层协议的 , 如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址 ;
原理(先广播确定,在传输):
源主机发出 ARP 请求 , 询问 “IP 地址是 192.168.0.1 的主机的硬件地址是多少 ”, 并将这个请求广播到本地网 段( 以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播 ); 
目的主机接收到广播的 ARP 请求 , 发现其中的 IP 地址与本机相符 , 则发送一个 ARP 应答数据包给源主机 , 将自 己的硬件地址填写在应答包中;
每台主机都维护一个 ARP 缓存表 , 可以用 arp -a 命令查看。缓存表中的表项有过期时间 ( 一般为 20 分钟 ), 如果20 分钟内没有再次使用某个表项 , 则该表项失效 , 下次还要发 ARP 请求来获得目的主机的硬件地址。

 ARP报头:

 

  

注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次 , 对于链路层为以太网的情况是多余的, 但如果链路层是其它类型的网络则有可能是必要的。
硬件类型指链路层网络类型 ,1 为以太网 ;
协议类型指要转换的地址类型 ,0x0800 IP 地址 ;
硬件地址长度对于以太网地址为 6 字节 ;
协议地址长度对于和 IP 地址为 4 字节 ;
op字段为1表示ARP请求,op字段为2表示ARP应答。

源主机通过广播获取目的主机的MAC地址,在网络通信时根据MAC地址传输给特定网络设备在进行上层协议的解包。因为每一个路由器要构建路由器表的时候也要认识周围的路由器,此时也适用arp协议进行记录。所以ARP不经可以在节点到主机之间,还可以是节点到节点之间。(路由器之间)。

ARP欺骗

举例:

  • 1.主机A要和主机C通信,主机A发出ARP包询问谁是192.168.1.3?请回复192.168.1.1。
  • 2.这时主机B在疯狂的向主机A回复,我是192.168.1.3,我的地址是0A-11-22-33-44-02。
  • 3.由于ARP协议不会验证回复者的身份,造成主机A错误的将192.168.1.3的MAC映射为0A-11-22-33-44-02。

其次在发送ARP请求后,如果获取到目的主机的ARP应答,此时还会将目的主的MAC地址缓存在主机中。但若收到很多的ARP应答(存在伪装的ARP应答,用虚假的ip地址和MAC地址构建的ARP应答),(更新ARP缓存)ip地址会去使用虚假的映射ip地址,MAC地址使用我的MAC地址,造成的后果会让网络阻塞,主机网络断开。

网络整体结构

域名

由于ip地址与端口号不方便我们我们日常使用,因此可以使用域名来代替ip地址与端口号:

域名简介
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称 .
域名使用 . 连接
com: 一级域名 . 表示这是一个企业域名 . 同级的还有 "net"( 网络提供商 ), "org"( 非盈利组织 ) .
baidu: 二级域名 , 公司名 .
www: 只是一种习惯用法 . 之前人们在使用域名时 , 往往命名成类似于 ftp.xxx.xxx/ www.xxx.xxx 这样的格 式, 来表示主机支持的协议 .

NAT技术

NAT 技术背景
之前我们讨论了 , IPv4 协议中 , IP 地址数量不充足的问题
NAT 技术当前解决 IP 地址不够用的主要手段 , 是路由器的一个重要功能 ;
NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是就是一种将私有 IP 和全局 IP 相互转化的技术方法 :
很多学校 , 家庭 , 公司内部采用每个终端设置私有 IP, 而在路由器或必要的服务器上设置全局 IP;
全局 IP 要求唯一 , 但是私有 IP 不需要 ; 在不同的局域网中出现相同的私有 IP 是完全不影响的 ;

NAPT

那么问题来了 , 如果局域网内 , 有多个主机都访问同一个外网服务器 , 那么对于服务器返回的数据中 , 目的 IP 都是相同 的. 那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机 ?
这时候 NAPT 来解决这个问题了 . 使用 IP+port 来建立这个关联关系

NAT和代理服务器

路由器往往都具备 NAT 设备的功能 , 通过 NAT 设备进行中转 , 完成子网设备和其他子网设备的通信过程 .代理服务器看起来和NAT 设备有一点像 . 客户端向代理服务器发送请求 , 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后 , 代理服务器又把结果回传给客户端 .
那么 NAT 和代理服务器的区别有哪些呢 ?
从应用上讲 , NAT 设备是网络基础设备之一 , 解决的是 IP 不足的问题 . 代理服务器则是更贴近具体应用 , 比 如通过代理服务器进行翻墙, 另外像迅游这样的加速器 , 也是使用代理服务器 .
从底层实现上讲 , NAT 是工作在网络层 , 直接对 IP 地址进行替换 . 代理服务器往往工作在应用层 .
从使用范围上讲 , NAT 一般在局域网的出口部署 , 代理服务器可以在局域网做 , 也可以在广域网做 , 也可以 跨网.
代理服务器又分为正向代理和反向代理. 正向代理用于请求的转发 ( 例如借助代理绕过反爬虫 ). 反向代理往往作为一个缓存.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/590118.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CTF-Crypto】修复RSA证书入门汇总

证书修复 文章目录 证书修复基础知识Truncated 1Truncated 2Jumbled 基础知识 为什么要引入证书? 在正常题目中,大部分直接给出了数字,但是数字在现实世界中传输不稳定,容易在某处出现错误,所以我们将所有的数字信息…

[嵌入式系统-61]:RT-Thread-内核:原子操作的支持, 原子操作与互斥锁的比较

目录 原子操作 1. 原子操作简介 2. 原子操作的优点 3. RT-Thread 原子操作的实现与使用方法 4. RT-Thread 原子操作 API 原子读 原子写 原子数据交换 原子加 原子减 原子异或 原子与 原子或 原子标志检查与置位 原子标志清除 原子比较与交换 5. 综合示例 原子…

有公网IP的好处?

1. 维护远程连接需求的解决方案 公网IP是指可以通过互联网直接访问的IP地址,相对于私有IP地址而言具有重要的好处。公网IP的最大好处之一是解决了各行业客户的远程连接需求。由于天联组网操作简单、跨平台应用、无网络要求以及独创的安全加速方案等原因&#xff0c…

牛客美团2024年春招第一场笔试【技术】解题

1.小美的平衡矩阵 小美拿到了一个n∗n的矩阵,其中每个元素是 0 或者 1。 小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。 现在,小美希望你回答有多少个i∗i的完美矩形区域。你需要回答1≤i≤n的所有答案 输出…

实现优先队列——C++

目录 1.优先队列的类模板 2.仿函数的讲解 3.成员变量 4.构造函数 5。判空,返回size,返回队头 6.插入 7.删除 1.优先队列的类模板 我们先通过模板来进行初步了解 由上图可知,我们的模板里有三个参数,第一个参数自然就是你要存储的数…

ServiceNow 研究:通过RAG减少结构化输出中的幻觉

论文地址:https://arxiv.org/pdf/2404.08189 原文地址:rag-hallucination-structure-research-by-servicenow 在灾难性遗忘和模型漂移中,幻觉仍然是一个挑战。 2024 年 4 月 18 日 灾难性遗忘: 这是在序列学习或连续学习环境中出现…

工业光源-环形光源-特点

◆高密度LED排列,科学的结构设计; ◆从360方向照射,消除阴影; ◆中间开孔,使光源与相机镜头完美契合: ◆多角度可选,可适应不同工作距离的应用; ◆可选配漫射板,使光线均…

C++算法之sort

sort默认排序方式为从小到大 vector<int> v{3,2,6,1,-2};sort(v.begin(),v.end());for(int i0;i<v.size();i){cout<<v[i]<<" ";}想要sort从大到小排序&#xff1a; 1.是自定义cmp 2.使用自带的函数&#xff1a;

Redis__事务

文章目录 &#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724 &#x1f389; 主题&#xff1a;Redis__事务 ⏱️ 创作时间&#xff1a;2024年05月02日 ———————————————— 这里写目录标题 文章目…

【Web】CTFSHOW 中期测评刷题记录(1)

目录 web486 web487 web488 web489 web490 web491 web492 web493 web494 web495 web496 web497 web498 web499 web500 web501 web502 web503 web505 web506 web507 web508 web509 web510 web486 扫目录 初始界面尝试文件包含index.php&am…

WSL2连接Windows主机的Mysql

文章目录 需求查看主机IP防火墙设置Mysql设置允许远程连接WSL2连接Mysql 需求 在WSL2&#xff08;本机Ubuntu20.04&#xff09;运行的程序需要将数据写入到本机的Mysql服务器中 查看主机IP 两种办法&#xff1a; Windows主机输入 ipconfig&#xff0c;找到带有WSL后缀的部分…

C 语言笔记:字符串处理函数

一、获取字符串长度函数 头文件&#xff1a;#include <string.h> 函数定义&#xff1a;size_t strlen(const char *s); 函数功能&#xff1a; 测字符指针 s 指向的字符串中字符的个数&#xff0c;不包括’\0’ 返回值&#xff1a;字符串中字符个数 #include <stdio.…

不坑盒子激活码免费领取

不坑盒子的一些新出来的大功能&#xff0c;都需要账号有Pro权限才能使用了。 关键是这些功能还很强大呢&#xff01;不用还不行&#xff01; 今天发现一个可以免费领不坑盒子Pro激活码的方法&#xff1a; 扫码进去后&#xff0c;就能看到激活码了&#xff1a; 复制激活码&…

基于alpha shapes的边缘点提取(matlab)

1、原理介绍 由Edelsbrunner H提出的alpha shapes算法是一种简单、有效的快速提取边界点算法。其克服了点云边界点形状影响的缺点&#xff0c;可快速准确提取边界点。如下图所示&#xff0c;对于任意形状的平面点云&#xff0c;若一个半径为a的圆&#xff0c;绕其进行滚动&…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt+hadoop + redis 医院就诊系统 设计与实现

一.项目介绍 前端&#xff1a;患者注册 、登录、查看首页、医生排班、药品信息、预约挂号、就诊记录、电子病历、处方开药、我的收藏 后端分为&#xff1a; 医生登录&#xff1a;查看当前排班信息、查看患者的挂号情况、设置患者就诊记录、电子病历、给患者开药和个人信息维护 …

安装部署大语言模型 | 通义千问

下载安装 进入ollama的仓库下载 「 qwen 7b 」 libraryGet up and running with large language models.https://ollama.com/library查找阿里的 「 qwen 」 根据自己的电脑配置情况&#xff0c;选择合适的模型 总体来说&#xff0c;模型是越大&#xff0c;效果越好&#xff0c…

Jammy@Jetson Orin Nano - Tensorflow GPU版本安装

JammyJetson Orin Nano - Tensorflow GPU版本安装 1. 源由2. 问题2.1 Tensorflow跑以下示例代码的时候&#xff0c;发现jtop中6个CPU占用率都跑满了。2.2 Jetson Orin Nano运行Tensorflow示例结果不一致 3. 分析3.1 当前版本Tensorflow 2.16.13.2 GPU版本二进制安装3.3 GPU版本…

Nginx深度解析:核心特性、应用场景与全局、events、http等全面配置指南

Nginx是一款高性能的Web服务器与反向代理服务器软件&#xff0c;以其高并发处理能力、低内存消耗和反向代理负载均衡功能闻名。它通过事件驱动、异步非阻塞I/O模型&#xff0c;实现了极高的效率和稳定性&#xff0c;广泛应用于网站部署、API代理、静态资源服务及微服务架构中&a…

边沿JK触发器

边沿JK触发器 电路组成 & 逻辑符号 工作原理 Q n 1 D Q^{n1}D Qn1D J Q n ‾ K Q n ‾ \overline{\overline{JQ^n}KQ^n} JQn​KQn​ ( J Q n ) ( K ‾ Q n ‾ ) (JQ^n)(\overline{K}\overline{Q^n}) (JQn)(KQn​) J K ‾ J Q n ‾ K ‾ Q n Q n ‾ Q n J\over…

《HCIP-openEuler实验指导手册》1.6 Apache静态资源配置(目录访问)

知识点 常用用途&#xff1a; 软件仓库镜像及提供下载服务&#xff1a; 配置步骤 删除网站主目录中的文件&#xff08;本实验机目录为/home/source ip为192.168.12.137 端口为81&#xff09; cd /home/source rm -rf *在主目录中新建6个文件夹如下图 mkdir test{1..6}新建…