当前位置: 首页 > news >正文

ip_done

文章目录

    • 路由
      • 结论
    • IP分片
  • 数据链路层
    • 重谈Mac地址
    • MAC帧报头
    • 局域网的通信原理
    • MSS,以及MAC帧对上层的影响
    • ARP协议

1.公司是不是这样呢? 类似的要给运营商交钱,构建公司的子网,具有公司级别的入口路由器

2.为什么要这样呢??
在这里插入图片描述IP地址不足
我们可以使用相同的内网IP来让更多的主机接入到了网络,你甭管我是接入的运营商的内网还是广域网,反正我能让你上网就行了。
所以NAT主要用来解决IP地址不足

路由

在这里插入图片描述

本地的主机也是可以工作在网络层的
你要把报文下发的时候,实际上你要先在本机内路由
本地主机也有路由表
在这里插入图片描述

所以查路由表怎么查呢
拿着目标主机的IP地址 & 路由表中的Genmas == Destination
做对比,先拿第一行去比较,如果是目标网络就通过该eth0发出去
如果比对不成功,子网掩码之后和目标地址不相同,直接下一行。

在这里插入图片描述

查路由表的结果:
1.不知道
把报文发到路由器,路由器说不知道,只能说路由器有BUG,不考虑。

2.给你具体下一跳(指定的路由器)
3.路由器不清楚,但是转入默认路由—同网段的另一台路由器(缺省路由)
首先你要去的目标网络和路由器子网没配上,所以转到默认下一跳路由器,为什么要转到默认路由器呢?因为他虽然可能和我在同一个子网,但他一定会连接其他不同的、网络。
在这里插入图片描述

4.到达入口路由器

本身发送方主机肯定会先查自己的路由表,如果你要去的目的IP是服务器,就一定和当前主机所在子网的网络号不一样
在这里插入图片描述
那如果子网中有两个路由器呢?
它发现要去的目标IP不是同一子网主机的,两路由器,它怎么知道要转发给哪一个路由器?
本主机也算路由器,也有路由表
在这里插入图片描述
三个路由器他们是在同一 网段的,

至少内网路由器之间是可以互相通信的,路由器之间可以互相知道对方连接的子网的情况的。

所以对你来讲把报文转发给哪个默认路由器也是OK的。

子网中出现两台路由器情况是很少存在的,在家里还是学校里,路由器只有一个。

所以一般连接的路由器通常是子网IP对应的一号主机。

比如子网ip 192.168.3.0
路由器本身的ip 192.168.3.1
如果判断这个目标IP 122.11.11.11一查路由表和子网掩码按位& 不在同一网络,网络号不同,所以主机就把报文交给下一跳。
交给下一跳路由器开始就到了运营商构建的公网或者内网环境,运营商就大了,路由器可能有非常多路由器,连接非常多子网,但彼此路由可以互相通信,可以构建默认路由
在这里插入图片描述
,不管后面怎么转发都是这样的原则,转发时找到了下一跳就给你转给下一跳路由器,如果不清楚就给你转入默认路由器,报文就会越来越靠近目标网络。
在这里插入图片描述

所以报文到达目标网络后呢,这台路由器本身也有自己的路由表,也有子网掩码,
在这里插入图片描述

转发过程中目的IP一直没变,所以他在查路由表时发现,我的路由表有一个条目,路由器也知道自己的目标网络:122.11.11.0

用目的IP和路由器掩码按位& 发现和目标网络相同,就知道你要去的目标主机就在当前子网啊。
在这里插入图片描述

到达目标网络之后,接下来就是内网转发的问题

反正我们经过路由器查表呢,最终能找到目标网络。

结论

因为IP = 目标网络+目标主机
我们在进行转发的时候,我们先到到目标网络。

在这里插入图片描述
IP路由的过程本质是逐次查路由表的过程

你要访问公网IP可以一路default上去直接就能上公网了。
在这里插入图片描述

那能不能这台主机 访问一下 这个主机呢

在这里插入图片描述
对不起,目前做不到


IP分片

实际上,在一台主机中,报文并没有通过网络层直接发出去,而是继续交给了自己的下一层协议(数据路层)
在这里插入图片描述

数据链路层,不能一次发送过大的报文!
本质数据链路层属于网卡驱动层,网卡不能一次向网络发送过大的报文
所以就要求上层不能给我交付过大的报文!

联想到滑动窗口把很长数据分成一段一段的数据段,然后一个一个发,根就在这里。

UDP一样的。

ifconfig 查 mtu 1500 链路层的最大报文大小

那IP报文就是特别大,此时要求IP层进行分片转发
谁分片谁组装,IP层组装好原样交给TCP,UDP传输层

在这里插入图片描述

你不管要考虑分片的问题,你到目标主机还要组装的问题。

所以IP报头里涵盖分片和组装的相关信息。

IP的分片和组装的字段
在这里插入图片描述
16位标识
不同的ip报文每一个报文都有它不同的编号
分片之后的报文呢,编号是相同的

3位标志
第2位置为0,表示允许分片
为1,表示不允许

第3位 表示结束标志,表示当前是否是最后一个小包,是为0,不是为1

13位片偏移
假如报文整体被分成了若干片,每一片曾经在原始报文中的偏移量是什么
对应的是最终要把报文组装在一起

话题分为两阶段

  1. 粗粒度谈谈分片
    如何组装?
    一个报文如果它被分片了如何组装?

在这里插入图片描述
记住,每一个分片也要挟带IP报头
第一个本来就有IP报头,第二个或后续的片都要新增IP报头

所以第一块分片16位标识假设是1234,3位标志 00(允许分片)?
13位片偏移 偏移量 0

