图解网络(三)——IP

news2024/12/24 21:32:34

文章目录

  • 前言
  • 一、IP地址与MAC地址的作用
  • 二、IP基础
    • 2.1 基础
    • 2.2 IP 地址的分类
  • 三、ping的工作原理
    • 3.1 ICMP 协议
    • 3.2 TCP发数据和ping的区别
      • 3.2.1 如果用的是TCP的方式去发送消息
      • 3.2.1 如果用的是ping
  • 四、断网了,还能 ping 通 127.0.0.1 吗?
    • 4.1 什么是127.0.0.1
    • 4.2 为什么能ping通
    • 4.3 ping回环地址和ping本机地址有什么区别
    • 4.4 127.0.0.1 和 localhost 以及 0.0.0.0 有区别吗


前言

TCP/IP 模型主要分为应用层、传输层、网络层、网络接口层

IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。
在这里插入图片描述

一、IP地址与MAC地址的作用

IP 的作用是主机之间通信用的,而 MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。

例子:
小林要去一个很远的地方旅行,制定了一个行程表,其间需先后乘坐飞机、地铁、公交车才能抵达目的地,为此小林需要买飞机票,地铁票等。

飞机票和地铁票都是去往特定的地点的,每张票只能够在某一限定区间内移动,此处的「区间内」就如同通信网络中数据链路。
在区间内移动相当于数据链路层,充当区间内两个节点传输的功能,区间内的出发点好比源 MAC 地址,目标地点好比目的 MAC 地址。

整个旅游行程表就相当于网络层,充当远程定位的功能,行程的开始好比源 IP,行程的终点好比目的 IP 地址。

在这里插入图片描述
如果小林只有行程表而没有车票,就无法搭乘交通工具到达目的地。相反,如果除了车票而没有行程表,恐怕也很难到达目的地。因为小林不知道该坐什么车,也不知道该在哪里换乘。

因此,只有两者兼备,既有某个区间的车票又有整个旅行的行程表,才能保证到达目的地。与此类似,计算机网络中也需要「数据链路层」和「网络层」这个分层才能实现向最终目标地址的通信。

还有重要一点,旅行途中我们虽然不断变化了交通工具,但是旅行行程的起始地址和目的地址始终都没变。

其实,在网络中数据包传输中也是如此,源IP地址和目标IP地址在传输过程中是不会变化的(前提:没有使用 NAT 网络),只有源 MAC 地址和目标 MAC 一直在变化。

二、IP基础

2.1 基础

一台主机或者网卡可以设置2个以上的IP
在这里插入图片描述

2.2 IP 地址的分类

三、ping的工作原理

3.1 ICMP 协议

你女神爱不爱你,你问她,她可能不会告诉你。
但网通不通,你 ping 一下就知道了。

ping 某个IP 就是往某个IP地址发个消息

ping 是基于 ICMP 协议(互联网控制报文协议)工作的
ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址报告发送过程中 IP 包被废弃的原因和改善网络设置等。

3.2 TCP发数据和ping的区别

ping和其他应用层软件都属于应用层。

3.2.1 如果用的是TCP的方式去发送消息

为了发送消息,那就得先知道往哪发,那你要发消息的目的地,也是个文件,首先创建socket
socket(AF_INET, SOCK_STREAM, 0)
其中 AF_INET表示将使用 IPV4 里 host:port 的方式去解析待会你输入的网络地址。SOCK_STREAM 是指使用面向字节流的 TCP 协议,工作在传输层

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

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

3.2.1 如果用的是ping

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

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

四、断网了,还能 ping 通 127.0.0.1 吗?

那如果把 127.0.0.1 换成 0.0.0.0 或 localhost 会怎么样呢?你知道这几个IP有什么区别吗?

4.1 什么是127.0.0.1

其中127 开头的都属于回环地址,也是 IPV4 的特殊地址,没什么道理,就是人为规定的。
在这里插入图片描述

4.2 为什么能ping通

前面提到,有网的情况下,ping 最后是通过网卡将数据发送出去的。

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

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

当发现目标IP是外网IP时,会从"真网卡"发出。
当发现目标IP是回环地址时,就会选择本地网卡"假网卡"。

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

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

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

4.3 ping回环地址和ping本机地址有什么区别

我们在mac里执行 ifconfig

$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    inet 127.0.0.1 netmask 0xff000000
    ...
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    inet 192.168.31.6 netmask 0xffffff00 broadcast 192.168.31.255
    ...

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

