网络基础三——IP协议补充和Mac帧协议

全球网络及网段划分的理解

​ 根据国家组织地区人口综合评估进行IP地址范围的划分;

​ 假设前8位用来区分不同的国家,国际路由器负责全球数据传输,子网掩码为IP/8;次6位区分不同的省份,国内路由器负责全国数据的传输,子网掩码为IP/14,国际路由器也可以参与;再往后4位区分不同的市,由省内路由器负责全省的数据传输,子网掩码为IP/18;最后根据主机号形成一个完整的IP地址;

​ IP报文传输的过程中,通过IP目的地址和子网掩码不断地进行路由转发,最终发送到目标主机;公网IP地址会根据国家省市划分出不同的网段;在全国范围内通信是由运营商来进行维护的;

​ 一般网民使用的都是私有IP地址,而家用路由器是可以构建子网的;当普通人上网时,会将数据先传输到家用路由器,然后传输到运营商路由器,再传输到公网被接收,最后实现了通信;

​ 一个路由器是由至少两个IP地址的,一个用于子网内部路由LAN口IP,一个用于跨网络传输WAN口IP,家用路由器的WAN口IP就是运营商路由器构建的子网中的一个IP;每一个IP报文在传输时会先进行判断,如果目的IP是在子网内,源IP地址就会不会替换,如果要跨网络传输就需要将子网IP替换成WAN口IP;

​ 私有IP不断被替换的过程就是NAT技术;

通过公网 + 私有(可重复)构成了互联网

​ 当发送的目标IP是跨国的时候,运营商接收到报文就会丢掉,不允许发送出去;私有根据入网数量的多少,从高到低选用10.*,172.16.*,192.168.*的私有IP划分;

3.6路由

route
#查看路由表
#1.Destination,表示当前连接的网络号;
#2.Gateway,表示下一跳的路由器;
#3.Genmask,表示子网掩码;
#4.UG,U表示正在使用,G表示该条目是路由器;
#5.Iface,表示本地的网络接口,通过网络将数据报文发送出去;

在这里插入图片描述

​ 查询路由表的过程其实就是拿着目标主机的IP & Genmask 得到一个网络号,然后和Destination对比,如果是就使用对应的网络接口将数据发送出去并进入下一跳,否则继续向下查询路由表,如果都找不到就发送到默认路由器(同网段的可以跨网络传输的路由器);最终就会到达入口路由器;入口路由器到达目标主机使用Mac地址实现;

4.IP分片与组装

​ 实际上在一台主机中,报文并没有直接糖果网络层转发出去,而是继续交给了自己的下一层协议,最后查询路由表决定是发送给同网段主机还是路由器;

数据链路层一般不能发送过大的报文,所以要求上层不能一次交付过大的报文(TCP的发送缓冲区发送报文是一个一个进行);

ifconfig
#mtu表示的是Mac帧有效载荷最大是1500字节;

在这里插入图片描述

​ 如果I发送的IP报文过大就会在IP层进行分片转发,目标路由器收全之后就会进行组装形成一个完整的报文;

​ 在IP报头中具有相关切片和组装的字段;

在这里插入图片描述

16位标识,不同的IP报文对应的16位标识是不一样的,但是分片之后的报文16位标识是一样的;

3位标志,第1位不使用,第2位标志为0/1表示允许/不允许分片,第3位标志表示结束标志,当前是否是最后一个小包,0/1表示是/不是最后一个小包;

13位片偏移,原始报文被分成了若干片,表示此分片在原来报文的偏移量;

​ 当原始报文被分片后,每一个分片都要进行添加报头;对于分片的组装,先将具有相同16位标识的IP分片聚集在一起,然后根据片偏移将分片排序,最后完成组装;

​ 1.分片问题,一般报文片偏移量不为0,则说明报文被分片了,特殊第一个分片偏移量为0,但是它的第3位标志为1,表示此报文分片且不是报文结尾分片,如果两个都为0则说明是正常报文;