第二片 序号1234 00? 片偏移 1500
第三篇 序号1234 00?片偏移 3000
在这里插入图片描述
所以如何组装呢?
第一件事
a.确保将[分片] [全部]聚到一起(报头里有相同的标识)
可是聚集在一起还有个问题[全部]
一旦进行了分片,发可能发了多个,收也收了多个,万一发生丢失情况呢?
1、丢第一个
如果收到众多报文中,如果丢了第一个,拼的时候发现收到众多报文片偏移没有一个是0 的,我们就能甄别出来分片中第一个是丢失的。

2、丢中间
在这里插入图片描述

第一个有,最后一个有,我们在进行排序的时候,第一个报文的长度是下一个报文的片偏移,如果片偏移1500丢了,排完序以后从0直接到3000,可是我们两个各自才1500,我的3000报文前面没有3000字节,所以丢中间也能识别出来

3、丢最后一个
收到众多报文中,没有任何一个分片他的第3位结束标记是0,此时就知道最后一个丢了

我们可以用
16位标识
更多分片(第3位结束标记)
片偏移
最终我们就能确保所有的报文全部都能聚到一起

b.按照片偏移进行排序(完成组装)
全聚到一起此时根据片偏移排序,把除了第一个之外的其他报头直接丢弃,然后重新拼接,我们就能把报文拼到一起了

既然谈到了丢,我们建不建议分片呢?
其实不建议,发的包多了可能增加丢包概率!
因为在IP当中,如果有任何分片丢失了,站在IP层面上,组装失败了,失败的报文整体被直接丢弃,要求对方对报文重发。

前置问题:[分片]
1、你怎么知道一个IP报文是被分片了呢?
如果我收到这些分片中的任何一个分片报文,比如说收到了片偏移1500的分片,后面这些分片的片偏移一定都不为0,正常报文片偏移都是0,因为它只有一个,所以收到的是后面的报文它的片偏移是不为0 的。
如果片偏移不为0,就说明他是分片的,是分片中的某一个
有人就又说了,那我要是第一个分片呢?也是0 啊。
如果你曾经是被分过片的,我们还有第3位结束标记,如果当前分片了绝对不是最后一个,所以第3位标志:001 最后一位是1
在这里插入图片描述
如果你根本没分片,片偏移为0,更多分片标志位为0
如果你分片了,如果你是第一个片偏移是0,我再看你第三位标志最后一位就是1,说明你就是分片中的一个。
所以如何判断报文是否被分片?
片便宜 != 0 || 更多分片 == 1
如果符合这两个条件中任何一个,说明你当前是被分片了的。

  1. 仔细的进行用数据测试一下

    假设IP报文是3000字节,前20字节是IP的报头

我们要向下交付要对报文做分片,那分几片啊,我们就按MTU1500包含报头来

在这里插入图片描述

我们想的可能就是把3000对半分交给下层就完了,可是每个分片都需要带报头
不带报头就没有16标识,更多分片,片偏移,就没法组装。
每一个分片都要报头(20字节)

所以第一分片直接1500字节
还有1500不能直接分了,他应该在搞一个报头,把标识,更多分片,片偏移值一改,再把剩下的1480字节和这个报头拼起来,我们就构建了另一个1500,还剩最后20字节,继续搞一个报头把它的标识,更多分片,片偏移值一改,然后把剩下的数据往后一根。

在这里插入图片描述
每个分片都有对应的报头

(在原始报文当中的偏移量)
片偏移 0 1500 1500+1480 = 2980

更多分片 1 1 0

标识 1111 1111 1111

收的时候就可以根据规则,根据片偏移为0找到第一片
根据更多分片为0找到最后一片
片偏移不为0,更多分片是1找到中间分片
排序的时候发现第一个报文的长度就应该是下一个报文的开始,因为报文分片必须是连续的,所以判定清楚之后把他们进行合并,
把每个分片报头去掉然后排序合并就能把IP报文恢复出来了
在这里插入图片描述


同学们,你知道我们为什么要讲网络吗?啊,啊,因为有一种有一个问题呢基本上是我们同学在面试的时候被问到网络几乎都会问到的,请你帮我解释一下一个HTTP请求到从发到服务器到你最终拿到对你的响应的整个过程,同学们,你说面对这种问题的时候,你要谈你应该怎么谈呀?啊,是不是你要从应用层啊HTTP的HTTP的request response,可是你的request是数据response也是数据要交给tcp,交给tcp就会面临可靠性问题,就会面临拥塞控制,流量控制问题,就会面临面向链接,我们还有丢包重传的问题,然后你如果再想谈把tcp报文再向下交付就要变成IP问题,ip的问题,你可能又涉及到路由问题和分片问题,所以同学们细节能谈的越多,将来你和人面试官聊的时候,人家才能真正意识到你是听懂的啊

数据链路层

将数据从A 推送的B主机,我是可以把数据经过路由转发在我的网络层中。

在这里插入图片描述

永远做任何事情都是现有决策后有执行

所以一定是在网络层中先决策,我应该是转发到和我处于他同一个网段的其他主机,还是交到下一跳,决策之后再把报文 向下交付然后交到我们的路由器当中,我们的IP解决的问题是是将数据跨网络送到B主机的问题,意味着跨网络的问题呢之前你得先解决怎么把数据从A主机送到和你直接相连的路由器当中。

所以下一层数据链路层,解决的是:直接相连的主机之间(电脑 和 路由器),进行数据交付的问题

重谈Mac地址

每台主机都要有对应的网卡,主机有一个,路由器有两个,不同网卡配置不同IP,就保证路由器接连两个子网了。

每一个网卡都有自己唯一的MAC地址

在这里插入图片描述

