Linux:深入理解网络层
网络层在复杂的网络环境中确定一个合适的路径.传输到指定的网络中
一、网络层的理解
问题1:为什么要有网络层的概念呢??
——>我们先来讲一个故事:
假设我在学校里被誉为数学大神,是因为我的数学有考满分的能力,但是这种形容只能说明我有很大概率能考满分,而不是说我一定能考满分!!
那我要怎么保证每次都考满分呢??假设我的三叔是学校的教导主任,当我发现这次考试因为粗心没考满分的时候,三叔就会公布此次考试无效,然后让教务处重新出一份试卷再考一次,多考几次那么基本可以保证满分了!!
而此时我是一个具备满分能力的执行者(前提),而三叔是一可以通过重考的决策帮助我百分百考满分的人,所以能力+策略可以完美地完成这件事
此时我就相当于是IP层(跑腿的能力),而三叔就相当于是TCP层(提供可靠性决策)。所以总的来说,用户需要的是一种可以将数据可靠地跨网络从A主机送到B主机的能力,而其中IP协议的本质工作就是提供一种能力,将数据跨网络从A主机送到B主机!!而TCP协议就是提供策略保证这个过程的可靠性。
问题2:数据是如何通过IP层发送给给对方的呢??
——>我们常说唐僧自东土大唐而来要去往西天取经,其中西天是目标城市(网络)、大雷音寺是目标地点(主机)、佛祖就是目标人物(进程)。
找到主机后将数据交给具体进程是传输层的事情,而找到主机是IP层的事情,所以这就需要我们对所有的主机进行标识,通过源IP和目的IP来标识源主机和目的主机!
而要找到该主机,我们还需要确认他在哪个局域网里面,所以IP=目标网络+目标主机!(让我们可以在构建网络的时候为将来快速定位一台主机提供基础保证!!)
所以我们的IP层会先找到目标网络(通过路由器转发),等找到了之后,再在该网络里用mac地址去定位具体的主机,然后将数据传给他!!
问题3:如何理解 目标网络+目标主机可以快速定位呢??
——> 我们来讲个故事
其实我们生活在一个精心设计的世界里,假设我们学校的学号为 学院+学号。 前三位标识学院,后三位标识学生序号。假设计算机学院的编号是123,理学院是124,材料是125,电气是432,经管是223。我们每个学院都有一个群,而每个学院的学生会主席也有一个群。
我是计算机123009学生,我有一天捡到了一个钱包,上面写的是432008,但是我只知道计算机学院开头是123,但是这个432我并不清楚,于是我只能去学校门口一个个问,但是查找本质上是排除,因此这种线性遍历的效率太低了!!
于是我又想了一个方法,虽然我不知道432是哪个学院的,但是我们学生会主席和各学院的主席都在一个群里,所以他肯定知道432是哪个学员的!!于是我就在我们的学院群里面@计算机学生会主席,然后我们主席一看这个432是电气的,于是就在主席群里@电气的学生会主席 ,然后电气主席看到了再在他们学员群里@432008同学!!这样就很快找到了 !!为什么归还的效率变快的呢??因为我们排除的效率变高了!!当我们确认432是电气学院的时候,其实就已经将其他所有学院的人都排除了!!
同理,学院就相当于是目标网络,而学生就相当于是目标主机,如果我们能够优先定位到目标网络,就可以排除一大堆其他网络,因此我们的IP在设计的时候肯定也得遵循这种方式!!
二、IP协议的报头
主机: 配有IP地址, 但是不进行路由控制的设备;
路由器: 即配有IP地址, 又能进行路由控制;
节点: 主机和路由器的统 称;
1、4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
2、4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大 的数字是15, 因此IP头部最大长度是60字节.
通过头部长度-20可以知道是否携带选项
3、8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
服务类型就是一个自主策略,因为IP的路径选择是有多种方案的,而我们可以根据具体的需求去选择并给路由器一个提供转发的策略!
4、16位总长度(total length): IP数据报整体占多少个字节.
我们会发现IP报头有长度!说明他也是面向数据报形式一块块发送的!!
而字节流动是TCP层给用户层提供的一个概念(就像你看到十字路口的人流一样,在你眼里是人流,但是其实他们是从各个方向走过来的) 他想表明的含义就是你别管我里层的数据从哪来的,是什么类型的,你就统一当做字节流去处理!!而IP层显然是没有这个概念的!!
所以只有目标主机能够看到TCP报文,中间路由器只能看到网络层,就相当于快递只知道快递去哪但是不知道快递是什么!!
5、16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.
6、3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁 止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记.
7、13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片 在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报 文的长度必须是8的整数倍(否则报文就不连续了).
以上三个是为后面的切片做准备!
8、8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
因为网络是错综复杂的,如果也一个报文一直转发但是却一直找不到目标地址,就会出现大量的游离报文,所以为了避免这种情况就会设置一个生存时间!!
9、8位协议: 表示上层协议的类型
这个可以得知我们要IP层的有效载荷交付给上层的哪个协议
10、16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
11、32位源地址和32位目标地址: 表示发送端和接收端.
我们可以根据这个来让路由器进行路径选择!!
12、选项字段(不定长, 最多40字节):
问题1:IP层是如何将报头和有效载荷分离的呢??
---——>固定长度(20字节)+自描述字段(首部长度+总长度)!!
问题2: 如何将有效载荷交付给上层呢??
——>32位源IP和目的IP是用来定位IP地址的,而其中8位协议字段是用来定位该主机的上层协议的(定位端口)
问题3:数据在传输过程中光电信号是如何维持的?
--——>不要觉得数据报丢出去就没事了,因为报文是用光电信号传输的,所以有无数个中间设备要维持数据来发送给远端,而01的二进制信号会随着时间增加、距离增加而信号慢慢变弱,因此我们的网络设计者运营商考虑了这一点,因此在物理层有一个集线器的概念,当信号衰减的时候可以做信号放大,帮助我们进行长距离传输!(有点像我们生活中的电力一样,电力不足了可以通过变压放大来让我们进行长距离的传输)
三、网段划分(重要)
3.1 路由器的初步理解
我们的快读定位离不开路由器的转发
1、路由器本质上也是特定一个子网的主机,也有自己的ip地址
2、因为路由器需要转发别的网络,所以路由器一定至少要连接两个子网,路由器也就相当于同时在两个子网!(也说明了路由器可以配置多个IP,也就是需要多张网卡)
3、路由器一般是一个子网中的第一台设备,一般他的IP地址都是:网络号.1
4、路由器不仅仅可以用于IP报文的转发,还可以用来构建局域网!!因此该局域网里的主机号IP都是由该路由器去管理的(确保IP地址不会重复)
5、路由器有WAN口ip和LAN口ip
6、家用路由器理解上和运营商的路由器性质是类似的
3.2 IP地址的理解
IP地址分为两个部分, 网络号和主机号
网络号: 保证相互连接的两个网段具有不同的标识;
主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
不同的子网其实就是把网络号相同的主机放到一起.
如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复.
通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同.
那么问题来了, 手动管理子网内的IP, 是一个相当麻烦的事情.
有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.
一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器.
3.3 IP地址的划分
IP地址有多少个呢?? 2的32次方=42亿+ 其实现在已经远远不够了
3.3.1 早期方案
过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示(该图出 自[TCPIP])。
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
随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址;
例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.
然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了.
3.3.2 子网掩码
针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing):
引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;
网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;
因为子网掩码的前28个是1,这说明只有后4位是用来表示主机号的!
一般来说子网掩码的书写方式是表明有几个1
问题1:怎么理解这个&呢??为什么他可以做到让IP地址和A类、B类还是C类无关呢??
——> 因为子网掩码可以对IP32位,进行任意的区域划分!!!
比方说我当前有一个B类IP地址,按道理来说我可以有2的16次方台主机,但是我当前的子网里只需要14个机器,那么直接使用显然会造成大量的浪费。
而后有了子网掩码,使得我们可以自己去做内网划分,比如我发现其实我只要4个bit位就可以表示14台主机了,因此我规定只有后面4位表示主机号,因此我们可以用IP/28!!这样我一次最多可以有14个IP地址(16-2)这样提高了地址的利用率 (一个B网络就可以使用2的12次方个大小为14个主机号的网络)
问题2:子网掩码的二次理解
——>
引入额外的子网掩码而不是直接修改原来的方案,这是对历史的尊重
多几个1是能够让主机数变得更少,少几个1是可以让主机数变得更多
子网掩码和分类划分的方法都是在路由器中去配置好的!!我们作为用户并没有太多的感觉,你报文发送的时候只看到了IP,其实子网掩码是在经历的一个个网络路由器中去操作的,因此我们眼中的网络世界其实就是路由器的世界!!
3.3.3 特殊的IP地址
将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
四、IP地址数量的限制
我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.
这意味着, 一共只有43亿台主机能接入网络么?
实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡 都需要配置一个或多个IP地址.
CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决:
1、动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;(其实就是共享IP)
2、NAT技术(后面会重点介绍);
3、IPv6:IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表 示一个IP地址; 但是目前IPv6还没有普及; (重大变革!!)
问题:IPv6最成熟的就是中国了(因为ipv4是老外的),但是为什么ipV6出现了这么久还是没普及呢??
——>因为TCP IP协议栈是在OS内部的,你如果要改的话就得先把全世界的OS都给换了!!除此之外还得要求全世界的路由器都得支持IPV6!!这是很难做到的,因为互联网太大了!!
但是如果有一天我们中国的网络比全世界的网络加起来还要大(网络的大小以前可以说是由人口决定,也可以说是当地经济发展设施建设决定的,但是最本质的是可入网设备的多少决定的!!!)
比如说我们未来的物联网设备、汽车等各种设备需要独立控制,那么入网设备就会剧增!!从而孵化出新的经济场景和互联网公司,给国家带来更大的税收!!科学技术推动了生产力的进步!!一旦影响力很大了,那么他们想不想学我们赚很多钱呢??想的话我们自然就有动力去换IPV6了!!
国家也在想办法推动,会要求互联网公司在搭建内网的时候必须支持IPV6,其实目前默认的路由器也会支持,所以这其实是一个系统性的工程!!
五、理解运营商
问题1:我们是怎么上网的??
如果你是在城镇或者农村的话,你想上网前就得先联系运营商的工作人员把网线拉到你家里
如果你家里在城市里面,国家建设的时候就要求必须光纤(塑料壳里面包了很多玻璃丝)入户。
除此之外还需要两个设备,一个设备叫做调制解调器(猫),还需要有一台家用路由器
光纤(从运营商哪里接过来的)传递的是光电信号,但是计算机不认识,所以调制解调器会将他转变为数字信号(可以被识别的01序列)然后交给路由器
除此之外,你还得交钱!!(早些年智能手机还不是很普及的时候会送你一台手机和电话卡,然后你要上网的话就得交钱往电话卡收费) 交钱可以获得上网的账号和密码(运营商会在你的家用路由器里把他们配置进去,你只要不欠费你就可以访问外网了) 相当于是征得了运营商的许可
家用路由器还有一个作用是构建局域网, 当你把路由器打开的时候,因为里面配置了被运营商许可的账号和密码,所以你可以上网了,但是你并不希望你的邻居也可以用你的网络,因此家用路由器本身可以有路由器账号和密码,用来给用户链接路由器做登录认证的!!
所以有路由器两套密码 ,一套是经过运营商认证可以上网,一套是用来认证用户连接网络的!
问题2:运营商的意义
首先我们要知道我们国家的互联网应用几乎在世界领域上是数一数二的,什么京东、支付宝、闲鱼等应用都得益于我们国家的互联网公司,但是之所以有这些公司,他们背后有一些角色很重要,那就是运营商!!(千万不要觉得运营商天天催话费,不交的话就不让打电话而特别仇视他,虽然在历史的发展中他有一些乱收费的事情,但是我们不能忽略他的一个积极和重大意义)
因为这种应用的使用前提就是得上网!!而上网之前要做的就是网络基础设施建设!!因为只有这样才能让更多的网民入网,才能孵化更多的互联网公司!!
但是因为网络基础设施建设回报周期太长了!!一般私人企业都是想赚快钱,所以为了能够推动网络设施的建设,国家会想方设法在这方面大力支持!!而这些运营商就会垄断这个网络建设的行业。
以前流量费很贵,现在流量费变便宜了!!这也是为了能够让更多的人参与进来,不光是城市,还有农村也要有基层的工作人员去给你做工作!!
我们会发现如果国家不逼着他们运营商的做建设的话,那么就不会有后面那么多大型互联网私企,就不会有那么多技术发展带来的时代红利!!
问题3:国家推动网络建设的意义
比方说国家大力发展滴滴,因为出租车越多,地方政府就能发更多的牌照,赚更多的钱,但是滴滴一旦进来了,因为有国家的支持,你地方政府还是可以发,但是你不能拦住滴滴的发展,所以他们并不欢迎。
比方说国家发展支付宝,银行其实也可以线上支付只不过他做得没有支付宝好,大家都用支付宝那么存钱给银行的就少了。所以银行并不欢迎支付宝
所以我们会发现国家存在的意义就是统筹全局!!一些新技术的出现总会有一部分人不喜欢、不愿意去改变,但如果整体的趋势就是好的,那么国家就需要去鼓励他们来帮助他们把影响力做大!!(下一盘大棋)
问题4:为啥互联网就业就业环境不好呢??
1、好和不好是需要对比的,这个跟国家当前经济发展所处的环境和阶段是有关系的,也跟周边环境有关系,而且跟人的预期也有关系。所以其实大家并不敢盲目去扩张业务。
2、我们国家互联网发展到一定程度也会有问题,有些互联网公司做事情会没有底线,比如很多公司但是想做团购买菜,但是这样的话会让那些摆摊卖菜的小商小贩无法生存,我是希望你互联网公司创造岗位的,而不是让你搞得别人没岗位,做的太过分影响就太大了!!所以国家会出面进行管控!!
六、理解全球网络
IP是一份大资源 。所以其实世界上的ipv4是被划分的
一般来说IP地址的划分不是根据国家来划分的,而是根据国家组织地区人口综合评估来分发的(比如说中国网络设施建设好,入网设备多,那么就发分一点,但是印度人多但是网络建设很差,入网的设施很少,那就分少一点)
那会不会分配不均吵起来呢??一般是不会的,因为本身IP的存在就是为了让尽可能更多的人入网的,这样才能赚钱!!
那么IP具体是怎么分配的呢????
(举例,并不是真的这么分)比方说全国一百九十多个地方,那么我们就可以用前8个bit位来标识,然后我们中国有23个省,那么就需要5个bit位 然后再具体细分 你会发现这样的话其实IP地址已经严重不够了!!所以这些IP地址是不足以支撑这么多人去使用的!!
所以真实的网络情况是,他用公网IP来构建全球网络,然后划分到一定程度后(某个地区),比如划分到西安市,再由当地的运营商拿到具体的公网IP后,再根据这个公网IP来构建内网!
所以我们所使用的都是内网IP,然后再通过运营商的路由器访问到公网IP
公网+私网=互联网 任何一个人想访问网络之前都需要经过运营的网络(所以我们常说的翻墙,这个墙就是在运营商那里)这也是为什么我们一欠费就上不了网的原因 以及之前在信息没加密的时候会出现运营商劫持的问题
七、公有IP和私有IP
IP被硬性分为了公有IP和私有IP,其实我们一般使用的都是私有IP,而云服务器是用的公网IP
如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都 可以,但是RFC1918规定了用于组建局域网的私有IP地址
10.*,前8位是网络号,共16,777,216个地址
172.16.到172.31.,前12位是网络号,共1,048,576个地址
192.168.*,前16位是网络号,共65,536个地址
包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP);
私有IP类型具体你选择哪一个,看你的构建的子网范围大不大,大的话选第一个,小的话选第三个(我们家里用的大部分都是192.168 )
目标ip一般是公有ip,是私有ip的时候当且仅当在内网中
怎么解决上面的问题呢??我们会发现我们的路由器都有自己的子网IP和WAN口IP ,而我们家用路由器的WAN口IP就是运营商路由器的内网IP。所以报文在从路由器出去的时候会做一种策略:将源IP替换成每一个路由的的WAN口IP!!
交给公网之前
交给公网之后 这样至少可以将响应报文先传给运营商的入口路由器
私有IP不断被替换的过程就是NAP技术!!
1、一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
2、路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.
3、不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之 间的IP地址就可以重复了.
4、每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级,
最外层的运营商路由器, WAN口IP就是一个公网IP了.
5、子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级 替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地 址转换).
6、如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.
问题1:一个子网如果有两台路由器的话,我怎么知道该去哪个路由器呢??
----->路由器之间在内网是可以互相通信的,可以知道彼此的联网情况!一般来说我们自己的子网有两台路由器的情况是比较少见的!!但是运营商的子网路由器一般就比较多了!!!
问题2:公司是不是这样的呢??
---->公司也是类似的!!因为公司也要给你发回数据,所以他们也是要给运营商交钱的
问题3:为什么要这么做呢??
——>主要是因为IP地址不足!!所以这种方法可以通过创建更多相同的内网IP来让更多人入网,这也是NAT技术的实际意义!
八、路由
在复杂的网络结构中, 找出一条通往终点的路线;(通过目的IP进行路径选择)
路由的过程, 就是这样一跳一跳(Hop by Hop) "问路" 的过程.
所谓 "一跳" 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间
IP数据包的传输过程也和问路一样
当IP数据包, 到达路由器时, 路由器会先查看目的IP;
路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
依次反复, 一直到达目标IP地址;
那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表
路由表可以使用route命令查看(本地主机也有路由表)
如果目的IP命中了路由表, 就直接转发;(查路由表就是看目标主机的IP&Genmask是否等于Destination)
路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。
假设某主机上的网络接口配置和路由表如下:
这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络;
Destination是目的网络地址
Genmask是子网掩码
Gateway是下一跳地址
face是发送接口
Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;
转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3
跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符
再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出 去;
由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转 发;
转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2
依次和路由表前几项进行对比, 发现都不匹配;
按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器;
由192.168.10.1路由器根据它的路由表决定下一跳地址;
问题1:路由表查询的结果是什么呢??
——> 其实有点像我们刚考上大学去一个陌生的地方上大学,下了火车的时候,我们找不到路,只能问人。无非就以下结果:
1、不知道(基本不存在这种情况,因为这样的话路由器本身设计就有bug 所以不考虑)
2、给你具体下一跳
3、路由器不清楚,但是转入默认路由(一般是同网段的另一台路由器 )
主机会先查自己的路由表,然后当发现目的IP和我的网络号不一致的话,说明我的目标IP一定不在我这个子网内,所以我就要去我子网里设置的缺省路由器的路由表去查(内网之间的路由器是可以互相知道对方子网的连接情况的),因为他里面可能会有其他的子网, 如果还找不到的话,那就再去同网段的另一套路由器或许能找到
反正不管怎么跳转 因为网络是精心设计的,所以一定可以越来越接近目标网络(一般一路的default上去都能到公网IP)
4、到达入口路由器
拿着目标IP&该路由器的子网掩码发现该网络就是我这个子网里面的!!
因为IP=目标网络+目标主机,所以我们在进行转发的时候,我们先到达目标网络!
问题2:有关路由表生成算法(选学)
——> 路由表可以由网络管理员手动维护(静态路由), 也可以通过一些算法自动生成(动态路由).调研一些相关的生成算法, 例如距离向量算法, LS算法, Dijkstra算法等.
当前主机也可以查
相关文章:

