首页 > 其他分享 >关于网络协议的若干问题(二)

关于网络协议的若干问题(二)

时间:2023-10-11 23:31:57浏览次数:29  
标签:IP 网络协议 MAC 网络 地址 网桥 关于 DHCP 若干

1、网络号、IP 地址、子网掩码和广播地址的先后关系是什么?

答:当在一个数据中心或者一个办公室规划一个网络的时候,首先是网络管理员规划网段,一般是根据将来要容纳的机器数量来规划,一旦定了,以后就不好变了。

假如你在一个小公司里,总共就没几台机器,对于私有地址,一般选择 192.168.0.0/24 就可以了。这个时候先有的是网络号。192.168.0 就是网络号。有了网络号,子网掩码同时也就有了,就是前面都是网络号的是 1,其他的是 0,广播地址也有了,除了网络号之外都是 1。

当规划完网络的时候,一般这个网络里面的第一个、第二个地址被默认网关 DHCP 服务器占用,你自己创建的机器,只要和其他的不冲突就可以了,当然你也可以让 DHCP 服务自动配置。规划网络原来都是网络管理员的事情。

有了公有云之后,一般有个概念虚拟网络(VPC),鼠标一点就能创建一个网络,网络完全软件化了,任何人都可以做网络规划。

2、组播和广播的意义和原理是什么?

答:广播和组播分为两个层面,其中 MAC 层有广播和组播对应的地址,IP 层也有自己的广播地址和组播地址。

广播相对比较简单,MAC 层的广播为 ff:ff:ff:ff:ff:ff,IP 层指向子网的广播地址为主机号为全 1 且有特定子网号的地址。

组播复杂一些,MAC 层中,当地址中最高字节的最低位设置为 1 时,表示该地址是一个组播地址,用十六进制可表示为 01:00:00:00:00:00。IP 层中,组播地址为 D 类 IP 地址,当 IP 地址为组播地址的时候,有一个算法可以计算出对应的 MAC 层地址。

多播进程将目的 IP 地址指明为多播地址,设备驱动程序将它转换为相应的以太网地址,然后把数据发送出去。这些接收进程必须通知它们的 IP 层,它们想接收的发给定多播地址的数据报,并且设备驱动程序必须能够接收这些多播帧。这个过程就是“加入一个多播组。

当多播跨越路由器的时候,需要通过 IGMP 协议告诉多播路由器,多播数据包应该如何转发。
 

3、MTU 1500 的具体含义是什么?

答:MTU(Maximum Transmission Unit,最大传输单元)是二层的一个定义。以以太网为例,MTU 为 1500 个 Byte,前面有 6 个 Byte 的目标 MAC 地址,6 个 Byte 的源 MAC 地址,2 个 Byte 的类型,后面有 4 个 Byte 的 CRC 校验,共 1518 个 Byte。

在 IP 层,一个 IP 数据报在以太网中传输,如果它的长度大于该 MTU 值,就要进行分片传输。如果不允许分片 DF,就会发送 ICMP 包。

在 TCP 层有个 MSS(Maximum Segment Size,最大分段大小),它等于 MTU 减去 IP 头,再减去 TCP 头。即在不分片的情况下,TCP 里面放的最大内容。

在 HTTP 层看来,它的 body 没有限制,而且在应用层看来,下层的 TCP 是一个流,可以一直发送,但其实是会被分成一个个段的。

4、 在 DHCP 网络里面,手动配置 IP 地址会冲突吗?

答:在一个 DHCP 网络里面,如果某一台机器手动配置了一个 IP 地址,并且在 DHCP 管理的网段里的话,DHCP 服务器是会将这个地址分配给其他机器的。一旦分配了,ARP 的时候,就会收到两个应答,IP 地址就冲突了。

如果由客户端来检测冲突,一般情况是,客户端在接受分配的 IP 之前,先发送一个 ARP,看是否有应答,有就说明冲突了,于是发送一个 DHCPDECLINE,放弃这个 IP 地址。