MAC地址主要作用用来区分在同一个局域网中,区分特定的主机

MAC帧报头

在这里插入图片描述

MAC帧的数据,也就是有效载荷 大部分情况下就是上层交给我的IP报文。
上层也可以是ARP

问题
1、mac帧如何做到解包和封装
定长报文
在这里插入图片描述
能分离就一定能组装

2、如何做到分用

以太网MAC帧有个类型字段  0800代表承装的有效载荷就是IP报文0806 就是 ARP

局域网的通信原理

任何动作先决策在执行,现在用MAC地址但你不能割裂IP地址说他不用IP地址,因为是上层先决策的

在这里插入图片描述
这是Mac1 ,然后呢这儿叫做mac7,其他的我就不写了啊,他们的mac地址呢和他的主机名字保持一致。那么曾经我给大家讲过,说我们在局域网通信的时候呢,本质上其实就跟我们上课一样,我今天呢在我们的教室里说,我说我说张三同学你站起来,你的作业为什么没做?当我说这句话的时候,其实所有同学都听到了,只不过呢所有同学呢在听我这句话的时候,我这句话的报头目的地址就叫做张三啊,源地址就是我啊,类型我不管啊,这里面内容呢就是你作业为什么没做好?那么CRC我们不谈啊,然后呢那么当我们所有同学收到之后呢,其实大家呢都收到这个消息,但大家呢做到把报文解包,解包,然后分用,那么分手之后呢发现诶这个谁发的消息呢?是蛋哥的啊,目的地是谁呢?张三,为什么呢?问的是呃作业为什么没交,然后每一个同学呢他报文分析的时候发现你这个报文不是发给我的,因为任何人都知道自己的mac地址,他对于我们的就好比在教室里每一个人都知道自己的名字一样,大家一对比一对比之后呢,所有人都把大部分人都直接把这个数据帧直接丢弃了,直接丢弃了,那么只有这个我们的张三啊收到了,收到之后他会把报文进行向上交付,那么此时呢啊他就会站起来啊,张三,只有张三站起来了,他给我说蛋哥啊,我的作业啊那个已经做完了,你只是没有看哦。所以当他再给我发消息时,在座的所有同学也照样收到了,然后同学们使用相同的逻辑,你发现这个张三说的话是给我说的,所以你们所有人自动把这个报文直接丢弃,也就只有我在受理了。
所以同学们我想说的第一句话叫做局域网通信的过程,其实是有叫做很多的吃瓜群众的啊,也就是说呢在座的各位少年呢,那么其实你们都能听到这句话,但为什么你的上层因为说我在我在我们学校里,我连的网和我舍友的网连的是同一个网,可是为什么他发的什么请求了消息我从来没收到呢,那是因为你收你的那个报文呢,在最底层的时候已经被丢弃了,被丢弃就不会交付给上层,所以你看不到,只有收到这个呃认为是报文是给我的,我才会向上交付,好,这是他的一个一般原理啊,那么下面呢我们也不能这么讲啊,所以我们得拿着我们对应的这个地方啊把它拿过来,呃,把图呢我们截过来啊。

从H1到H7
所以目的地址填的就是MAC7
源地址:MAC1
类型和数据就不填了
在这里插入图片描述
然后呢我把这个数据真的把它呢从我们的主机推送到我们的局域网当中,局域网当中我放到局域网之后,其实我们每一个人他都能收到这个报文啊,其他人我就不画了啊,每一个人其实都能收到你刚刚所说的对应的这个数据帧它都会收到啊,那么此时他都会收到的话呢,那么此时呢我们的比如说h2他收到了,因为大家用的都是数据链路层的协议,因为大家连接的是同一个局域网啊,大家都用的是同一种以太网,所以呢你发的这个报文呢我也认识报头有效载荷进行分离,分离之后找到你的,我们你要去的叫做目的主机,也就是第一个发现你的目的主机mac7呢和我比如说h2叫做mac2,此时呢那么配不上,所以此时主机二直接把对应的报完直接进行丢弃好,那么丢弃之后呢,而我们每一个人此时都会做这个动作,所以我们这个报文每个人都收到,只不过都会做这个动作,然后呢我们对应的h7呢,他呢也做同样的动作,他做同样的动作的时候呢,那么此时对比我们对应的目的mac地址,发现这个地址和我的地址一样,所以他根据类型向上交付,这个报文就交给H7了同学们,反向的h7要给H1发消息也同样如此,同学们那么听懂的继续帮我在群里扣一些,扣一下我们的六抓紧时间啊,好,同学们啊,听懂的帮我在群里说一下,六啊,抓紧时间啊,好,那么下面呢我要和同学们聊一下他的周边问题了啊。