eth0,表示本机第一块网卡,对应的IP地址是192.168.31.6,管它叫本机IP。

可以通过抓包发现,ping 本机IP 跟 ping 回环地址一样,相关的网络数据,都是走的 lo0,本地回环接口,也就是前面提到的**“假网卡”**。

只要走了本地回环接口,那数据都不会发送到网络中,在本机网络协议栈中兜一圈,就发回来了。因此 ping回环地址和ping本机地址没有区别。

4.4 127.0.0.1 和 localhost 以及 0.0.0.0 有区别吗

首先 localhost 就不叫 IP,它是一个域名,就跟 “baidu.com”,是一个形式的东西,只不过默认会把它解析为 127.0.0.1 ,当然这可以在 /etc/hosts 文件下进行修改。

127.0.0.1 是回环地址。localhost是域名,但默认等于 127.0.0.1。

其次就是 0.0.0.0,执行 ping 0.0.0.0 ,是会失败的,0.0.0.0在IPV4中表示的是无效的目标地址

ping 回环地址和 ping 本机地址,是一样的,走的是lo0 “假网卡”,都会经过网络层和数据链路层等逻辑,最后在快要出网卡前狠狠拐了个弯, 将数据插入到一个链表后就软中断通知 ksoftirqd 来进行收数据的逻辑,压根就不出网络。所以断网了也能 ping 通回环地址。
如果服务器 listen 的是 0.0.0.0,那么此时用127.0.0.1和本机地址都可以访问到服务。


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编译和链接

目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 2.2 编译本身也分为几个阶段&#xff1a; 2.2.1汇编过程的简略图 2.3讲解汇编过程的具体过程和要点 2.4运行环境 1. 程序的翻译环境和执行环境 在ANSIC的任何一种实现中&#xff0c;存在两个不同的环境。…

C++基础入门(一)

前言 欢迎进入C世界&#xff01;这是一种令人兴奋的语言&#xff0c;它在C语言的基础上添加上了对面向对象编程和泛型编程的支持&#xff0c;在20世纪90年代便是最重要的编程语言之一&#xff0c;并在21世纪仍保持强劲势头。C继承了C语言的高效、简洁、快速和可移植性的传统。C…

【计算机视觉 | 图像分割】Segment Anything论文讲解

文章目录 一、前言二、论文出发点三、创新思路四、方法4.1 Segment Anything Task4.2 Segment Anything Model4.3 Segment Anything Data Engine4.4 Segment Anything Dataset 五、结果 一、前言 论文&#xff1a;https://arxiv.org/pdf/2304.02643.pdf 项目&#xff1a;https…

数据结构(一)—— 数组

文章目录 一、数组基础二、题1. 704 二分查找2. 27 移除元素3. 977 有序数组的平方4. 209 长度最小的子数组 一、数组基础 数组是存放在连续内存空间上的相同类型数据的集合&#xff0c;也就是说数组内存空间的地址是连续的。 因为数组的在内存空间的地址是连续的&#xff0c;…

COIG:首个大规模、可商用的中文开源指令数据!

文 | ZenMoore ChatGPT 出现后的这几个月&#xff0c;整个学界和业界的疯狂想必大家都已经看到了。 然而&#xff0c;在背各种各样的动物还有山海经怪兽的英语单词的时候&#xff0c;其实不妨停下来想一想复现中文 ChatGPT 到底缺什么&#xff1f;缺大模型吗&#xff1f;缺工程…

C++的引用

目录 引用概念 引用的用法 做函数形参 优点一 优点二 引用做返回值 让我们更深入的了解引用与指针 语法层引用与指针完全不同的概念 站在底层的角度看指针与引用 笔记类型文章 引用概念 在语言层面上&#xff1a;引用不是定义新的变量&#xff0c;而是给已存在变量再…

大模型带来的Web复兴,会是昙花一现吗?

大家是不是对GPT、对话式AI、生成式AI之类的话题&#xff0c;已经有点审美疲劳了&#xff1f; 写这篇文章之前&#xff0c;我有点犹豫&#xff0c;究竟还要不要接着讨论GPT了。最终决定写&#xff0c;是觉得个人用户、开发者&#xff0c;以及正在紧锣密鼓训大模型的AI公司和云厂…

Go | 一分钟掌握Go | 1 - 安装Go

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱原创&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 为什么学Go 为什么要学Go&#xff1f;网上太多广告和说辞了&#xff0c;什…

