文章目录
- 1.入门了解
- 2.认识报头
- 3.认识网段
- 4.路由跳转
- 相关指令
- 路由
该文诸多理解参考文章:好文!
1.入门了解
用户需求:将我的数据可靠的跨网络从A主机送到B主机
传输层TCP:由各种方法(流量控制/超时重传/滑动窗口/拥塞控制)提供可靠性策略
网络层IP:将数据跨网络从A主机送到B主机的能力。
主机: 配有IP地址, 但是不进行路由控制的设备;
路由器: 即配有IP地址, 又能进行路由控制;
节点: 主机和路由器的统称;
IP 协议是在网络协议栈中的网络层的,数据包经过 TCP/UDP 传输层封装报头后,传给下层网络层,网络层负责在复杂的网络环境中确定一个合适的路径。
TCP 协议给 IP 协议提供可靠性,如果发送失败了,TCP 超时重传策略可以支持重新发送,继续传给网络层发送。IP 协议的本质工作是提供一种能力,将数据跨网络从主机A发送到主机B。
在公网中需要给所有的主机进行标识,从主机A发送到主机B,需要源 IP 地址和目的 IP 地址来标识源主机和目的主机。IP 地址在被设计的时候是经过精心设计的, IP 地址是由目标网络+目标主机组合成的,像学号一样,区分一个学生是哪一个学院哪一个专业的。【我们的世界都是被精心设计的,人类文明是岁月的沉淀,智慧的精华!】
交换机构建子网,子网通过路由器连接成为较大的“子网”,如果子网1中的主机A需要将数据发送给子网2中的主机B,需要通过目标 IP 地址中的目标网络,找到子网2==》通过路由器的转发!在公网中,路由器是认识并可以通过路径找到某个子网的!你捡到一个学生证,怎么归还?一个一个去问?效率太慢!直接问辅导员,辅导员根据学号某些位发现不是本院,联系对应学院辅导员x,由x交与失主。相对于在公网中一个一个去找就大大提高了效率!排除的效率高了,或者说是寻找的范围缩小了!把这多个局域网看成一个广域网,每一个广域网与广域网之间也可以用路由器连接起来!此时就可以进行各种跨网络传输了!
2.认识报头
字段描述
IP报头(也称为IP头部或IP报文头部)是IP数据报(即IP包)的重要组成部分,它包含了数据报在网络中传输所需的关键信息。以下是对IP报头字段的简要叙述:
- 版本(Version)
位置与长度:位于IP报头的第1个字节的前4位,占4bit。
作用:表示IP协议的版本号,常见的版本号为4(IPv4)和6(IPv6)。 - 首部长度(Internet Header Length, IHL)
位置与长度:紧跟在版本字段之后,占4bit。
作用:表示IP头部的长度,以32位(4字节)为单位。如果不包含选项字段,其值通常为5(即20字节)。最大值为15,意味着IP头部最大长度为60字节。整个报头的取值范围在 [20, 60] 字节之间。 - 区分服务(Type of Service, TOS)或称为服务类型(Differentiated Services, DS)
位置与长度:通常位于IHL字段之后,占8bit。
作用:用来指定IP包的服务类型,如优先级、延迟等级等。但需要注意的是,随着IP协议的发展,TOS字段的某些部分已经被重新定义或忽略。
3位优先权字段(已经弃用), 4位TOS字段,和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要. - 总长度(Total Length)
位置与长度:位于IP报头中较靠后的位置,占16bit。
作用:表示整个IP数据报的长度,包括IP头部和数据部分,单位为字节。最长可达65535字节,但必须不超过最大传输单元(MTU)的限制。 - 标识(Identification)
位置与长度:占16bit。
作用:用来唯一标识一个IP数据报,主要用于数据报的分片和重组过程。主机每发送一个数据报,其标识值就会加1。 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.IP 报文的编号,不同的 IP 报文,编号是不一样的,分片之后的报文,编号是相同的。也就是唯一标识主机发送的报文。不到万不得已不建议分片!数据包个数越多,发生丢包概率越大!局域网通信时碰撞概率也越大! - 标志(Flags)
位置与长度:占3bit。
作用:包含分片控制信息,主要有两个标志位:“DF”(Don’t Fragment,不分片)和“MF”(More Fragment,更多分片)。DF=0表示数据报可以分片,DF=1表示数据报不能分片;MF=1表示后面还有分片,MF=0表示这是最后一个分片。第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 如果DF=1并且报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为0, 其他是1. 类似于一个结束标记. - 片偏移(Fragment Offset)
位置与长度:占13bit。
作用:在分片过程中,表示某个分片在原数据报中的相对位置,以8字节为单位。分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了) - 生存时间(Time to Live, TTL)
位置与长度:占8bit。
作用:指定IP包在网络中可以经过的最大路由器数目,用于防止数据包在网络中无限循环。每经过一个路由器,TTL值就会减1,当TTL减至0时,数据包将被丢弃。数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环 - 协议(Protocol)
位置与长度:占8bit。
作用:标识IP数据报中所包含的上层协议类型,如TCP(6)、UDP(17)等,以便目的主机的IP层将数据部分上交给相应的进程处理。表示上层协议的类型,即要把 IP 的有效载荷交付给上层的哪一个协议。 - 首部校验和(Header Checksum)
位置与长度:占16bit。
作用:用于校验IP头部的正确性,以保证数据包在传输过程中没有被篡改。该字段只检验数据包的首部,不检验数据部分。使用CRC进行校验, 来鉴别头部是否损坏 - 源IP地址(Source Address)
位置与长度:位于IP报头的后半部分,占32bit(IPv4)。
作用:指定发送方的IP地址。 - 目的IP地址(Destination Address)
位置与长度:紧跟在源IP地址之后,占32bit(IPv4)。
作用:指定接收方的IP地址。根据这个进行路径选择。 - 选项(Options)
位置与长度:位于IP报头的最后部分,长度可变。
作用:提供额外的信息或功能,如排错、测量以及安全等。但需要注意的是,并非所有的IP数据报都会包含选项字段。
报头的长度是 20 个字节,报头和有效载荷通过固定长度 + 自描述字段(4位首部长度+16位总长度)进行分离。
通信时,报文并没有通过网络层直接发出去,而是继续交给下一层数据链路层。数据链路层不能一次发送过大的报文!要求上层不能交付给数据链路层过大的报文!倒逼 TCP 层就算对方接收缓冲区有很多空间,也不能一次发送太多过来==》滑动窗口控制发送的数据量。
数据链路层能发送的最大报文通过 ifconfig 查看,所能转发的最大报文的字节数称为 mtu。mtu 1500 指数据链路层的报头 + 有效载荷,实际上能够转发的 IP 报文是要 1500 减去数据链路层的报头大小。假设3000的数据包要分片,每片1500,第一个分片:1500(IP数据包的前1500包含20头1480数据) 第二个:新增20头+IP包1480数据,第三个:20+20.
如果 IP 报文非常大呢,需要 IP 层进行分片转发,到了目标主机还要在网络层进行组装。要求 IP 报头里涵盖分片和组装的相关信息,所以 16 位标识、3 位标志、13 位片偏移 就是 IP 分片和组装的字段!【如果上层传下来比较大的报文 就需要网络层进行分片转发】
分片完后如何组装?
- 将分片聚集在一起,通过相同的16 位标识将它们聚在一起。如果其中一个分片报文丢失了呢?首先最简单的就是丢失第一个和最后一个。丢失第一个可以通过组装的时候发现没有一个片偏移是 0 的,就能分辨出第一个丢失。丢失最后一个可以通过组装的时候发现没有一个片MF为 0,就能分辨出最后一个丢失。如果中间的分片报文丢了呢?丢失的分片报文的后一个分片报文的片偏移量是前面分片报文的和,此时如果中间的报文丢了,就能通过比较丢失报文的后一个片偏移量和前面报文的和不一致判断出来。
- 根据片偏移进行排序即可进行组装。
对方网络层收到的IP 报文怎么判断该报文是被分片了?
粗略通过收到任意一个分片报文的片偏移判断,片偏移为 0 ==该报文没有被分片或是被分片的第一个分片报文。
细分:“DF”(Don’t Fragment,不分片)和“MF”(More Fragment,更多分片)。DF=0表示数据报可以分片,DF=1表示数据报不能分片;MF=1表示后面还有分片,MF=0表示这是最后一个分片。
一个分片都要带 IP 协议的报头的,如果没有报头,那么报头中的信息全部都没有了,也就无法进行组装了!假设报头是 20 字节的话,分片时假设规定每片50,实际该片“数据”为30。
实际上并不建议分片,如果在组装的时候发现有其中一片丢失了,整体上该报文就被全部丢弃了,这就要求发送方的 TCP 层整体重新发送了,如果是 UDP,该报文也就丢失了。
3.认识网段
IP地址分为两个部分,网络号和主机号:
网络号:保证相互连接的两个网段具有不同的标识;
主机号:同一网段内,主机之间具有相同的网络号,有不同的主机号;
路由器本质是特定一个子网的主机,要配置 IP 地址;
路由器至少要连接两个子网,路由器也就相当于同时在两个子网中==》路由器必须要配置至少两个 IP= =》路由器有多张网卡;
路由器一般是一个子网中的第一台设备,一般它的 IP 地址都是 xxx.xxx.xxx.1,即网络号.1;
路由器的功能1. IP 报文的转发 2. 构建子网(局域网);
不同的子网其实就是把网络号相同的主机放到一起;
如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,主机号不和子网中的其他主机重复;
通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同.
手动管理子网内的IP, 是一个相当麻烦的事情.
有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便。一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器。
IP 地址是由 4 个字节组成,32 位,全球中的 IP 地址有 2^32 个, IP 地址是一种有限的资源。IP 地址不能乱用,有一定的划分方式。
根据网络ID的不同
局限性:大多数组织都申请B类网络地址,导致B类地址很快就分配完了,A类却浪费了大量地址。
申请了一个B类地址,理论上一个子网内能允许6万5千多个主机。A类地址的子网内的主机数更多。实际网络架设中,不会存在一个子网内有这么多的情况,大量的 IP 地址都被浪费掉了。
新的划分方案CIDR(Classless Interdomain Routing)
CIDR(Classless Inter-Domain Routing,无类别域间路由)是IPv4地址分配和路由表选择的一种灵活且高效的方法。以下是关于CIDR的详细解释:
一、CIDR的定义与背景
CIDR是在1993年引入的,旨在改进IPv4地址的分配效率,延缓IPv4地址的耗尽,并减少路由表的大小,提高路由效率。随着互联网的急速扩张,传统的基于类(Classful)的IP地址划分方式变得不够灵活,无法适应不断增长的网络需求。CIDR通过引入“无类别”的方式来表示网络地址和相应的子网掩码,从而解决了这一问题。
二、CIDR的核心思想
CIDR的核心思想是将IP地址划分为前缀和后缀两部分,其中前缀表示网络的标识,而后缀表示主机的标识。CIDR使用斜线符号(/)后跟一个前缀长度来表示地址块。前缀长度指定了网络部分的位数,即网络前缀的长度。这使得网络管理员可以根据需要划分和分配IP地址,而不再受到固定类别的限制。
三、CIDR的表示方法
CIDR表示法使用一个斜杠(/)后跟一个数字来表示网络前缀的长度。例如,192.168.1.0/24表示一个IP地址块,其中192.168.1.0是网络的基本地址,/24表示前缀长度为24位。这意味着前24位用于网络标识,剩余的8位用于主机标识。通过这个CIDR表示法,我们可以轻松理解这个地址块包含了从192.168.1.0到192.168.1.255的所有主机。
四、CIDR的优势
灵活性:CIDR允许更灵活地分配IP地址,不再受限于传统的A、B、C类地址划分。
地址空间利用率高:通过更紧凑的路由表,CIDR减少了地址空间的浪费,提高了IP地址的利用率。
路由效率高:CIDR允许更紧凑的路由表,减少了路由表的大小,提高了路由的效率。这对于全球互联的大规模互联网至关重要,因为它降低了路由表的维护成本,并提高了网络的性能。
支持路由聚合:CIDR支持将多个连续的前缀聚合成超网,从而进一步减少路由表的表项数目,提高路由效率。
五、CIDR的应用
CIDR在网络编程、路由器配置、防火墙设置以及大型互联网架构设计中都有广泛应用。它不仅是IPv4地址分配和路由选择的重要工具,也是IPv6地址分配和路由选择的重要参考。
六、CIDR与子网掩码
CIDR中的地址掩码依然称为子网掩码。在CIDR表示法中,子网掩码的长度直接由前缀长度表示,无需单独指定子网掩码的值。例如,192.168.1.0/24的子网掩码就是255.255.255.0,这个子网掩码在二进制中表示为11111111.11111111.11111111.00000000,其中前面24位为1,表示网络部分,后面8位为0,表示主机部分。
七、CIDR的未来发展
尽管CIDR在IPv4地址分配和路由选择中发挥了重要作用,但随着IPv6的普及和应用,CIDR的概念和原理仍然具有重要的参考价值。IPv6地址空间远大于IPv4,但合理的地址分配和高效的路由选择仍然是网络设计和优化的重要课题。因此,CIDR的思想和技术将继续在网络领域发挥重要作用。
子网掩码
引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
子网掩码是一个 32 位的正整数,通常用一串 “0” 来结尾;
将 IP 地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号;
网络号和主机号的划分与这个 IP 地址是A类、B类还是C类无关;
引用图片:优秀好文
子网掩码通常是由二进制的一串连续的 “1” 和一串连续的 “0” 组成,其中如果 “1” 越多,对应的 IP 地址与子网掩码按位与后,得到的网络号的主机数就变得越少;如果子网掩码中 “0” 越多,也就是得到的网络号中主机变得越多,网络也就越大。所以子网掩码就可以通过调整 “1” 的个数进而调整一个子网中的主机号的增多或者减少!
子网掩码是在路由器中配置的,当我们的报文每经过一个路由器,路由器就会拿到我们报文中的目的 IP 地址,和自己内部的子网掩码按位与,就得到了网络号,然后路由器就可以经过目的网络将我们的数据进行转发。
IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;
IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高24位是1,也就是255.255.255.0
通常子网掩码的书写方式为:xxx.xxx.xxx.xxx/n,其中 /n 表示该地址的前 n 位全部为 “1”,后面的就为全 “0”.
子网掩码使得可以对32位IP地址进行任意划分(网络号+主机号=32位)
特殊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 地址的绝对上限没有增加),仍然不是很够用,有三种方式来解决:
动态分配 IP 地址:只给接入网络的设备分配IP地址。因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的;
NAT 技术;
IPv6:IPv6并不是IPv4的简单升级版。这是互不相干的两个协议,彼此并不兼容;IPv6用16字节128位来表示一个IP地址;但是目前IPv6还没有普及;
私有 IP 地址和公网 IP 地址
场景:一个组织内部组建局域网,IP 地址只用于局域网内的通信,不直接连到 Internet 上,理论上使用任意的 IP 地址都可以,但是RFC 1918(网络标准文档)规定了用于组建局域网的私有 IP 地址:
10.,前8位是网络号,共 16,777,216 个地址;
172.16. 到 172.31.,前 12 位是网络号,共 1,048,576 个地址;
192.168.,前16位是网络号,共 65,536 个地址 ;
包含在这个范围中的,都称为私有IP,其余的则称为公网IP。所以 IP 地址被硬性的划分为公网IP和私有IP。
公网
IPv4 下,IP 地址是有限的资源,在全球中是通过各种综合指标给每个国家进行分配 IP 地址。
全球大概有两百个国家,在 32 位的公网 IP 地址中,假设需要前 8 位来划分每一个国家,按照国家的不同有不同的编号,假设中国的前 8 位为 0000 0001,其它国家就类似这样划分就可以了。==》 1.XXX.XXX.XXX.
每个国家有自己的国际路由器,许多国家的国际路由器之间互相连接。假设China的子网掩码是 1.XXX.XXX.XXX/8. 假设China有 30 多个省,需要公网 IP 的 6 个比特位给每个省进行划分,以山东为例,对于国内路由器来说,子网掩码就应该是 1.8.xxx.xxx/14.
山东有非常多的市级,需要一些比特位对这些市级进行 IP 地址划分,假设需要 4 个比特位,对应的子网掩码就应该是 1.8.128.xxx/18;济南市的某一台主机,假设主机序号为 6,那么该主机的公网 IP 地址为 1.8.128.6.
巴铁访问这个 IP 地址,需要对这个公网 IP 地址的前 8 位进行判断,判断到不是本国的,将这个 IP 地址放到国际广域网中,当中国的国际路由器将该 IP 地址与自己的子网掩码按位与后,如果匹配就说明该 IP 地址的目标网络就是中国国内的网络。到了国内网络后,该 IP 地址进入到各省的广域网中,当山东的国内路由器的子网掩码和该 IP 地址按位与后匹配,该 IP 地址就进入到山东省内的网络,就可以找到对应的主机。
私网
家里的路由器 = 网络中的路由器 + 交换机 + 其他功能。交换机构建内部网络,路由器连接子网,构成更大的子网。家里的路由器能够构建子网(局域网),子网内的每一台设备都有自己的 IP 地址,该地址就是私网 IP 地址。该 IP 为什么不能是公网 IP 呢?公网 IP 地址划分到市级之后,剩下的位数已经严重不足了!简单来说,由于IPV4地址数有限,人们设计了一种方法,让他能够再被用完之前苟延残喘一下。即这样:在大的范围如国家/省/市用公网IP唯一标识一台主机(可以是路由器/计算机/等入网设备),在小的范围如家庭/小学校(小型子网)使用私网IP,不同的子网内私网IP可以不同,通过这种方法,延缓IP地址使用殆尽的处境。
当一个子网中的设备发起服务器请求时,将数据包交给家用路由器,家用路由器将数据包交给运营商路由器,再进入公网,访问服务器。
该数据包中的源 IP 地址就是对应设备的私网 IP 地址,目标 IP 地址就是访问的服务器对应的 IP 地址。当数据包经过上面的流程到了服务器之后,如果服务器需要将数据响应回来,那么此时它的源 IP 地址就是服务器的 IP 地址,目标 IP 地址就是发送设备的私网 IP 地址。但是这个目标 IP 地址是个私网 IP,私网 IP 是不能出现在公网中的!同一个私网 IP,在不同的局域网中可能多次出现过!所以这个数据响应就在公网中回不来了!
怎么解决这个问题呢?
由于在路由器中至少要有两个 IP 地址。
子网IP/LAN口IP:当前子网的 IP 地址==》子网IP构建子网x,y,z;运营商路由器的子网IP是xyz的WAN口IP;xyz还可以构建子网abc,外围路由器的子网IP是abc的WAN口IP;子网IP构建子网x,x内主机的子网IP和该路由器子网IP网络号同,主机号不同。
WAN口IP,相对于当前子网来说对外的 IP;如果这是一个家用路由器,那么它的 WAN口IP 就是运营商路由器的 IP;如果这是一个运营商路由器,那么它的 WAN口IP 就是公网 IP!
在数据包转发的过程中,每转发一次,会将源 IP 地址替换成每一个路由器的 WAN口IP 地址!数据包的源 IP 地址首先是该设备的内网 IP 地址,当数据包交给了家用路由器后,源 IP 地址就变成了家用路由器的 WAN口IP 地址,也就是运营商路由器的 子网IP 地址;当数据包又经过家用路由器转发给运营商路由器后,该数据包的源 IP 地址就变成了运营商的 WAN口IP 地址,也就是该运营商路由器的入口公网 IP 地址!到了公网之后该数据包的源 IP 地址就变成了公网 IP 地址,所以在服务器进行响应的时候,目标 IP 地址就是发送过来的运营商的公网入口 IP 地址,然后就可以找到该运营商的路由器进而一步一步返回到私网的设备中!源IP 地址不断被替换的过程称为 NAT技术!==》数据包通过很多中间设备到达目的地,每到达一个中间结点,源IP就被替换为该中间节点的WAN口IP。就是不再以最原来的私网IP作为源IP了,而是到哪一个中间设备用哪个中间设备的WAN口IP。
一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.
不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之间的IP地址就可以重复了.
每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN口IP就是一个公网IP了.
子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 该技术称为NAT(Network Address Translation,网络地址转换).
如果自己实现的服务器程序能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.
之前我们生活中用的都是私网IP,首次接触公网IP是租的服务器的公网IP。
全球网络
使用公网 IP 构建全球网络以及国内网络,到了市级之后,就不能继续使用公网 IP 进行划分了,所以就接入到私网中!所现在整个主流的互联网世界,采用的方案是:公网+私网 共同构成互联网!在这套全球网络中,大量的私网中出现同样的 IP 地址也不影响, NAT 主要是为了解决 IP 地址不足的问题的。
我们在家里如何上网?
运营商把网线/光纤拉到我们家,配置调制解调器(猫)+家用路由器(交换机+路由器)。模拟信号从光纤传给猫,猫将其转换为数字信号传给家用路由器(家用路由器会配置账号密码作为你们家可以接触网络的凭证)。家用路由器构建子网,可以设置路由器账号密码,作为自己上网的入口(不让别人使用你们家的网络而设置)
理解世界
网络诞生 国家认识到网络发展也是国家发展的一大课题 只要网络发展了 等候其他技术如无人驾驶/无人飞机等等成熟了 只要一入网就可以投入使用 提升人民生活质量 节约资源等社会效益。怎么发展网络?运营商首先得尽可能的把网线拉到全国各地,让更多的人入网,其次IP地址世界范围的划分并不是哪个国家的人多地址数就多,而是入网设备越多,分给你们国家的地址数越多(当然还有其他分配依据,综合各种指标分配)。IP地址是一种资源,其他国家会同意吗?IP地址的管理分配由各个国家的运营商开会决定,只要合理,能给世界带来积极效益,他们当然会同意,其次他们占用地址数却不使用–浪费!做这些基础工作的运营商是花费很大力气的,利润可能10-20年才能成本,这就是为什么总有人打电话让你升级套餐—想法设法提高利润。国家其实也在下发政策让运营商大力搞网络设施建设,原因:网络发展了,就有诸多互联网企业在这个时代下打造产品给用户使用,从而给国家缴税-----人民生活方便,提供了更多就业岗位,企业和员工赚钱,国家水平提高,国家税收增多----一举多得!
4.路由跳转
相关指令
查看私有IP
Windows:ipconfig
Linux:ifconfig
查看路由表
Linux:route
Windows:route print
在Linux系统中,route命令用于显示和操作IP路由表。随着Linux系统的发展,ip route命令逐渐取代了传统的route命令,它提供了更强大和灵活的功能。了解route命令的输出对理解Linux网络路由机制有帮助。
当你运行route(不带任何参数)时,它通常会显示系统的IP路由表,这些信息对于诊断网络问题非常有用。route命令的输出可能包含以下字段(字段的数量和顺序可能会因不同的Linux发行版或版本而异):
Destination(目标):这是路由的目的地网络或主机的IP地址。如果这一行是默认路由,则此字段通常显示为default或0.0.0.0。
Gateway(网关):到达目标网络或主机所需的下一跳地址。如果目标网络直接连接到本地接口,则此字段可能显示为*或0.0.0.0。
Genmask(网络掩码):用于指定目标网络地址中哪些位是网络部分,哪些位是主机部分。对于点对点连接(如PPP连接),此字段可能显示为255.255.255.255。
Flags(标志):这是一系列标志,表示路由条目的特性。常见的标志包括:
- U(Up):路由条目有效。U标志表示此条目有效(可以禁用某些 条目),
- G(Gateway):路由需要通过另一个主机(网关)。 G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发
- H(Host):目标是一个主机而不是网络。
- R(Reinstate Route for dynamic routing):这通常与动态路由协议相关。
- D(Dynamically installed by daemon or redirect):路由是动态安装的。
- M(Modified from routing daemon or redirect):路由被修改过。
- A(Installed byaddrconf):路由是由地址配置过程(如DHCP)安装的。
- C(Cache):路由是缓存条目,用于快速查找。
- !(Reject):拒绝路由。
Metric(跃点数):到达目标所需的成本或跃点数。这个数字越小,表示路由越优先。
Ref(引用):路由条目被其他路由条目引用的次数。
Use(使用):该路由条目被使用的次数。
Iface(接口):数据包离开本地系统时所使用的网络接口。
如果目的IP命中了路由表, 就直接转发即可;
路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。
某主机上的网络接口配置和路由表如下:
Destination | Gateway | Genmask | Flags | Metric | Ref | Use Iface |
---|---|---|---|---|---|---|
192.168.10.0 | * | 255.255.255.0 | U | 0 | 0 | 0 eth0 |
192.168.56.0 | * | 255.255.255.0 | U | 0 | 0 | 0 eth1 |
127.0.0.0 | * | 255.0.0.0 | U | 0 | 0 | 0 1o |
default | 192.168.10.1 | 0.0.0.0 | UG | 0 | 0 | 0 eth0 |
这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个连到192.168.56.0/24网络;
转发过程例1: 要发送的数据包的目的地址是192.168.56.3
跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符
跟第二行的子网掩码做与运算得 到192.168.56.0,是第二行的目的网络地址,从eth1接口发送出去;
由于192.168.56.0/24正 是与eth1 接口直接相连的网络(没有G标志),因此可以直接发到目的主机,不需要经路由器转发;
转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2
依次和路由表前几项进行对比, 发现都不匹配;
按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器;
由192.168.10.1路由器根据它的路由表决定下一跳地址;
查看数据链路层能够发送的最大报文
Linux:ifconfig – mtu字段:在数据链路层 报文+有效载荷的大小
路由
路由:在复杂的网络结构中,找出一条通往终点的路线。路由的过程是一跳一跳(Hop by Hop) “问路” 的过程,IP 数据包的传输过程即为这样。“一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。
IP 数据包到达路由器时,路由器会查看该数据包的目的IP;路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器;依次反复,一直到达目标IP地址;
一台主机向服务端发送数据时,在 IP 层会有源 IP 地址和目的 IP 地址。本地主机是可以工作在网络层的,在主机把报文下发的时候,实际上是在本机内进行路由!每一台主机都有自己的路由表。
其中每一列的含义,Destination 表示目标网络地址,也就是该路由器连接的网络;Gateway 表示下一跳的路由器;Genmask 表示子网掩码,每一个目标网络都要配上子网掩码;Flags 中,U 表示正在使用,G 表示该条目所对应的是路由器;Iface 表示通往该网段的出口,最终报文在进行转发时,想把它发出去,就通过这个接口发。
查路由表的过程
用目标主机的 IP 的地址按位与上 Genmask,用结果与每一行的 Destination 做对比,如果对比成功,就通过 Iface 的接口发出去;如果对比不成功,也就是不相同,直接对比下一个。
那么查路由表的结果:
没有结果:路由器设置的不好。需要改进。
给具体的下一跳
路由器不清楚,转入默认路由:默认路由一般指的是同网段的另一台路由器,也就是出口路由器,因为出口路由器一定还会级联其它不同的网络。
到达入口路由器
如何判定当前这个数据包该发送到哪里呢?
依靠每个节点内部维护一个路由表
路由表生成算法(选学)
路由表可以由网络管理员手动维护(静态路由), 也可以通过一些算法自动生成(动态路由).
请同学们课后自己调研一些相关的生成算法, 例如距离向量算法, LS算法, Dijkstra算法等.
路由表生成算法是网络通信中的关键部分,它决定了数据包在网络中的传输路径。以下是路由表生成算法的简要概述:
一、基本概念
路由器:连接不同局域网或广域网的设备,能够自动选择和设定路由,以最佳路径发送信号。
路由表:路由器或其他网络设备中存储的信息表,包含到达特定网络终端的路径信息。
二、常见的路由表生成算法
向量-距离算法(也称为Bellman-Ford算法)
原理:路由器周期性地向其相邻路由器广播自己知道的路由信息,包括可以到达的网络以及到达该网络的距离。相邻路由器根据收到的路由信息修改和刷新自己的路由表。
优点:算法简单,易于实现。
缺点:存在慢收敛问题,即路由器的路径变化需要像波浪一样从相邻路由器传输出去,过程缓慢。
链路-状态算法(也称最短路径优先算法,LS)
原理:
路由器向相邻路由器发送查询报文,测试链路状态。
收到链路状态后,向所有参加最短路径优先算法的路由器发送链路状态报文。
各路由器根据报文中的数据刷新网络拓扑结构图,并使用Dijkstra算法生成新的最短路径优先数并刷新路由表。
优点:收敛速度快,不易产生路由循环。
缺点:要求较强的CPU能力和较多的内存空间,实现成本较高。
Dijkstra算法
原理:
路由器建立网络图,并确定源节点和目的节点。
建立邻接矩阵,表示节点之间的链路权值。
为每个节点建立状态记录,包括前序字段、长度字段和标号字段。
初始化状态记录集参数,选择一个T节点(源节点),并更新与其直接相连的所有节点的状态记录。
重复选择权值最低的节点作为新的T节点,直到找到目的节点。
回溯提取前序节点,形成最佳路由。
三、路由表生成算法的应用与优化
应用:路由表生成算法在网络通信中发挥着重要作用,确保数据包能够高效、可靠地传输到目的节点。
优化:
收敛速度:通过改进算法逻辑,提高路由表的收敛速度,减少路径循环和网络中断的风险。
资源利用:优化算法的内存和CPU使用,降低实现成本。
安全性:研究更加安全可靠的路由生成算法,以应对网络攻击和数据泄露等风险。
综上所述,路由表生成算法是网络通信中的核心技术之一,它决定了数据包在网络中的传输路径。常见的算法包括向量-距离算法、链路-状态算法和Dijkstra算法等,每种算法都有其独特的优点和适用场景。在实际应用中,需要根据网络环境和需求选择合适的算法,并进行相应的优化和调整。