周边问题啊,
第一个周边问题,我在发消息的时候,有没有可能别人也在发消息呢啊,我在发消息的时候,有没有可能别人也在发消息呢?
那么答案是有可能,所以我在发消息时别人也在发消息,此时我们两个的数据真会发生,我们称之为叫做数据碰撞啊
好,那么一旦我们数据发生碰撞了,那么在我们的底层当中h1和h3他们两台主机,其实包括我们主要是他俩在发啊,他们两个知道自己曾经发过,发完就碰撞了,他们两个也一定能识别出来碰撞的信息,这个道理就好比我今天往水面上扔一个石子儿啊,波纹正常的从我们石子儿落点的位置一直向外扩展同心圆,那么你呢也同样扔个石子儿,我们两个的石子就形成的部位就混在一起了,所以双方呢就无法正确识别这个数据了,所以呢h1和h3他们自己发出的消息呢,他们自己本来就能收到,碰撞了,他们也能检测到,检测到了,那么此时h1或者h3他们要进行叫做碰撞避免算法啊。好,那所谓的碰撞避免算法呢,其实呢第一个就是h1和h3呢,他们两个都要各自等一等,那么等一等的,那么尽量保证我们的网络呢在这个局域网发送数据时,把我们两个发送的时间能岔开,并且在我俩等期间,那么其他主机就可以直接通信了啊,那么反正呢碰撞避免算法我们不谈细节啊,那么我们只要知道碰撞病算法双方要等一等,等完之后第2点他他们两个是还要再进行数据包的一个重发的好,所以同学们重发可不仅仅在TCP有重发,在数据链路层它也会存在,当然重发一定次数还是发不出去,网络出问题了,他就会报给上层啊,所以呢我们会执行我们的碰撞,避免和我们对应的碰撞,避免算法来保证我们对应的两台主机,那么在发送数据的时候呢,尽量任何一个时刻只能允许一个人在网络里发送好,同学们,那么这个呢就跟我们那个呃局域网的通信标准就呃就是他自己的那个实现就有关系了啊,来,同学们,那么下面呢我再多问几句,所以局域网当中第一啊就是嗯我们平时在学校里面,你在宿舍里的时候,半夜的时候,如果你们学校不断网不断电,半夜大家都睡觉了,或者中午的时候啊,或者是下午大家都去上课了,你一个人在宿舍的时候,你们学校的宿舍网是最好的,人一多你就发现你的网就差了啊,好,所以呢我们也知道局域网当中呢,如果主机数越多,发生碰撞的概率也就越大啊,。好,那么这个呢同学们肯定能理解啊,局域网当中呢我们主机越多,发生碰撞的概率就越大,所以呢那么这个我们要理解第二个呢,同学们,所以今天就这几台主机,我现在就想把我现在就想把你的整个局网呢给你啊搞瘫痪掉啊,那么其实呢我们只需要有特定的一台主机呢,那么不断的向我们对应的局域网当中塞垃圾数据,我们就能做到啊,好像一些我们的局域网当中的一些攻击报文呢,它其实是可以那么通过我们的IP层,然后呢那么绕过我们的数据链路层当中的那些就是碰撞检测和碰撞避免算法它可以绕过它,然后呢直接向我们的网络当中呢发送大量的垃圾报文,所以一直尝试着和其他主机的数据发生碰撞,所以这个我局域网呢它整体的主机之间就无法通信了啊,凡是要经过这个局网,一般我们同学呢都是我们网络当中比较末端的啊,我们同学呢一般都是网络当中比较末端的这个区域好,嗯,所以如果这个局网是中间这个网络出问题,有有人或者运营商自己出bug了啊,那么这个时候影响就大了,但此时呢啊,如果我们都比较末端,所以呢当我们发生碰撞的时候,最多也就影响你无法上网了,也就是说我今天呢不想让你上网,我只要向网络里疯狂塞垃圾数据,此时一直和你尝试碰撞,一旦和你碰上,你就要执行避免算法,所以你就得等等啊,好,其实这个道理呢也跟我们呃就是局域网当中数据量太大也有关系,来,这是第2点。那么这个我们先不说啊,所以最终的结论呢就是你不就是想说局域网当中任何一个时刻只能允许一个主机在往局域网当中发消息吗?
好,同学们,那么我的问题呢这就来了,如何看待局域网啊?好,同学们啊,告诉我如何看待局域网呀?好,那么给大家提示一下,我们呢看在局域网,我们可以把局域网站在系统角度,这个以前我应该也说过啊,提过。好,你怎么看待这个局域网呢?啊,说白了这个局域网本身不就是一被所有的主机共享的吗?他被所有的主机共享的任何一个时刻呢,只允许一个人在局域网当中发消息,他怎么做到这点呢?就是碰撞检测和碰撞避免,所以我们的局域网呢我们可以把它看作成多台主机所对应的叫做临界资源。

这个小问题呢稍后再说啊,现在回过头我们再来看一看啊,好,同学们听懂的,帮我在群里扣一下六啊,同学们,所以啊我们的主机a呢,它当前要把我们对应的数据呢跨网络送到主机b,前提条件是把数据从主机a先要送到路由器a,路由器a一定和我的主机a必须直接相连,不直接相连我还不给你转啊,可是同学们,所以我为什么把我的数据呢要交给路由器A呢?那么一定是我在我的主机当中查找主机a所对应的路由表,发现我要去的目标主机是一个外网主机,然后呢我就要把它查路由表default推送到我们的路由器当中,好,然后呢在我准备决策好我要推送给路由器时,我在封装mac帧,然后把我们的数据推送给我们的路由器同学们啊,这里要注意啊,那么下一个同学们
在这里插入图片描述

在主机A 的网络层先做决策,发现就是要把数据转给路由器R
把报文局域网里发,所有主机都能收到,目的MAC地址就是R,源mAC地址就是A,
在这里插入图片描述

到了R的时候一定是R的数据链路层先收到,收到之后要根据类型向上交付,路由器本身也是分层的,所以也要去掉MAC帧报头,将有效载荷交给上层,有效载荷开头部分就是IP报头,IP报头里涵盖目的IP地址,
在这里插入图片描述

路由器R有自己的路由表,网络层根据路由表目的IP地址查,查的过程本质是又一次决策的过程,决策发现要发送给下一个路由器X,此时决策完了要交给X了,怎么办呢?
曾经的数据帧已经没了,又要从上往下 ,向下交付,这里会涉及向上交付的过程,查决策之后再有一次向下交付的过程,向下交付要把数据发给X了,,重新添加MAC帧,目的MAC帧变为MACX,源MAC就变为MACR,在做重复的工作交给路由器X
在这里插入图片描述
一个网络数据包在网络通信时,从A主机经过上层走下来到对端向上交付,再向下交付的的过程
也就是解包和重新封包的过程
图中路径线
在这里插入图片描述

