网络(三) 协议

目录

1. IP协议;

2. 以太网协议;

3. DNS协议, ICMP协议, NAT技术.


1. IP协议:

1.1 介绍:

        网际互连协议, 网络层是进行数据真正传输的一层, 进行数据从一个主机传输到另一个主机. 网络层可以将数据主机进行传送, 那么传输层保证数据可靠性, 一起就是TCP/IP协议.

路径选择: 确认目的主机之后, 就要找到最短路径将数据给主机. 这里是不是和图数据结构很类似, 找到最短路径. 找寻的时候和路由器来确认目的主机的位置.

主机和路由器: 主机配有IP地址,但是不进行路由控制的设备. 路由器: 既配有IP地址,又能进行路由控制.

 1.2 IP协议格式:

版本号: IP协议的版本; 首部长度: 报文长度, 总长度: 报头+有效载荷.

16位标识: 唯一的标识主机发送的报文,如果数据在IP层进行了分片,那么每一个分片对应的id都是相同的。

3位标志位段: 第一位: 保留, 第二位: 禁止分片, 第三位: 更多分片.

13位片偏移:分片相对于原始数据开始处的偏移.

8位协议: 协议类型;

16位首部检验和:使用CRC进行校验,来鉴别数据报的首部是否损坏,但不检验数据部分。

socket里需要IP和port就是给网络层ip使用, 进行路由转接工作的. 端口号是给tcp和udp使用的.

 1.3 分片和组装:

        数据链路层解决问题, MTU: IP交给MAC帧的报文不能超过某个值,这个值就叫做最大传输单元, 一般是1500字节. 如果超过1500字节就需要进行分片, 再交给mac帧进行传输.

到达对端网络层就需要先组装再进行给传输层传送.

一般是不会进行分片的, 会增加丢包的概率, 数据在路由器中也可能进行分片, 

数据的分片和组装完全是由IP协议自己完成的,传输层和链路层不必关心也不需要关心。

如果一个数据包是4500字节, 那么就是采用分片, 分成4个数据片进行发送. 到达对端主机后还有16位标识, 标识一个分片完的数据是一个ip协议出去的. 3位标志和13位片偏移标识分片组合需要的偏移量(离第一个片段的位置),  1480 / 8 = 185.

组装的过程:

        IP报头里面有源ip地址, 可以区分不同主机的数据, 16位标识表示来自哪个数据分片进行分片出来的.通过这两个就可以把数据进行组装. 

第一个分片的片偏移一定是0, 最后一个分片报文的标志位一定是0, 以及片偏移是按照字节数/ 8进行的, 按照以上规则在进行组装.

分片丢包:

        如果第一个分片报文丢了, 那么接收不到片偏移为0的报文, 最后一个分片报文丢了标志位为0的就找不到, 以及其他丢了就找不到片偏移为特殊值的报文.

为啥不建议分片?

        因为数据必须进行组装全部之后才可以确认接收到了, 会大大降低传输效率, 增加丢包可能性的, 而且进行数据重传只能全部传递. 最好是一次交给ip协议的报文不要太大, 在1460字节之内(除去报文长度), 

 1.4 网段划分:

        IP地址是由网络号和主机号组成的, 网络号: 保证相连的两个网段具有不同的标识,

主机号: 同一个网络中, 拥有同一个网络号, 但是主机号一定不一样.

找主机, 先查找对应的网段号, 然后进对应网段, 查找对应的主机号,

 1.5 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。

计算方式: 2^7 = 128为A类地址, 2^16 = 65536个就是B类; C类就是16,842,752个.

那么必定会有大量的IP被浪费就使用到子网掩码,  IP地址和子网掩码进行按位与就可以的得到网络号. 对应就是和255.255.255.0进行按位与. 

特殊IP地址:
        全0就是该子网的网络号, 全1就是该子网的广播地址, 127.*就是本地回环地址.

本地环回原理: 其实是数据贯穿网络协议栈, 但是不会到网络中以及网卡中.自顶向下进行解包和封装一次, 来测试本地释放正常. 首先会放在IP输入队列中然后判断是否为本地IP和广播IP, 

不是就向下交付, 是的话就进行重新放到输入IP队列中.

IP地址不够

        2^32就是大概就是43亿个IP地址, 但是远远不够, 可以使用子网划分以外还可以使用IPV6, 2^64就有数非常大的. 其次使用NAT技术(不同子网存在相同的主机号), 后面具体说. 