如果由服务器来检测冲突,DHCP 服务器会发送 ping,来看某个 IP 是否已经被使用。如果被使用了,它就不再将这个 IP 分配给其他的客户端了。

5、DHCP 的 Offer 和 ACK 应该是单播还是广播呢?

答:正常情况下,一旦有了 IP 地址,DHCP Server 还是希望通过单播的方式发送 OFFER 和 ACK。但是不幸的是,有的客户端协议栈的实现,如果还没有配置 IP 地址,就使用单播。协议栈是不接收这个包的,因为 OFFER 和 ACK 的时候,IP 地址还没有配置到网卡上。

所以,一切取决于客户端的协议栈的能力,如果没配置好 IP,就不能接收单播的包,那就将 BROADCAST 设为 1,以广播的形式进行交互。

如果客户端的协议栈实现很厉害,即便是没有配置好 IP,仍然能够接受单播的包,那就将 BROADCAST 位设置为 0,就以单播的形式交互。

6、DHCP 如何解决内网安全问题?

答:其实 DHCP 协议的设计是基于内网互信的基础来设计的,而且是基于 UDP 协议。但是这里面的确是有风险的。例如一个普通用户无意地或者恶意地安装一台 DHCP 服务器,发放一些错误或者冲突的配置;再如,有恶意的用户发出很多的 DHCP 请求,让 DHCP 服务器给他分配大量的 IP。

对于第一种情况,DHCP 服务器和二层网络都是由网管管理的,可以在交换机配置只有来自某个 DHCP 服务器的包才是可信的,其他全部丢弃。如果有 SDN,或者在云中,非法的 DHCP 包根本就拦截到虚拟机或者物理机的出口。

对于第二种情况,一方面进行监控,对 DHCP 报文进行限速,并且异常的端口可以关闭,一方面还是 SDN 或者在云中,除了被 SDN 管控端登记过的 IP 和 MAC 地址,其他的地址是不允许出现在虚拟机和物理机出口的,也就无法模拟大量的客户端。

7、STP 协议能够很好地解决环路问题,但是也有它的缺点,你能举几个例子吗?

答:STP 的主要问题在于,当拓扑发生变化,新的配置消息要经过一定的时延才能传播到整个网络。

由于整个交换网络只有一棵生成树,在网络规模比较大的时候会导致较长的收敛时间,拓扑改变的影响面也较大,当链路被阻塞后将不承载任何流量,造成了极大带宽浪费。

8、每台交换机的武力值是什么样的?

答:当一台交换机加入或者离开网络的时候,都会造成网络拓扑变化,这个时候检测到拓扑变化的网桥会通知根网桥,根网桥会通知所有的网桥拓扑发生变化。

网桥的 ID 是由网桥优先级和网桥 MAC 地址组成的,网桥 ID 最小的将成为网络中的根桥。默认配置下,网桥优先级都一样,默认优先级是 32768。这个时候 MAC 地址最小的网桥成为根网桥。但是如果你想设置某台为根网桥,就配置更小的优先级即可。

在优先级向量里面,Root Bridge ID 就是根网桥的 ID,Bridge ID 是网桥的 ID,Port ID 就是一个网桥上有多个端口,端口的 ID。

按照 RFC 的定义,ROOT PATH COST 是和出口带宽相关的,具体的数据如下:

关于网络协议的若干问题(二)_网络协议

9、在 MAC 地址已经学习的情况下,ARP 会广播到没有 IP 的物理段吗?

 答:ARP 的目标地址是广播的,所以无论是否进行地址学习,都会广播,而对于某个 MAC 的访问,在没有地址学习的时候,是转发到所有的端口的,学习之后,只会转发到有这个 MAC 的端口。

10、802.1Q VLAN 和 Port-based VLAN 有什么区别?

答:所谓 Port-based VLAN,一般只在一台交换机上起作用,比如一台交换机,10 个口,1、3、5、7、9 属于 VLAN 10。1 发出的包,只有 3、5、7、9 能够收到,但是从这些口转发出去的包头中,并不带 VLAN ID。

