您现在的位置:新闻首页>快讯

因为爱情蔡明会造成什么影响?

2022-12-30编辑:admin(来源:原创/投稿/转载)


  以前面试的时候就遇到过这个问题,大家看个动图了解下面试官和我当时的场景,求当时我的心里阴影面积。

  的地址是 位的,2的32次方,大概是。地球光人口就76亿了,40亿IP这点量,塞牙缝都不够,实际上IP也确实用完了。

  所以就有了, 的地址是 位的,大概是2的128次方≈10的38次方。据说地球的沙子数量大概是10的23次方,所以IPV6的IP可以认为用不完。

  在IPV4下的回环地址是 ,在下,表达为 。中间把连续的0给省略了,之所以不是7个 冒号,而是2个冒号:, 是因为一个 IPV6 地址中只允许出现⼀次两个连续的冒号。

  ping 是应用层命令,可以理解为它跟游戏或者聊天软件属于同一层。只不过聊天软件可以收发消息,还能点个赞什么的,有很多复杂的功能。而 ping 作为一个小软件,它的功能比较简单,就是尝试发送一个小小的消息到目标机器上,判断目的机器是否可达,其实也就是判断目标机器网络是否能连通。

  虽然ICMP协议和IP协议都属于网络层协议,但其实ICMP也是利用了IP协议进行消息的传输。

  为了发送消息,那就得先知道往哪发。linux里万物皆文件,那你要发消息的目的地,也是个文件,这里就引出了socket 的概念。

  在 TCP 传输中创建的方式是  ,其中 表示将使用 IPV4 里host:port的方式去解析待会你输入的网络地址。 是指使用面向字节流的 TCP 协议,工作在传输层。

  创建好了 之后,就可以愉快的把要传输的数据写到这个文件里。调用 socket 的接口的过程中进程会从用户态进入到内核态,最后会调用到 方法。

  然后进入传输层,带上头。网络层带上头,数据链路层带上 头等一系列操作后。进入网卡的发送队列 ring buffer,顺着网卡就发出去了。

  回到 , 整个过程也基本跟 发数据类似,差异的地方主要在于,创建 的时候用的是  , 是原始套接字 ,工作在网络层, 所以构建(网络层协议)的数据,是再合适不过了。ping 在进入内核态后最后也是调用的   方法,进入到网络层后加上ICMP和IP头后,数据链路层加上MAC头,也是顺着网卡发出。因此 本质上ping 跟 普通应用发消息 在程序流程上没太大差别。

  这也解释了为什么当你发现怀疑网络有问题的时候,别人第一时间是问你能ping通吗?因为可以简单理解为ping就是自己组了个数据包,让系统按着其他软件发送数据的路径往外发一遍,能通的话说明其他软件发的数据也能通。

  那么断网的情况下,网卡已经不工作了,ping 回环地址却一切正常,我们可以看下这种情况下的工作原理。

  从应用层到传输层再到网络层。这段路径跟ping外网的时候是几乎是一样的。到了网络层,系统会根据目的IP,在路由表中获取对应的路由信息,而这其中就包含选择哪个网卡把消息发出。

  本地网卡,其实就是个假网卡,它不像真网卡那样有个什么的,假网卡会把数据推到一个叫 的链表中。这个链表,其实是所有网卡共享的,上面挂着发给本机的各种消息。消息被发送到这个链表后,会再触发一个软中断。

  专门处理软中断的工具人ksoftirqd(这是个内核线程),它在收到软中断后就会立马去链表里把消息取出,然后顺着数据链路层、网络层等层层往上传递最后给到应用程序。

  ping 回环地址和通过TCP等各种协议发送数据到回环地址都是走这条路径。整条路径从发到收,都没有经过线叫本地回环地址,可以理解为,消息发出到这个地址上的话,就不会出网络,在本机打个转就又回来了。所以断网,依然能 通 。

  lo0,表示本地回环接口,对应的地址,就是我们前面提到的127.0.0.1,也就是回环地址。

  lo0 假网卡,都会经过网络层和数据链路层等逻辑,最后在快要出网卡前狠狠拐了个弯, 将数据插入到一个链表后就软中断通知ksoftirqd来进行收数据的逻辑,压根就不出网络。所以断网了也能 通回环地址。

本文地址:http://www.zibocpa.cn/qichekuaixun/2022/ywaqcmhzcsmyx__48042.html


  • 本网转载的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请联系我们进行修改或删除。