私网IP和公网IP:

        私网IP: 不连接到网络中,  公网IP是可以访问到网络的.

数据是如何发送到服务器的?

        LAN口: 连接本地的网络接口, WAN口: 连接互联网的网络接口.

 为什么私网IP不能出现在公网当中

        因为私网IP无法标识主机的唯一性, 而且私网IP可以解决IP地址不足的问题, 但是一个网络中的主机无法标识. 

 1.6 路由:

        路由器在查找目的ip的时候进行一跳跳的就是源mac地址到目的mac地址的过程.

路由器在查找路由表时候就给出下一跳到哪里去. route指令就可以进行查询.

相对应还有路由表生成算法.

 2. 以太网协议:

2.1 介绍:

        是数据链路层协议, 将数据转到到下一跳主机实际是属于局域网通信范畴的,而这实际就是链路层需要解决的问题. 

以太网: 最普遍的一种局域网技术.

令牌环网无线LAN/WAN, 虽然采用的局域网技术不一样, 但是在网络协议栈中屏蔽底层差异, 发送的时候进行封装对应的局域网技术报头, 然后在向上交付时候去掉报头加上其他局域网报头, 然后再根据网络协议栈进行向上进行交付.

 2.2 以太网原理:

        以太网不是一种具体的网络而是一种技术标志, 数据链路层还包含了物理层的内容, 必须使用双绞线, 以及网络的拓扑结构.

令牌环网络:

        逻辑上是环形拓扑结构, 可以避免数据碰撞, 因为只有拿到令牌的主机才可以发送数据.

 2.3 以太网协议的格式:

        类型只有IP协议, ARP协议和RARP协议, CRC是校验和. 

例子:  主机A找到主机B, 帧协议的类型为0800.

如果主机A收到MAC帧之后就会进行CRC校验, 失败找到发送数据碰撞, 然后就重新发送.

如果主机B收到mac帧之后进行crc验证, 发现mac帧和主机一样就会向上进行交付.

在局域网中收到其他收到mac帧之后进行crc验证不对就丢弃了.

 2.4 MAC地址和MTU:

        MAC地址: 出厂就设置好啦, 无法修改, 具有唯一性.

        MTU: 最大传输单位, 标识数据链路层一次最多发送的数据. 一般是1500字节, 超过就要在ip层进行分片, 然后就是MAC最少数据就是46字节.

 2.5 MTU的影响:

(1) 对IP协议的影响:

        会导致如果大于1500字节就会进行分片, 然后到达对端主机就会进行组装. 

(2) 对UDP协议的影响:

        因为IP报文和udp报文一起是20+8 = 28; 那么超过1500-28 = 1472字节就会进行分片. 会增加udp报文丢失的概率.

(3) 对TCP的影响:

        增加TCP丢包的概率, 一般降低重传的次数, 会MSS和MTU的最小值进行设置传送大小.

 2.6 ARP协议:

(1) 认识:

        由IP地址推出MAC地址,  因为在局域网的路由器找到主机就需要mac帧.

(2) ARP协议格式:

        路由器先构建ARP协议请求, op置为1(arp请求), 2是arp应答. 硬件类型字段设置为1, 因为是以太网协议, 协议类型设置为0800,因为路由器是要根据主机B的IP地址来获取主机B的MAC地址, 硬件地址长度和协议地址长度分别设置为6和4,因为MAC地址的长度是48位,IP地址的长度是32位。发送端以太网地址和发送端IP地址,对应就是路由器D的MAC地址和IP地址, 因此将目的以太网地址的二进制序列设置为全1,表示在局域网中进行广播.

arp请求:

arp应答:

arp向下还要包装成mac帧才可以进行发送.

(3) RARP协议:

        通过MAC地址找到IP地址.

3. DNS协议:

        DNS: 域名系统, 将域名转化成IP地址的应用层协议.  一级域名: .com .net .org .eng等;

二级域名: 一般是公司名. 

DNS协议的原理:
        在浏览器中输入url, 然后进行域名解析,  首先会在浏览器的DNS缓存查询对应域名, 有就完成解析; 没有到操作系统中的DNS缓存, 还是没有就到本地的hosts文件, 一直到下层进行查询.

 3.2 ICMP协议:

        Internet控制报文协议, ICMP协议是属于IP协议的上层协议.