Linux:深入理解网络层
网络层在复杂的网络环境中确定一个合适的路径.传输到指定的网络中 一、网络层的理解 问题1:为什么要有网络层的概念呢?? ——>我们先来讲一个故事: 假设我在学校里被誉为数学大神,是因为我的数学有考满分的能力&…...
【设计模式】简单工厂模式,工厂模式,抽象工厂模式,单例,代理,go案例区分总结
工厂模式三种类型: 一、简单工厂模式(Simple Factory) 定义: 用一个工厂类,根据传入的参数决定创建哪一种具体产品类实例。 面试说法: 由一个统一的工厂创建所有对象,增加新产品时需要修改工…...

Linux_编辑器Vim基本使用
✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:LInux_st 小伞的主页:xiaosan_blog 制作不易!点个赞吧!!谢谢喵!&a…...

vue展示修改前后对比,并显示修改标注diff
动态父组件 <template><el-buttontype"primary"size"small"plainclick"showDiffDialog(subItem)">查看修改内容</el-button><TextDiffDialogv-model:visible"diffDialogVisible":before"currentDiffItem?.…...

LiveWallpaperMacOS:让你的 Mac 桌面动起来
随着桌面美化需求的不断提升,用户对于桌面壁纸的要求已经不再局限于静态图片。越来越多的 Mac 用户希望桌面能像 Windows 一样,拥有动态壁纸,展现个性、提升体验。LiveWallpaperMacOS 正是这样一款让你的 Mac 桌面焕发活力的开源项目。 本文将详细介绍 LiveWallpaperMacOS …...
[预训练]Encoder-only架构的预训练任务核心机制
原创文章1FFN前馈网络与激活函数技术解析:Transformer模型中的关键模块2Transformer掩码技术全解析:分类、原理与应用场景3【大模型技术】Attention注意力机制详解一4Transformer核心技术解析LCPO方法:精准控制推理长度的新突破5Transformer模…...