最终的结论就是MAC帧只在局域网当中有效。
因为MAC帧在进行发送之后下一跳主机会重新把mAC帧去掉,重新封装MAC帧。

转发过程中,源MAC目的MAC地址一直变化

人生中平时生活有长远的目标,也有短期的目标,短期的目标会随着长期的目标一直变化。

局域网中 ,主机越多,发生碰撞的概率越大,怎么办?

在这里插入图片描述

交换机的特点
划分碰撞域
减少局域网碰撞

交换机不会完全解决碰撞


MSS,以及MAC帧对上层的影响

往局域网当中发长数据帧还是短数据帧好呢?
反正会发送碰撞,到底长好短好?

我们尽量还是发送短数据包,如果很长的话主机和网络交互的时间就长了碰撞概率就大了。
短数据包更方便在时间层面局域网中岔开发送
这就是MAC报头数据部分不要太大1500
在这里插入图片描述

MAC数据不要太大,要求上层IP分片,TCP分段,根本原因就在局域网通信这里。

所以MAC帧要求有效载荷最大1500,倒逼着网络层进行分片,可是分片不建议啊。
此时就要尽量的在协议栈层面减少分片
所以如何减少分片。
MAC帧给网络层说发的报文不要太大,网络IP就说了我也是跑腿的,我发多少是由TCP决定的。
TCP来控制发多少,出错了怎么办,什么时候发。

TCP说我给你多少就给我发,别废话,给了网络层一个更大的报文,逼着网络层说没办法上层一直逼我,下层也在逼我,我就是老鼠钻风箱两头受气,只能自己设计分片了。

可是分片不好怎么减少分片,所以就得由TCP决定。
问题的根源在TCP!
那怎么办呢?
在这里插入图片描述

TCP就给下两层说你们俩提个方案吧,由我来执行,MAC就说我的有效载荷不能超过1500,网络层就说你这个1500包含我的网络层的IP报头和有效载荷的,所以网络层就说我去掉我的报头1500 - 20 = 1480,我就要求TCP你交给我的数据既含有TCP报头,又涵盖tcp的有效载荷。
这里就会存在一个问题,TCP给网络层的报文长度不能超过1480
TCP内部是有自己的发送缓冲区的
TCP的流式的数据是在缓冲区的,他要发送这部分数据拷贝到SK BUFF,添加TCP报头,把报文交给网络层
在这里插入图片描述
所以TCP要决定自己单次发送的数据量
其实真实要发送的数据量是这个
在这里插入图片描述

所以TCP的报头标准长度20字节,所以网络层要求总共不超过1480,那我的报文交给你的时候是TCP的报头+TCP的有效载荷(从滑动窗口拿过来的),所以我真实要发送的数据就应该变成 1480 - 20 = 1460
在这里插入图片描述

从此往后TCP从发送缓冲区每次构建TCP报文我的有效载荷长度不超过1460
这样添加TCP报头+20 = 1480
+IP报头 = 1500
最终报文最大就是1500
我每次发送数据时,给对方发送数据时,双方通信时,我给对方发的有效载荷长度不超过1460,此时报文底层就不分片了,那么小于1460也可以。
在这里插入图片描述

1460称为MSS
这就是为什么当年讲滑动窗口里限定了滑动窗口里分段,一段一段发,不能一整块都干过去,是因为有MSS约束我。

所以网络通信时,数据链路层有MTU,传输层中有MSS

可是MSS值,双方通信时尽量都要遵守。
我给对方发消息的时候,我告诉对方我单次报文的大小最大是多少,对他来讲也一样。
为什么?
当你发数据的时候你要有MSS,响应的时候路由器也有数据帧,它也要给你回来。
我们尽量保证双方朝向MSS保持一致,这样不会因为不同的路由器MSS,MTU不一致,出现更多的分片组装的问题。

所以MSS双方TCP三次握手时双方也会进行协商交互,一般选择双方中的MSS较小值。
作为双方通信的数据块。


ARP协议

下面我们要再谈的一个问题就是,我现在已经知道主机a经过路由选择可以交给我们的路由器,通过局域网通信原理交给路由器a,因为主机a和它的下一跳路由器一定是处于同一个子网的,所以他们可以直接通信
路由器a和路由器b啊,他们两个也肯定是处于同一个子网的啊,b和c也肯定是处于同一个子网的好,a能够到b,那么a路由器a和路由器b也是连的,路基b和路基c也是直接连的,c和我们对应的d也是连接的,那么同学们,所以呢我们会发现呢所谓的跨网络把数据传送本质上是在无数个我们连续的子网当中进行跳转
所谓的数据发送到目标网络,本质:是通过无数个连续的子网实现的

在这里插入图片描述
此时数据包转到了入口路由器D
报文内容SRC:IPA
DST : IPB

路由器也有协议栈,网络层,链路层
交给主机B的前提是要重新封装mac帧的!!

路由器知道主机B的IP地址,但他怎么知道主机B的MAC地址啊??
因为封装MAC帧是要填写目的MAC地址的!
在这里插入图片描述

此时局域网中还要有一种协议,ARP协议,也是局域网协议,实际上他工作在数据链路层,只不过是在链路层的上面
在这里插入图片描述
关键是ARP协议要做到在局域网中,将目标主机的IP地址转化成对应的MAC地址

得到了之后才能重新封装MAC帧,至此数据包就能交付给目标主机了