​ 2.分片丢失问题,如果丢失了第一个分片则因为所有的分片没有0,识别出第一个分片丢失;如果丢失了最后一个分片则因为没有一个第3位标志为0,被识别出最后一个分片丢失;当前分片的片偏移量与前一个分片的长度不一样时,则说明当前分片之前已经有报文分片丢失;

​ 解决上述问题就可以保证将所有的分片聚在一起,然后排序组装;其实一般是不建议IP报文进行分片的,因为只要有分片丢失,就会造成所有分片都被丢弃,重新发送所有切片,增加了丢包的概率;但是Mac帧规定了上层不能交付过大的报文,所以应该在传输层就保证数据报文较小;

二、以太网

​ 通过网络层判断是将数据报文发送到同网段的主机还是跨网络发送到下一跳;想要进行跨网络传输或者同网段主机间通信,就需要确保设备之间数据帧的传输;所以数据链路层解决的就是如何让直接相连的主机设备进行数据交付;

​ 每个主机除了要有公网或者私有IP地址之外,还需要有对应的网卡,而路由器则是有至少两张网卡,不同的网卡配对不同的IP就可以集连不同的网段;每一个网卡都对应着唯一的一个Mac地址;

​ ether以太网,表示的是48位的Mac地址;Mac地址的主要作用是区分同一子网中不同的主机;

1.Mac帧报文格式

在这里插入图片描述

​ 1.Mac帧报文通过使用定长报头进行解包和分用;

​ 2.Mac帧根据类型来进行分用,如:0800表示交付给IP协议,0806交付给ARP协议,8035交付给RARP协议;

数据大小范围,46-1500字节;

2.局域网通信的原理

​ 在局域网中的所以主机都可以收到发送到局域网的数据帧,但是通过对比Mac地址决定是丢弃数据帧还是接收数据帧;

​ 在局域网中是会存在数据碰撞问题的,需要使用碰撞避免算法减少碰撞次数,原理就是进行休眠,使得发送时间可以叉开,并且在休眠时其他主机可以发送数据帧;当检测到碰撞发生时,进行碰撞避免,之后进行数据帧的重发;

​ 局域网的特点是任何时间只能有一个主机发送数据帧,换句话说就是局域网是一个临界资源;

​ 一个主机要跨网络发送到远端主机就要通过路由器不断地路由到下一个网段;而经过路由器时会进行Mac帧的解包和重新封装;换句话说Mac帧只是在局域网中有效;

​ 主机数越多,发生碰撞的概率越大,所以需要增加交换机,进行碰撞域的划分,减少碰撞的发生;1.如果发生了碰撞,通信双方主机进行了休眠,交换机识别到了此碰撞域的不发送数据,就可以让其他碰撞域的主机进行发送数据帧;2.检测到不是跨碰撞域的通信,变相地减少了其他碰撞域发生碰撞的概率;3.跨碰撞域的通信就和原来进行的局域网通信是一样的,只不过多经过了交换机设备;单次发送的数据帧尽量不要太大,否则会使得与局域网通信的时间变长,导致发生碰撞的可能性增加;

​ Mac帧协议为了减少碰撞概率,所以要求上层IP协议发送的IP报文不能过大,可以进行IP分片,但是分片增大丢包概率所以不建议分片,这时候就需要上层TCP协议来保证数据段小一些,使得IP报文小,进而使得Mac帧小;如:TCP和IP都使用标准报头20字节,则TCP单次发送的数据段的有效载荷最多只有1460字节;1460字节就是MMS(max segment size),要求TCP的发送缓冲区要分割成一个一个的数据段;

​ MMS是TCP的一个方案,数据链路层的方案是MTU(max transmisson unit),有效载荷最大为1500字节,1500字节为MTU;

​ 由于设备的差异MMS和MTU可能不一样,还是会出现分片的情况,所以需要通信双方协商,使得MMS尽量保持一致;即TCP通信时会进行三次握手,协商MMS,取较小值为最终的MMS;