“SCSA-T学习导图+”首发:路由技术之OSPF入门

本期引言&#xff1a; 路由技术是网络环境中&#xff0c;为不同的节点传输数据提供传输路径的技术&#xff0c;企业网络的拓扑一般会比较复杂&#xff0c;不同的部门或者总部和分支可能处于不同的网段中&#xff0c;此时就需要使用路由协议来连接不同的网段&#xff0c;实现数…

django channels(websocket)的使用,实现网页间实时聊天

目录 一、创建项目mysite和应用chat 1. 创建项目mysite 2. 创建应用chat并添加应用到settings.py的INSTALLED_APPS中 3. 添加模板文件 4. 添加视图及路由 5.配置根路由指定chat应用的路由 6. 集成channels 二、实现聊天服务器 1. 创建一个新文件chat/templates/chat/r…

响应式开发HTNL5CSS3视频播放器

目录 前言 一、本视频播放器需要实现的功能 ​二、代码分布结构 三、部分主要代码 1.index01.html 2.video1.css 3.video1.js 四、images图片资源及视频 五、运行效果 前言 1.本文讲解的响应式开发技术&#xff08;HTML5CSS3Bootstrap&#xff09;的HTML5视频播放器等…

TS-黑马(二)

目录&#xff1a; &#xff08;1&#xff09;ts-类型-字面量与nullish类型 &#xff08;2&#xff09;ts-类型-泛型 &#xff08;3&#xff09;ts-意义 &#xff08;4&#xff09;ts-class语法 &#xff08;1&#xff09;ts-类型-字面量与nullish类型 我们子啊传递参数的时…

以 100GB SSB 性能测试为例,通过 ByteHouse 云数仓开启你的数据分析之路

动手点关注 干货不迷路 I. 传统数仓的演进&#xff1a;云数仓 近年来&#xff0c;随着数据“爆炸式”的增长&#xff0c;越来越多的数据被产生、收集和存储。而挖掘海量数据中的真实价值&#xff0c;从其中提取商机并洞见未来&#xff0c;则成了现代企业和组织不可忽视的命题。…

总的所有的全部的完全的整个的整体的: all entire full gross whole total

all entire full gross whole total 所有的,完全的,完整的全部的,整个的,整体的,总的 all entire full gross whole total all entire full gross whole total一些词典的解释allentirefullgrosswholetotal 区别辨析entire、whole、complete、full、total、gross与alltotal&…

【JavaWeb】HTMLCSS

一:B/S 软件的结构 二&#xff1a;前端的开发流程 3、网页的组成部分 页面由三部分内容组成&#xff01; 分别是内容&#xff08;结构&#xff09;、表现、行为。 内容&#xff08;结构&#xff09;&#xff0c;是我们在页面中可以看到的数据。我们称之为内容。一般内容 我们…

【Linux】共享内存(shm)代码实现

文章目录 共享内存介绍最快的IPC形式共享内存示意图共享内存数据结构共享内存函数shmget函数shmfig shmat函数说明&#xff1a; shmdt函数shmctl函数 共享内存的原理小结 共享内存的特点生命周期共享内存的大小共享内存为什么快共享内存没有任何的保护机制即同步互斥扩展内容 代…

《软件开发本质论》读书笔记

目录 第一部分——价值的循环开发取向频繁交付小的&#xff0c;价值大&#xff0c;代价小的特性 测试同时要有业务测试和开发测试开发测试应在代码开发的同时完成甚至先于代码完成 重构第一部分总结 第二部分——说明与论述团队目的自主专精 五卡法预测软件计划控制好自己所参与…

二叉树一定是完全二叉树

一、树的概念及其结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 1、树的特点 ①有一个特殊的结点&…

ARM Coresight 及 DS-5 介绍 5 - ARM Cortex-M DS-5 加载 ELF 文件运行

文章目录 1.1.1 DS-5 工程创建1.1.2 DS-5 加载 ELF 脚本创建1.1.3 DS-5 脚本读写 Memory1.1.4 DS-5 扫描脚本 1.1.1 DS-5 工程创建 在使用ARM DS-5 连接 board(或者PFGA)之前首先需要能够扫描到相应的硬件信息&#xff0c;比如对应的cpu的相关信息&#xff1a;coresight 相关组…

【Zblog搭建博客网站】windows环境搭建属于自己的博客并发布上线 - cpolar内网穿透

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转载自远程内网穿透的文章&#xff1a;【Zblog建站】搭建属于自己的博客网站&#…