07-后端Web实战(部门管理)
5. 修改部门 对于任何业务的修改功能来说,一般都会分为两步进行:查询回显、修改数据。 5.1 查询回显 5.1.1 需求 当我们点击 "编辑" 的时候,需要根据ID查询部门数据,然后用于页面回显展示。 5.1.2 接口描述 参照参照…...

mysql ACID 原理
序言:ACID 是一组数据库设计原则,他是业务数据和关键业务程序的可靠性保障。 1、atomicity(原子性) 依赖如下能力 autocommit commit rollback2、一致性 2.1 double write buffer 1、定义:double write buffer 是…...

[Rust_1] 环境配置 | vs golang | 程序运行 | 包管理
目录 Rust 环境安装 GoLang和Rust 关于Go 关于Rust Rust vs. Go,优缺点 GoLang的优点 GoLang的缺点 Rust的优点 Rust的缺点 数据告诉我们什么? Rust和Go的主要区别 (1) 性能 (2) 并发性 (3) 内存安全性 (4) 开发速度 (5) 开发者体验 Ru…...

二十五、面向对象底层逻辑-SpringMVC九大组件之HandlerMapping接口设计
一、引言:MVC架构的交通枢纽 在Spring MVC框架中,HandlerMapping接口扮演着"请求导航仪"的关键角色,它决定了HTTP请求如何被路由到对应的Controller处理器。作为MVC模式的核心组件之一,HandlerMapping在请求处理的生命…...
构建安全高效的邮件网关ngx_mail_ssl_module
一、快速上手:最小配置示例 worker_processes auto;mail {server {# 监听 IMAP over TLSlisten 993 ssl;protocol imap;# TLS 协议与密码套件ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;# 证书与私钥ssl_…...

HUAWEI交换机配置镜像口验证(eNSP)
技术术语: 流量观察口:就是我们常说的镜像口,被观察的流量的引流目的端口 流量源端口:企业生产端口,作为观察口观察对象。 命令介绍: [核心交换机]observe-port [观察端口ID或编号(数字&am…...

前端vue3实现图片懒加载
场景和指令用法 场景:电商网站的首页通常会很长,用户不一定能访问到页面靠下面的图片,这类图片通过懒加载优化手段可以做到只有进入视口区域才发送图片请求 核心原理:图片进入视口才发送资源请求 首先:我们需要定义一个全局的指令&#x…...
网站每天几点更新,更新频率是否影响网站收录
1. 每天几点更新网站最合适?总怕时间选错影响收录? 刚开始搞网站的时候,是不是老纠结啥时候更新合适?早上刚上班?半夜没人的时候?选不对时间,总担心搜索引擎爬虫来了没抓到新内容,影…...
主流Markdown编辑器的综合评测与推荐
根据2025年最新资料,结合功能特性、用户体验和技术适配性,以下是对主流Markdown编辑器的综合评测与推荐: 一、核心对比维度与评估方法 功能完整性:支持数学公式、流程图、代码高亮等复杂格式。跨平台兼容性:Windows/m…...

计算机网络-MPLS VPN应用场景与组网
上一篇文章我们通过一个基础实验实现了企业分支间的MPLS VPN互联,如果还不理解的可以多看几遍前面的文章或者多敲下实验。今天来学习几种常见的MPLS VPN应用场景与这些场景下MPLS VPN的部署方法。 一、MPLS VPN典型应用 目前,MPLS VPN的主要应用包括企…...
AugmentFree:解除 AugmentCode 限制的终极方案 如何快速清理vscode和AugmentCode缓存—windows端
AugmentFree1.0工具包:解除 AugmentCode 免费试用限制的终极方案 Augment VIP 是一个专为 VS Code 用户设计的实用工具包,旨在帮助用户管理和清理 VS Code 数据库,解除 AugmentCode 免费试用账户的限制。 augment从根源上解决免费额度限制问…...
WPF【11_7】WPF实战-重构与美化(ViewModel的嵌套与分解、海量数据不要Join)
11-12 【重构】ViewModel的嵌套与分解 目前我们的代码中有一个不易发现的致命问题,如果工作中这样写代码大概率会被打回去重做。那么这个问题是什么呢? --\ViewModels\MainViewModel.cs 视图模型中的 LoadCustomers() 方法,考虑一下在这里我…...

Linux 的编辑器--vim
1.Linux编辑器-vim使⽤ vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,⽽且还有⼀些新的特性在⾥⾯。例如语法加亮,可视化操作不仅可以在终端运⾏,也可以…...
Oracle 慢sql排查
Oracle慢sql排查步骤 1.1. 前言 Oracle 慢查询的排查方向包括以下几个方向 : 基准测试 (吞吐量): 包括 Oracle 本身吞吐量和磁盘 I/O 吞吐量硬件分析 (资源情况): 包括查看服务器 CPU , 硬盘的使用情况SQL分析:分析 SQL 中是否存在慢查询 , 是否命中索引配置优化…...

[Protobuf] 快速上手:安全高效的序列化指南
标题:[Protobuf] (1)快速上手 水墨不写bug 文章目录 一、什么是protobuf?二、protobuf的特点三、使用protobuf的过程?1、定义消息格式(.proto文件)(1)指定语法版本(2)package 声明符 2、使用protoc编译器生成代码&…...
uniapp开发企业微信小程序时 wx.qy.login 在uniapp中使用的时候,需要导包吗?
在 UniApp 中使用 “wx.qy.login” 不需要手动导包,但需要满足以下条件: 一、环境要求与配置 1� 企业微信环境判断 必须确保当前运行环境是企业微信客户端,通过 “uni.getSystemInfoSync().environment” 判断是否为 “wxwork”…...

如何将通话记录从Android传输到Android
“如何将通话记录从 Android 转移到 Android?我换了一部新的 Android 手机,想要将通话记录复制到其中。”您需要将通话记录从 Android 传输到 Android 是一种常见的情况,因为通话记录是手机上最重要的数据之一。幸运的是,如果您从…...
Word 目录自动换行后错位与页码对齐问题解决教程
📘 Word 目录自动换行错位与页码对齐问题解决教程 🎯 目标效果 目录条目过长自动换行后,第二行左对齐整齐;页码始终靠右对齐,前方带有“……”引导符;解决页码错位、制表符消失或格式混乱问题。 …...

数据结构第4章 栈、队列和数组 (竟成)
目录 第 4 章 栈、队列和数组 4.1 栈 4.1.1 栈的基本概念 4.1.2 栈的基本操作 4.1.3 栈的实现 1.顺序栈 2.链式栈 3.共享栈 4.1.4 顺序栈的基本操作实现 1.初始化栈 2.判空 3.判满 4.元素进栈 5.元素出栈 6.获取栈顶元素 4.1.5 链栈的基本操作实现 1.元素进栈 2.元素出栈 4.1.6…...
removeIf() 方法,结合 Lambda 表达式
在 Java 8 中,removeIf() 方法是 Collection 接口新增的一个默认方法,用于根据条件批量删除集合中的元素。结合 Lambda 表达式,可以以极简的语法实现复杂的过滤逻辑。以下是详细说明: 1. 方法定义与语法 // java.util.Collection 接口中的定义 default boolean removeIf(P…...
汽车售后诊断数据流详细分析
一、引言 随着汽车电子化程度的不断提升,电控系统已成为车辆运行的核心支撑。据罗兰贝格 2025 年智能汽车白皮书数据显示,中央计算 区域控制架构(Zonal EEA)的普及率已突破 58%,推动整车线束成本下降 41%12。与此同时…...

2025年渗透测试面试题总结-匿名[校招]安全研究员(SAST方向)(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 匿名[校招]安全研究员(SAST方向) 一面问题回答框架 1. 自我介绍 2. 简历深挖(漏洞挖掘&#x…...

Unity 游戏优化(持续更新中...)
垃圾回收 是什么? 垃圾回收(Garbage Collection)GC 工作机制 1、Unity 为用户生成的代码和脚本采用了自动内存管理。 2、小块数据(如值类型的局部变量)分配在栈上。大块数据和长期存储分配在托管堆上。 3、垃圾收集…...
LlamaFactory——如何使用魔改后的模型
需求来源:有时我们可能想在llamafactory框架支持的模型上进行一些改动,例如修改forward()方法等,修改方法我们可以通过继承Transformers库中相应的class并重写相应的方法即可,那我们如何使用自己的模型呢? 首先&#…...