3.跨网络通信

​ 所谓的跨网络传输实际上就是连续多个子网路由实现;最终路由到入口路由器时要进行,解包和重新封装,封装时需要知道目标主机的Mac地址;目标主机的Mac地址是未知的,所以需要使用ARP协议(局域网协议,划分在了数据链路层)将目标主机的IP地址转换成Mac地址;

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

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

相关文章

再见 MybatisPlus,阿里推出新 ORM 框架更牛X

最近看到一个 ORM 框架 Fluent Mybatis 挺有意思的,整个设计理念非常符合工程师思维。 我对官方文档的部分内容进行了简单整理,通过这篇文章带你看看这个新晋 ORM 框架。 官方文档:https://gitee.com/fluent-mybatis/fluent-mybatis/wikis 提…

Golang | Leetcode Golang题解之第19题删除链表的倒数第N个结点

题目&#xff1a; 题解&#xff1a; func removeNthFromEnd(head *ListNode, n int) *ListNode {dummy : &ListNode{0, head}first, second : head, dummyfor i : 0; i < n; i {first first.Next}for ; first ! nil; first first.Next {second second.Next}second.N…

Redis缓存设计

文章目录 1 缓存的收益与成本分析1.1 收益1.2 成本 2 缓存更新策略的选择和使用场景2.1 LRU/LFU/FIFO算法剔除2.2 超时剔除2.3 主动更新2.4 缓存更新策略对比 2.5 最佳实践 3 缓存粒度控制方法3.1 缓存全部数据3.2 缓存部分数据3.3 缓存粒度控制方法对比 4 缓存穿透问题优化4.1…

(2022级)成都工业学院软件构造实验三:面向数据的软件构造

写在前面 1、基于2022级软件工程实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 IntelliJ IDEA 2023.2.2 jdk17.0.6 实验要求 任务&#xff1a; ‍一、构造任务4&#xff1a;批量产生习题并用文件存储…

IntelliJ IDEA 2024.1安装与激活[破解]

一&#xff1a;IDEA官方下载 ①如题&#xff0c;先到IDEA官方下载&#xff0c;简简单单 ②IDEA官方&#xff1a;IntelliJ IDEA – the Leading Java and Kotlin IDE 二&#xff1a;获取脚本 &#x1f31f;网盘下载&#xff1a;jetbra (密码&#xff1a;lzh7) &#x1f31f;获取…

STC89C52学习笔记(七)

STC89C52学习笔记&#xff08;七&#xff09; 综述&#xff1a;本文介绍了串口以及讲述了串口相关寄存器如何配置并给予相关代码。 一、修改代码注意事项 在修改代码时不要一次性加入一堆代码&#xff0c;不利于定位错误。可以先注释一些代码&#xff0c;待解决完毕问题后再…

物联网农业四情在线监测系统

TH-Q2随着科技的飞速发展和信息化时代的来临&#xff0c;物联网技术在各个领域都取得了显著的应用成果。其中&#xff0c;物联网农业四情在线监测系统作为农业现代化的重要组成部分&#xff0c;正在为农业生产带来革命性的变革。 一、物联网农业四情在线监测系统的概念 物联网…

大模型笔记:Prompt tuning

1 NLP模型的几个阶段 1.1 第一阶段&#xff08;在深度学习出现之前&#xff09; 通常聚焦于特征工程&#xff08;feature engineering&#xff09;利用领域知识从数据中提取好的特征 1.2 第二阶段&#xff08;在深度学习出现之后&#xff09; 特征可以从数据中习得——>…

使用 kaggle api 实现 kaggle 数据快速下载

在下载kaggle数据集时&#xff0c;以猫狗数据集举例子&#xff0c;有两种方法&#xff1a; Dogs vs. Cats | Kaggle 1&#xff1a;直接浏览器下载&#xff0c;较慢&#xff0c;不推荐。 2&#xff1a;使用kaggle API下载&#xff0c;很快。本文重点介绍。详情可以&#xff1…