我们把路由器D交给B过程理解了,我们路由器A怎么发现路由器B,路由器C怎么找到路由器D,怎么发现同学们也就懂了。

相关文章:

ip_done

文章目录 路由结论 IP分片 数据链路层重谈Mac地址MAC帧报头局域网的通信原理MSS,以及MAC帧对上层的影响ARP协议 1.公司是不是这样呢? 类似的要给运营商交钱,构建公司的子网,具有公司级别的入口路由器 2.为什么要这样呢?? IP地…...

Mysql体系架构剖析——岁月云实战笔记

1 体系架构 理论内容阅读了mysql体系架构剖析,其他的根据岁月云的实战进行记录。 1.1 连接层 mysql最上层为连接服务,引入线程池,允许多台客户端连接,主要工作:连接处理、授权认证、安全防护、管理连接等。 连接处理&a…...

【卷积神经网络】AlexNet实践

构建模型 模版搭建 # 定义一个AlexNet模型类def __init__(self):# 调用父类的构造函数(如果继承自nn.Module的话)super(AlexNet, self).__init__()# ReLU激活函数self.ReLU nn.ReLU()# 卷积层1:输入1个通道(灰度图)&a…...

LF CRLF

这个提示的含义是:Git 检测到你当前的 file3.txt 文件中使用了 LF(换行符,Line Feed,\n) 作为换行符,但在你系统的 Git 配置中,指定要将其转换为 CRLF(回车换行,Carriage…...

Python学习(二)—— 基础语法(上)

目录 一,表达式和常量和变量 1.1 表达式 1.2 变量 1.3 动态类型特性 1.4 输入 二,运算符 2.1 算术运算符 2.2 关系运算符 2.3 逻辑运算符 2.4 赋值运算符 2.5 练习 三,语句 3.1 条件语句 3.2 while循环 3.3 for循环 四&#…...

科研绘图系列:R语言绘制网络图和密度分布图(network density plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载图1图2图3图4图5图6图7图8系统信息参考介绍 R语言绘制网络图和密度分布图(network & density plot) 加载R包 library(magrittr) library(dplyr) library(…...

python解题之寻找最大的葫芦

问题描述 问题描述 在一场经典的德州扑克游戏中,有一种牌型叫做“葫芦”。“葫芦”由五张牌组成,其中包括三张相同牌面值的牌 �a 和另外两张相同牌面值的牌 �b。如果两个人同时拥有“葫芦”,我们会优先比较牌 &#…...

openwrt安装tailscale

1. 下载 进入tailscale的github仓库复制最新版本的链接:点击跳转 wget https://github.com/adyanth/openwrt-tailscale-enabler/releases/download/v1.36.1-fb2f6cf-autoupdate/openwrt-tailscale-enabler-v1.36.1-fb2f6cf-autoupdate.tgz2.解压缩 tar x -zvC / …...

基于物联网的智能插座云平台 WIFI云平台MQTT协议

功能介绍 功能描述: STM32单片机为控制核心 LCD1602液晶显示当前时间温度 开启时间 关闭时间 按键设置开启时间/关闭时间,温度报警上限 到开启时间,继电器自动打开,到关闭时间,自动关闭 通过DS18B20温度传感器获…...

MySQL 事务

概念介绍 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组 DML 语句要么全部成功,要么全部失败,是一个整体。MySQL 提供一种机制,保证我们达到这样的效果。 事务就是要做的或所做的事情,主要用…...

消息中间件面试题-参考回答

消息中间件面试题-参考回答 面试官:RabbitMQ-如何保证消息不丢失 候选人: 嗯!我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步的,这里面就要求了消息的高可用性,我们要保证消息的不丢失。主要从三个层面…...

解决 MyBatis 中空字符串与数字比较引发的条件判断错误

问题复现 假设你在 MyBatis 的 XML 配置中使用了如下代码&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…...

【ETCD】【源码阅读】深入解析 etcd 的 `EtcdServer.Start` 函数

深入解析 etcd 的 EtcdServer.Start 函数 在 etcd 的代码中&#xff0c;EtcdServer.Start 是一个关键方法&#xff0c;用于初始化并启动服务器以便处理请求。本文将从源码的角度逐步分析此函数的每一步操作。 函数签名及注释 // Start performs any initialization of the Se…...

嵌入式驱动开发详解16(音频驱动开发)

文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发&#xff0c;但是由于ALSA驱动框架过于复杂&#xff0c;实现音频编解码芯片的驱动不是一个人能完成的&#xf…...

【数据结构——查找】二分查找(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现二分查找的算法。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.根据键盘输入的一组有序数据建立顺序表&#xff0c;2.顺序表的输…...

探索云原生数据库 PolarDB

引言 在云计算时代,数据库的重要性不言而喻。随着企业数字化转型的加速,对数据库的性能、可靠性和灵活性的要求也越来越高。阿里云推出的云原生数据库 PolarDB,正是为了满足这些需求而设计的一款高性能、兼容性强、弹性灵活的关系型数据库产品。本文将详细介绍 PolarDB 的特…...

OGG FOR MYSQL同步DDL

以下实验测试OGG FOR mysql 同步DDL&#xff0c; OGG 21.3 MYSQL 8.0.27 --创建测试数据 create table oggddl_20241201 (oid int primary key ,oname varchar(10)); create table oggddl_20241202 (oid int primary key ,oname varchar(10)); create table oggddl_20241203…...

【CAN】asc报文格式文件合并(python版)

目录 一、简介二、合并asc格式报文1、准备多个asc文件2、根据时间合并asc文件3、结果 三、总结四、参考 一、简介 CAN通信&#xff1a;CAN&#xff08;Controller Area Network&#xff09;是一种多主方式的串行通讯总线。基本设计规范要求有高位速率、高抗电磁干扰性&#xf…...

C++之STL的map容器

map map的实现方式 set是一个有序的关联容器&#xff0c;是基于平衡二叉搜索树(红黑树)实现的&#xff0c;元素是有序的 map的用法 #include <iostream> #include <map> using namespace std;const int ADDSIZE 20; int main() {map<int, int> m;cout &…...

基于卷积神经网络的图像二分类检测模型训练与推理实现教程 | 幽络源

前言 对于本教程&#xff0c;说白了&#xff0c;就是期望能通过一个程序判断一张图片是否为某个物体&#xff0c;或者说判断一张图片是否为某个缺陷。因为本教程是针对二分类问题&#xff0c;因此主要处理 是 与 不是 的问题&#xff0c;比如我的模型是判断一张图片是否为苹果…...

react-dnd 拖拽事件与输入框的文本选中冲突

问题描述 当我们使用拖拽库的时候&#xff0c;往往会遇到拖拽的一个元素他的子孙元素有输入框类型的dom节点&#xff0c;当拖拽的事件绑定在该元素身上时候&#xff0c;发现子孙的输入框不能进行文本选中了&#xff0c;会按住鼠标去选中文本的时候会触发拖拽 实际的效果&…...

‘Close Project‘ is not available while IDEA is updating indexes的解决

XXX is not available while IDEA is updating indexes IDEA 1.Remove from Recent Projects 2.重新 Open工程即可...

如何解决samba服务器共享文件夹不能粘贴文件

sudo vim /etc/samba/smb.conf在samba的配置文件中增加一个选项 writable yes重启Samba服务以使更改生效&#xff1a; sudo service smbd restart...

Three.js入门-材质详解,构建视觉真实感的核心

Three.js 材质详解&#xff1a;构建视觉真实感的核心 Three.js 是一个强大的 3D JavaScript 库&#xff0c;它为开发者提供了丰富的工具来创建和渲染逼真的三维场景。在这些工具中&#xff0c;材质是一个非常重要的组成部分。材质定义了物体表面的外观特性&#xff0c;例如颜色…...

GitHub、Google等镜像加速地址收集

GitHub、Google等镜像加速地址收集 摘要 本文用于收集GitHub、Google等镜像/加速地址。 GitHub GitHub加速地址一览 fastgithub Https://www.fastgithub.com/&#xff08;推荐&#xff09; 站源地址缓存github.comwww.fastgithub.com无raw.githubusercontent.com无github.gi…...

五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

目录 一、导论 二、路由选择算法 2.1 路由&#xff08;route&#xff09;的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择&#xff08;lin…...

Fix the “The repository no longer has a Release file” error on Ubuntu 23.04

背景信息 在Ubuntu 23.04操作系统上执行apt-get update命令更新操作系统时&#xff0c;得到以下错误 登录后复制 # apt-get update Ign:1 http://mirrors.aliyun.com/ubuntu lunar InRelease Ign:2 http://mirrors.aliyun.com/ubuntu lunar-updates InRelease Ign:3 http://mir…...

开源 AI 智能名片 S2B2C 商城小程序对私域流量运营的全方位助力

在当今竞争激烈的商业环境中&#xff0c;私域流量运营已成为企业实现可持续发展和提升竞争力的关键策略之一。开源 AI 智能名片 S2B2C 商城小程序凭借其独特的功能与特性&#xff0c;从多个维度为私域流量运营提供了强有力的支持与推动&#xff0c;以下将详细阐述其在各个方面的…...

Java Exception解决方法

Java中的Exception是所有异常的基类&#xff0c;它指的是程序在执行过程中发生的非严重错误&#xff0c;比如空指针异常、数组越界异常等。 为了解决Java中的Exception&#xff0c;从以下步骤进行排查解决&#xff1a; 阅读错误信息&#xff1a;查看异常的完整堆栈跟踪信息&a…...

HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由

网络层数据封装 首先IP地址封装在网络层&#xff0c;它用于标识一台网络设备&#xff0c;其中IP地址分为两个部分&#xff0c;网络地址和主机地址&#xff0c;通过我们采用点分十进制的形式进行表示。 IP地址分类 对IP地址而言&#xff0c;它细分为五类&#xff0c;A,B,C,D,E,…...

JeecgBoot passwordChange 任意用户密码重置漏洞复现

0x01 产品简介 Jeecg Boot是一个企业级低代码开发平台,基于前后端分离的架构,融合了SpringBoot、SpringCloud、Ant Design、Vue、Mybatis-plus、Shiro、JWT等多种主流技术,旨在帮助企业快速构建各种应用系统,提高开发效率,降低开发成本。采用最新主流的前后分离框架,使得…...

7-8 整型关键字的散列映射

给定一系列整型关键字和素数 p&#xff0c;用除留余数法定义的散列函数 H(key)key%p 将关键字映射到长度为 p 的散列表中。用线性探测法解决冲突。 输入格式: 输入第一行首先给出两个正整数 n&#xff08;≤1000&#xff09;和 p&#xff08;≥n 的最小素数&#xff09;&…...

谷粒商城—分布式高级①.md

1. ELASTICSEARCH 1、安装elastic search dokcer中安装elastic search (1)下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2(2)配置 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "h…...

MySQL SQL语句性能优化

MySQL SQL语句性能优化指南 一、查询设计优化1. 避免 SELECT *2. 使用 WHERE 进行条件过滤3. 避免在索引列上使用函数和表达式4. 使用 LIMIT 限制返回行数5. 避免使用子查询6. 优化 JOIN 操作7. 避免全表扫描 二、索引优化1. 使用合适的索引2. 覆盖索引3. 索引选择性4. 多列索引…...

【潜意识Java】期末考试可能考的选择题(附带答案解析)

目录 选择题一&#xff1a;Java 数据类型 选择题二&#xff1a;Java 控制结构 选择题三&#xff1a;面向对象编程 选择题四&#xff1a;Java 集合框架 选择题五&#xff1a;Java 异常处理 选择题六&#xff1a;Java 方法 选择题七&#xff1a;Java 流程控制 选择题八&a…...

修炼之道 --- 其一

序言 大家对面试中的面经八股文是怎样的看法呢&#xff0c;从他的名字 八股文 就可以看出来大家可能并不喜欢他&#xff0c;八股文一般是 死板、浮于表面、不重实际 的特点。但是&#xff0c;我们需要通过辩证的角度来看待一个事情&#xff0c;不能单方面来定性&#xff01;  …...

【前端】HTML

目录 一、HTML结构 1.1 HTML标签1.2 HTML文件基本结构1.3 快速生成框架 二、HTML常见标签 2.1 注释标签 !-- –2.2 标题标签 h1到h62.3 段落标签 p2.4 换行标签 br2.5 格式化标签2.6 图片标签 img2.7 超链接标签 a 三、表格标签 3.1 常用标签3.2 合并单元格 四、列表标签五、表…...

LabVIEW实现GPS通信

目录 1、GPS通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...

【Python 小课堂】第 2 课 Python 基础知识:语句、常量、变量和注释

第 2 课 基础知识&#xff1a;语句、常量/变量和注释 By Yichen Li 2024/12/14 一、内容简介 在本次课中&#xff0c;介绍Python语句、常量/变量以及代码注释的基本概念&#xff0c;一些详细的概念、扩展及用法等细节&#xff0c;留至后续介绍。 二、Python语句 一般来说&…...

基于STM32设计的工地扬尘与噪音实时监测系统(网页)

一、前言 当前项目使用的相关软件工具、传感器源代码工程已经上传到网盘&#xff08;实时更新项目内容&#xff09;&#xff1a;https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?fromfrom_copylink 1.1 项目开发背景 近年来&#xff0c;随着城市化进程的…...

LLM之RAG实战(五十)| FastAPI:构建基于LLM的WEB接口界面

FastAPI是WEB UI接口&#xff0c;随着LLM的蓬勃发展&#xff0c;FastAPI的生态也迎来了新的机遇。本文将围绕FastAPI、OpenAI的API以及FastCRUD&#xff0c;来创建一个个性化的电子邮件写作助手&#xff0c;以展示如何结合这些技术来构建强大的应用程序。 下面我们开始分步骤操…...

JavaScript 中的 Map方法

JavaScript 中的 Map方法 在 JavaScript 中&#xff0c;Map 是一种用于存储键值对的数据结构&#xff0c;相较于传统的对象&#xff08;Object&#xff09;&#xff0c;Map 提供了更高效的键值对操作方式适合处理需要频繁操作键值对的场景。 1. 创建 Map const map new Map…...

img引入svg如何修改颜色

方法1&#xff1a;通过css中filter:drop-shadow 首先需要一个容纳图标的父盒子(下方实例中的.svg-img)&#xff0c;通过css造一个图标的‘影子’&#xff08;.svg-color中的drop-shadow&#xff09;&#xff0c;然后设置‘影子’的颜色&#xff0c;再把图标本体移出父盒子&…...

自然语言处理基础及应用场景

自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注&#xff1a;区分每个词名词、动词、形容词等词性命名实体的识别&#xff1a;名词的具体指代是哪一类事物共指消解&#xff1a;代词指代的是前面…...

构建centos docker基础镜像

1、介绍 比较老的版本docker镜像&#xff0c;不太好找&#xff0c;可以尝试自己构建 各版本构建基础镜像方法不太一样&#xff0c;方式也不同&#xff0c;自己尝试&#xff0c;本文只介绍了我自己的尝试 2、构建centos5.11 docker镜像 准备iso文件 &#xff08;1&#xff09;安…...

etcd命令大全

默认安装自带etcdctl 命令行客户端&#xff0c;分两个版本ETCDCTL_API2和ETCDCTL_API3&#xff0c;两个版本不一样&#xff0c;操作的数据也不相容。 本文以v3 为例。 使用之前需要先设置&#xff1a;export ETCDCTL_API3。 1 etcd查询集群节点列表及状态 标准输出&#xff1…...

Go有限状态机实现和实战

Go有限状态机实现和实战 有限状态机 什么是状态机 有限状态机&#xff08;Finite State Machine, FSM&#xff09;是一种用于建模系统行为的计算模型&#xff0c;它包含有限数量的状态&#xff0c;并通过事件或条件实现状态之间的转换。FSM的状态数量是有限的&#xff0c;因此称…...

使用torch模拟 BMM int8量化计算。

使用torch模型BMM int8计算。 模拟&#xff1a;BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…...

vue3的watch一次性监听多个值用法

vue3的watch一次性监听多个值 1、监听单个值 watch(() > route.params.keyword, (newValue, oldValue) > {console.log(监听值变化, newVal, oldVal)state.a newValue});2、监听多个值 watch(() > [route.params.id, route.params.keyword], (newValue, oldValue) &g…...

【one-api和ollama结合使用】

将Ollama接入one-api one-api是一个开源AI中间件服务&#xff0c;可以聚合各家大模型API&#xff0c;比如OpenAI、ChatGLM、文心一言等&#xff0c;聚合后提供统一的OpenAI调用方法。举个例子&#xff1a;ChatGLM和文心一言的API调用方法并不相同&#xff0c;one-api可以对其进…...