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,怎么发现同学们也就懂了。

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

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

相关文章

计算机网络错题

文章目录 码分复用透明传输差错检测停止-等待协议回退N帧协议CSMA/CD协议以太网交换机Vlanip地址的无分类编制方法ip地址的应用规划ip数据包的发送和转发过程路由信息协议IPI2016201720202022 2.5信道 码分复用 透明传输 差错检测 停止-等待协议 回退N帧协议 CSMA/CD协议 以太网…

2024 年 9 月区块链游戏研报:行业回暖,Telegram 游戏引发热潮

作者:Stella L (stellafootprint.network) 数据来源:Footprint Analytics Games Research Page 9 月份,区块链游戏代币的市场总值增长了 29.2%,达到 232 亿美元,日活跃用户(DAU)数量上升了 1…

Https身份鉴权(小迪网络安全笔记~

附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 5.2 Https&身份鉴权 引子:上一篇主要对Http数据包结构、内容做了介绍,本篇则聊聊Https、身份鉴权等技术。 …

ORACLE逗号分隔的字符串字段,关联表查询

使用场景如下: oracle12 以前的写法: selectt.pro_ids,wm_concat(t1.name) pro_names from info t,product t1 where instr(,||t.pro_ids|| ,,,|| t1.id|| ,) > 0 group by pro_ids oracle12 以后的写法: selectt.pro_ids,listagg(DIS…

MySQL八股文

MySQL 自己学习过程中的MySQL八股笔记。 主要来源于 小林coding 牛客MySQL面试八股文背诵版 以及b站和其他的网上资料。 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL&…

使用echarts实现3d柱状图+折线图

以下代码有问题请直接问国内直连GPT/Claude HTML 需要注意threeDchart一定要设置宽度高度&#xff0c;不然图不显示,然后echarts版本不要太低&#xff0c;不然也不显示 <div id"threeDchart" class"threeDchart"></div>js set3DBarChart2(dat…

基地址和偏移地址的理解

在之前的一篇博客介绍了怎么找阳光地址&#xff1a;CE和Ollydbg简单介绍&#xff0c;但是那个地址在重启游戏后会变化&#xff0c;这次会讲解为什么这个阳光的地址会变化&#xff0c;以及对于变化的地址怎么处理。 推荐博客&#xff1a;CE找基址原理 1.阳光的地址为什么会变化…

C语言:详解指针最终篇(3)

一.字符指针变量 在指针的类型中我们知道有一种指针类型为字符指针char*。一般我们这样使用&#xff1a; 我们来看另一种使用方式&#xff1a; 这个常量字符串就相当于它本身首字符的地址&#xff0c;收地址加上方括号下标就可以访问该表达式中对应下标的元素。可以把该表达式…

【深度学习】 零基础介绍卷积神经网络(CNN)

零基础介绍 卷积神经网络&#xff08;CNN&#xff0c;Convolutional Neural Network&#xff09;是深度学习中的一种神经网络&#xff0c;特别擅长处理图像和视频等有空间结构的数据。 假设我们在做一个“照片分类”的任务&#xff0c;比如判断一张照片中是猫还是狗。下面用一…

Dual-Write Problem 双写问题(微服务)

原文链接https://www.confluent.io/blog/dual-write-problem/ 双写问题发生于当两个外部系统必须以原子的方式更新时。 问题 说有人到银行存了一笔钱&#xff0c;触发 DepositFunds 命令&#xff0c;DepositFunds 命令被发送到Account microservice。 Account microservice需…

ReactPress最佳实践—搭建导航网站实战

Github项目地址&#xff1a;https://github.com/fecommunity/easy-blog 欢迎Star。 近期&#xff0c;阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress&#xff0c;ReactPress一个基于 Next.js 的博客和 CMS 系统&#xff0c;可查看 demo站点。&#xff08;…

什么叫ip地址一样?网络ip地址一样说明什么

在探索网络世界的奥秘中&#xff0c;IP地址作为网络设备的唯一身份标识&#xff0c;其重要性不言而喻。然而&#xff0c;当我们遇到“IP地址一样”的情况时&#xff0c;不禁会产生诸多疑问&#xff1a;这究竟意味着什么&#xff1f;是否会对网络产生影响&#xff1f;虎观代理小…

C# 探险之旅:第三十二节 - 类型class之(方法重载Overloading):魔法技能的大变身!

嘿&#xff0c;各位勇敢的探险家们&#xff01;欢迎再次踏上C#的奇幻旅程。今天&#xff0c;我们要一起探索一个超级有趣的魔法技巧——方法重载&#xff08;Overloading&#xff09;&#xff01;想象一下&#xff0c;你有一个超级技能&#xff0c;但是这个技能可以根据不同的情…

kubervirt使用与运行策略

三、KubeVirt基本命令 3.1查看virtctl版本&#xff0c;说明安装成功 [rootk8s-master ~]# virtctl version 3.2创建和管理虚拟机 列出所有可用的虚拟机实例 [rootmaster ~]# kubectl get vmi -n <namespace> 参数-n用于指定命名空间 查看特定虚拟机实例的详细信息 […

[Pro Git#3] 远程仓库 | ssh key | .gitignore配置

目录 1. 分布式版本控制系统的概念 2. 实际使用中的“中央服务器” 3. 远程仓库的理解 4. 新建远程仓库 5. 克隆远程仓库 6. 设置SSH Key 实验 一、多用户协作与公钥管理 二、克隆后的本地与远程分支对应 三、向远程仓库推送 四、拉取远程仓库更新 五、配置Git忽略…

【python因果库实战2】使用银行营销数据集研究营销决策的效果2

目录 联系方式的效应 逆概率加权&#xff1a;首次尝试 联系方式的效应 我们已经完成了大部分艰苦的工作&#xff0c;即理解数据并识别处理变量和混杂因素。现在我们可以开始使用 Causal Inference 360 的工具了。 我们将首先研究联系方式 contact 的因果效应。具体来说&…

数据结构初阶---二叉树---堆

一、树 1.树的概念 树是一种非线性的数据结构&#xff0c;由n(n≥0)个有限结点组成的一个有层次关系的集合。形状类似一棵倒挂的树&#xff0c;根朝上&#xff0c;分支向下。 根结点没有前驱结点&#xff0c;可以有n(n≥0)个后继结点。 其余结点被分为M个互不相交的集合&am…

运维 mysql、redis 、RocketMQ性能排查

MySQL查看数据库连接数 1. SHOW STATUS命令-查询当前的连接数 MySQL 提供了一个 SHOW STATUS 命令&#xff0c;可以用来查看服务器的状态信息&#xff0c;包括当前的连接数。 SHOW STATUS LIKE Threads_connected;这个命令会返回当前连接到服务器的线程数&#xff0c;即当前…

.NET6 WebAPI从基础到进阶--朝夕教育

1、环境准备 1. Visual Studio 2022 2. .NET6 平台支持 3. Internet Information Services 服务器&#xff08; IIS &#xff09; 4. Linux 服务器 【 CentOS 系统】 ( 跨平台部署使用 ) 5. Linux 服务器下的 Docker 容器&#xff08; Docker 部署使用&#xff09; …

STM32仿真——01创建工程

目录 1.需要用到的软件工具​编辑 2.第一步Proteus软件新建工程​编辑 3.第二步——stm32cubumx 4、MDK代码编写 #注意安装的过程或者使用过程使用英文&#xff0c;以防报错&#xff1b; 1.需要用到的软件工具 2.第一步Proteus软件新建工程 选中&#xff0c;默认 先布局&…