Web前端-Ajax

Ajax 概念:Asynchronous JavaScript And XML,异步的JavaScript和XML。 作用: 1.数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。 2.异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等等…

ARM嵌入式控制器带HDMI为制造业注入智能动力

工业自动化技术的飞速发展&#xff0c;IT与OT的融合已成为推动工业进步的关键力量。在这个背景下&#xff0c;ARM工业计算机凭借其强大的功能和灵活性&#xff0c;成为了边缘自动化领域的一颗新星。今天&#xff0c;我们将深入探讨这款设备如何通过其独特的特性&#xff0c;助力…

Scrapy 爬取m3u8视频

Scrapy 爬取m3u8视频 【一】效果展示 爬取ts文件样式 合成的MP4文件 【二】分析m3u8文件路径 视频地址&#xff1a;[在线播放我独自升级 第03集 - 高清资源](https://www.physkan.com/ph/175552-8-3.html) 【1】找到m3u8文件 这里任务目标很明确 就是找m3u8文件 打开浏览器…

【C语言】“vid”Microsoft Visual Studio安装及应用(检验内存泄露)

文章目录 前言安装包获取配置VLD完成 前言 我们在写代码时往往容易存在内存泄漏的情况&#xff0c;所以存在这样一个名为VLD的工具用来检验内存泄漏&#xff0c;现在我来教大家安装一下 安装包获取 vld下载网址&#xff1a;https://github.com/KindDragon/vld/releases/tag/…

三支冲突分析介绍

Pawlak最早通过观察一组智能体对一组问题的意见&#xff0c;提出了冲突分析模型。U表示对象集&#xff0c;V表示属性集&#xff0c;R表示对象集和属性集之间的二元关系&#xff0c;这样一个刻画冲突分析的信息系统通过三元组&#xff08;U&#xff0c;V&#xff0c;R&#xff0…

物理服务器与云服务器的租用对比

​ 物理服务器&#xff1a;每个基于 Web 的应用程序都依赖于一个服务器&#xff0c;该服务器提供网络中的数据存储&#xff0c;并可根据请求提供给客户端。例如&#xff0c;用户使用浏览器访问 Web 应用程序。服务器可确保托管客户端可以使用该硬件组件。与其他托管可能性相比&…

LeetCode 2529. 正整数和负整数的最大计数——每日一题

上一篇博客&#xff1a;LeetCode 993. 二叉树的堂兄弟节点——每日一题 写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.…

【黑马头条】-day07APP端文章搜索-ES-mongoDB

文章目录 今日内容1 搭建es环境1.1 拉取es镜像1.2 创建容器1.3 配置中文分词器ik1.4 测试 2 app文章搜索2.1 需求说明2.2 思路分析2.3 创建索引和映射2.3.1 PUT请求添加映射2.3.2 其他操作 2.4 初始化索引库数据2.4.1 导入es-init2.4.2 es-init配置2.4.3 导入数据2.4.4 查询已导…

Elastisearch、Kibana安装

Elastisearch简介 全文搜索属于最常见的需求&#xff0c;开源的 Elasticsearch &#xff08;以下简称 Elastic&#xff09;是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。 Elastic 的底层是开源库 Lucene。但是&#xff0c;你没法直接用 Lucene&#xff0…

[网鼎杯 2020 玄武组]SSRFMe

[网鼎杯 2020 玄武组]SSRFMe 源码 <?php function check_inner_ip($url) {$match_resultpreg_match(/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/,$url);if (!$match_result){die(url fomat error);}try{$url_parseparse_url($url);}catch(Exception $e){die(url foma…

真实世界的映照-DDD实体

什么是实体&#xff1f; 实体&#xff0c;官方的解释是&#xff1a;实体&#xff08;Entity&#xff0c;又称为Reference Object&#xff09;很多对象不是通过他们的属性定义的&#xff0c;而是通过一连串的连续事件和标识定义的。主要由标识定义的对象被称为ENTITY。 但&…