而 802.1Q 的 VLAN,出了交换机也起作用,也就是说,一旦打上某个 VLAN,则出去的包都带这个 VLAN,也需要链路上的交换机能够识别这个 VLAN,进行转发。



标签:IP,网络协议,MAC,网络,地址,网桥,关于,DHCP,若干
From: https://blog.51cto.com/key3feng/7817039

相关文章

  • (关于创建时用com/example和com.example导致的mapper包对应不上)org.apache.ibatis.bi
    日志输出:Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Requestprocessingfailed;nestedexceptionisorg.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.example.mapper.EmpMapper.li......
  • 关于 Spartacus CMS 请求响应是否应该被 Transfer State 机制 cover 的问题
    Spartacus默认设置是CMS请求会在CSR和SSR两种环境下都执行,动机是应对在页面渲染过程中,Back-Office有变化发生的情况。如果确实只希望CMS只在SSR端执行,将routing.loadStrategy改成ONCE即可。这个Stackoverflow帖子做了详细说明。打开上面的cms-store.module......
  • 学习笔记——关于浏览器中的事件循环
    首先了解关于浏览器的进程与线程何为进程?程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。何为线程?有了进程后,就可以运行程序的代码了。运行代码的「人」称之为「线程」。一个进......
  • 关于file类
    对文件进行操作://将文件封装为一个File类的对象:Filef=newFile("d:\\test.txt");Filef1=newFile("d:\\test.txt");Filef2=newFile("d:/test.txt");//File.separator属性帮我们获取当前操作系统的路径拼接符号//在windows,dos......
  • 关于CH32V系列MCU中断优先级配置以及硬件压栈
    从下图可以看出,第二列与第三列分别为优先级与优先级类型,优先级类型又分为两种,其一是固定优先级,其二是可编程的优先级。以RTC为例,优先级为5,优先级类型为可编程,代表着在不配置RTC的优先级时默认为5,如果需要,也可以将其配置为更高的优先级进行响应。下图关于中断优先级配置,针对CH32V......
  • 关于CH32V系列MCU 免表中断(VTF)的使用配置方法
    可编程快速中断控制器(PFIC)提供四个免表(VectorTableFree)中断通道,可不经过中断向量表的查表过程,直达中断函数入口。个人简单测试过,当开启VTF后,中断延迟时间大概可缩短2个时钟周期左右。关于VTF的具体介绍,可参考对应青稞微处理器手册3.5小节。QingKeV3手册:https://www.wch.cn/do......
  • .net 关于在program中使用AddNewtonsoftJson之后,继承于System.Text.Json.Serializatio
    首先,先说遇见的问题与代码示例,在.net代码中注册了如下代码.AddNewtonsoftJson(option=>{//使用本地时区option.SerializerSettings.DateTimeZoneHandling=DateTimeZoneHandling.Local;......
  • 关于CH32V307 PA6、7引脚复用为串口1和串口7配置方法
    1、复用为串口1配置方法关于PA6和PA7,重映射串口1时,最后下标为3,如下图。换算成二进制为11,重映射对应的就是PA6、PA7,如下图。由于库中没有直接定义该位,因此将PA6、PA7复用为USART1时,需要进行如下操作,如下图。可直接调用GPIO_PinRemapConfig函数,先调用该函数复用为USART1高位,再......
  • 关于算法竞赛中标识符命名的几点建议
    头图 引言标识符命名,一个OIer每天都在做,却基本从未在意过的操作。好的命名,既可以提高自己的调试效率,也可以提高代码可读性。方便自己,也方便别人。如果你觉得自己的代码不是很美观,又觉得码风已经定型,不如继续往下看,说不定可以让你的码风更进一步。欢迎@你身边有需要的......
  • 关于vant移动端的样式使用hbuilderX打包成app时数据请求失败的问题
    项目使用的是vant4,在使用hbuilderX打包时,发现请求后端失败,然后在网上查了一下说是因为在apk中不存在跨域的问题,所以不需要进行代理设置那就取消代理试试吧(注:我这里使用的是cli3):api.js中写入exportconstlogin=(data)=>{//登录  returnaxiosPost('http://xxx.xxx.......