作用:

        确认IP包是否成功到达目标地址, 通知在发送过程中IP包丢弃的原因. 例如主机B关机了, 

很久主机A得不到响应, 就是使用ICMP协议来看看是啥原因.

 3.3 NAT技术:

        网络地址转换技术, 解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机. 在局域网中将全局IP转化成私有IP, 路由器的话就相反. 

造成一种局域网中相同IP的私有IP不会冲突, 出了局域网就改变公网IP即可. 其中使用NATP来进行公网IP和私网IP的转换.

NAT技术也有缺点: 就是无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立连接。转换表的生成和销毁都需要额外开销。通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。

 3.4 正反向代理:

        正向代理: 客户端和服务器之间的代理服务器, 客户端访问代理服务器, 由代理服务器去访问服务器. 可以加快访问资源, 如果大量访问同一个资源就放在代理服务器中就无需总是访问外网.

        反向代理: 对于客户端而言,反向代理服务器就相当于目标服务器,用户不需要知道目标服务器的地址,用户只需要访问反向代理服务器就可以获得目标服务器提供的服务. 可以起到负载均衡的作用. 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker ubuntu:20.04构建c++ grpc环境

由c grpc必须源码编译,ubuntu版本不同可能出现的问题也不同,这里分享下我的构建过程。 我是vscode结合docker去安装c虚拟环境,我不想污染本机环境。 vscode的插件Dev Containers Dockerfile如下(如果单纯是ubuntu环境构建,可忽略该…

数据结构:二叉树—面试题(一)

目录 1、相同的树 2、另一棵树的子树 3、翻转二叉树 4、平衡二叉树 5、对称二叉树 6、二叉树遍历 7、二叉树的分层遍历 1、相同的树 习题链接https://leetcode.cn/problems/same-tree/description/https://leetcode.cn/problems/same-tree/description/ 描述&#xff1a…

MySQL训练营-慢查询诊断问题

慢查询相关参数和建议配置 slow_query_log long_query_time 日志开关,是否记慢查询日志以及超过多长时间判定为慢查询。 查看参数设置: SHOW VARIABLES LIKE ‘slow_query_log’;SHOW VARIABLES LIKE ‘long_query_time’; 实践建议: …

用edge浏览器追剧音量太小?安装音量增强器可解忧

0 源起 春节佳节将至,可以利用这个难得的假期追一追想看而没空看的剧了。 但是在用Edge浏览器播放网页中的视频时,有时音量太小,根本没法听清楚, 遇到这种情况时,尽管Edge浏览器本身没有提供音量控制功能&#xff0…

Linux-arm(1)ATF启动流程

Linux-arm(1)ATF启动流量 Author:Once Day Date:2025年1月22日 漫漫长路有人对你微笑过嘛… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档: ARM Trusted Firmware分析——启动、PSCI、OP-TEE接口 Arnold Lu 博…

解决docker: ‘buildx‘ is not a docker command.

简介 buildx 是 Docker 官方提供的一个构建工具,它可以帮助用户快速、高效地构建 Docker 镜像,并支持多种平台的构建。使用 buildx,用户可以在单个命令中构建多种架构的镜像,例如 x86 和 ARM 架构,而无需手动操作多个…

提示词工程(Prompt Engineering)

1. Prompt 是什么? Prompt:提示词,是描述 AI 需要执行的任务的自然语言文本。 如上图所示,Prompt就是用户的提问。其实我们大家都用过Prompt,比如我们使用的ChatGPT、文心一言、豆包等AI产品时的提问就是Prompt&…

【Linux】文件操作、系统IO相关操作、inode和输入输出重定向

⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1、理解文件1.1 狭义理解1.2 广义理解1.3 文件操作1.4 系统角度 2、系统文件IO2.1 文件相关操作2.2 文件描述符2.3 重定向 3、动静…

头像生成小程序搭建(免费分享)

如下图为小程序页面的基本效果&#xff0c;下面将介绍该小程序的功能 页面template代码如下&#xff1a; <template><view class"avatar-containner"><block v-if"!showCropper"><image class"pageback" src"../../s…

2025寒假备战蓝桥杯02---朴素二分查找升级版本的学习+分别求解左右端点

文章目录 1.朴素二分查找的升级版2.查找左端点3.查找右端点4.代码的编写 1.朴素二分查找的升级版 和之前介绍的这个二分查找相比&#xff0c;我觉得这个区别就是我们的这个二分查找需要找到的是一个区间&#xff0c;而不是这个区间里面的某一个元素的位置&#xff1b; 2.查找…

css命名规范——BEM

目录 引言 BEM是什么? 块Block 元素Element 修饰语Modifier BEM解决了哪些问题? 在流行框架的组件中使用 BEM 格式 实战 认识设计图 如何使用当前的css规范正确命名? 引言 css样式类命名难、太难了,难于上青天,这个和js变量命名还不一样。看看项目中五花八门的样…

C++AVL树(一)详解

文章目录 AVL树概念AVL树的插入平衡因子的更新旋转的规则左单旋右单旋抽象的情况h0h1h 2h 3 AVL树 概念 AVL树是一棵平衡二叉查找树&#xff0c;AVL树是空树&#xff0c;保证左右子树都是AVL树&#xff0c;AVL树要求高度差的绝对值不超过1&#xff0c;因为最好情况是1&#…

JAVA与数据结构-线性表

目录 一.线性表的概念 二.线性表的关系及分类 三.数组与顺序表 四.链表 1.静态链表(链表的的数组底层实现&#xff09; 2.循环链表 3.双向链表 五.栈 1.栈的概念 2.栈的底层实现 3.共享空间栈 4.逆波兰表达式&#xff08;后缀表达式&#xff09; 5.栈与递归 六.…

AI绘画:从灵感到杰作的奇幻之旅(3/10)

AI 绘画&#xff1a;新时代的艺术创作浪潮 在数字化时代的浪潮下&#xff0c;AI 绘画已成为艺术领域中一颗耀眼的新星&#xff0c;掀起了一场前所未有的创作革命。只需在相关工具中输入简单的文字描述&#xff0c;或者上传一张参考图片&#xff0c;就能迅速生成令人惊叹的艺术…

【C语言系列】深入理解指针(3)

深入理解指针&#xff08;3&#xff09; 一、字符指针变量二、数组指针变量2.1数组指针变量是什么&#xff1f;2.2数组指针变量怎么初始化&#xff1f; 三、二维数组传参的本质四、函数指针变量4.1函数指针变量的创建4.2函数指针变量的使用4.3两段有趣的代码4.4 typedef关键字 …

广东某海水取排水管线工程边坡自动化监测

1. 项目简介 广东廉江核电项目田螺岭厂址位于廉江市车板镇北约4km处&#xff0c;地理位置为东经10948’28.88“北纬2134’01.55”&#xff0c;东距廉江市约48km&#xff0c;东南距湛江市约 65km&#xff0c;厂址西南距离北部湾约4.5km。广东廉江核电项目一期工程海水取排水管线…

Qt基础项目篇——Qt版Word字处理软件

一、核心功能 本软件为多文档型程序&#xff0c;界面是标准的 Windows 主从窗口 拥有&#xff1a;主菜单、工具栏、文档显示区 和 状态栏。 所要实现的东西&#xff0c;均在下图了。 开发该软件&#xff0c;主要分为下面三个阶段 1&#xff09;界面设计开发 多窗口 MDI 程序…

神经网络梯度爆炸的原因及解决方案

在深度学习中&#xff0c;梯度爆炸&#xff08;gradient exploding&#xff09;是一种常见的训练问题&#xff0c;尤其是在深层神经网络中。梯度爆炸指的是在反向传播过程中&#xff0c;梯度值呈指数级增长&#xff0c;导致网络权重的大幅更新&#xff0c;从而使得网络变得不稳…

deap系统重构,再新增一个新的因子,年化39.1%,卡玛提升至2.76(附python代码)

原创内容第776篇&#xff0c;专注量化投资、个人成长与财富自由。 本周核心工作之一&#xff0c;deap因子挖掘&#xff1a; Deap牛刀小试&#xff0c;挖掘出长期年化29.2%的轮动因子 deap时间序列函数补充&#xff0c;挖掘出年化39.12%的轮动因子&#xff0c;卡玛比率2.52 …

计算机图形学:实验二 三维模型读取与控制

一、程序功能设计 通过键盘和鼠标结合实现了对三维牛模型的变换控制&#xff0c;可以灵活调整旋转的轴、方向、速度以及暂停或复位三维牛模型状态。 动画启动和暂停&#xff1a; 按键&#xff1a;鼠标左键&#xff08;启动&#xff09;&#xff0c;鼠标右键&#xff08;暂停…