先献上几个梗

  • 1.1.1.1 不是测试用的,原来一直没分配,现在被用来做一个DNS了,宣传是比谷歌等公司的dns服务
    更保护用户隐私。
  • IP地址255.255.255.255,代表有限广播,它的目标是网络中的所有主机。
  • IP地址0.0.0.0,通常代表未知的源主机。当主机采用DHCP动态获取IP地址而无法获得合法IP地址时,会用IP地址0.0.0.0来表示源主机IP地址未知。
  • NID不能以数字127开头。NID 127被保留给内部回送函数,作为本机循环测试使用。
    例如,使用命令ping 127.0.0.1测试TCP/IP协议栈是否正确安装。在路由器中,同样支持循环测试地址的使用。1 查ip
  • Windows - ipconfig
  • Linux上- ifconfig

还有--- ip addr

ifconfig & ip addr的区别

net-tools起源于BSD,自2001年起,Linux社区已经对其停止维护,而iproute2旨在取代net-tools,并提供了一些新功能。一些Linux发行版已经停止支持net-tools,只支持iproute2。

net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。

net-tools中工具的名字比较杂乱,而iproute2则相对整齐和直观,基本是ip命令加后面的子命令。

虽然取代意图很明显,但是这么多年过去了,net-tool依然还在被广泛使用,最好还是两套命令都掌握吧。

想象你登录进入一个非常小的Linux系统,发现既没有_ifconfig_命令,也没有_ip addr_命令,

是不是感觉这个系统没法用?

可以自行安装net-tools和iproute2这两个工具

  • 运行ip addr。不出意外,应该会输出下面的内容

该命令显示这台机器上所有的网卡

大部分的网卡都有一个IP地址

IP地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码

既然是门牌号,不能大家都一样,不然就会冲突,快递就找不到地方了

所以,有时候咱们的电脑弹出网络地址冲突,出现上不去网的情况,多半是IP地址冲突

如上输出的结果,192.168.10.208就是一个IP地址

地址被点分隔为四个部分,每个部分8bit,总共32位

这样产生的IP地址的数量很快就不够用了

于是就有了IPv6,也就是上面输出结果里面inet6 fe80::...

这个有128位,现在看来是够够的

本来32位的IP地址就不够,还被分成了5类。现在想想,当时分配地址的时候,真是太奢侈了

在网络地址中,至少在当时设计的时候,对于A、B、 C类主要分两部分

  • 前面一部分是网络号
  • 后面一部分是主机号

这很好理解,大家都是六单元1001号

我是小区A的六单元1001号

而你是小区B的六单元1001号。

  • 下面这个表格,详细地展示了A、B、C三类地址所能包含的主机的数量

    这里面有个尴尬的事情,就是C类地址能包含的最大主机数量实在太少了,只有254个
    当时设计的时候恐怕没想到,现在估计一个网吧都不够用吧
    而B类地址能包含的最大主机数量又太多了。6万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。

2 无类型域间选路(CIDR)

这打破了原来设计的几类地址的做法,将32位的IP地址一分为二

  • 前面是网络号
  • 后面是主机号

10.100.122.2/24,这个IP地址中有一个斜杠,斜杠后面有个数字24

这种地址表示形式,就是CIDR

后面24的意32位中前24是网络号,后8位是主机号

伴随着CIDR存在的

  • 一个是广播地址
    10.100.122.255 如果发送这个地址,所有10.100.122网络里面的机器都可以收到
  • 另一个是子网掩码
    255.255.255.0

将子网掩码和IP地址进行AND计算,就可得到网络号

  • 前面三个255,转成二进制都是1
    1和任何数值取AND,都是原来数值,因而前三个数不变,为10.100.122
  • 后面一个0,转换成二进制是0
    0和任何数值取AND,都是0,因而最后一个数变为0,合起来就是10.100.122.0

3 公/私有IP地址

日常工作,几乎不用划分A类、B类或者C类,很多人就忘记了这个分类,只记得CIDR

但是有一点还是要注意的,就是公有IP地址和私有IP地址

上面的表格。表格最右列是私有IP地址段

平时看到的数据中心里,办公室/家/学校的IP地址,一般都是私有IP地址段

因为这些地址允许组织内部的IT人员自己管理、分配,而且可重复

因此,你学校的某个私有IP地址段和我学校的可以是一样的。

这就像每个小区有自己的楼编号和门牌号,你们小区可以叫6栋,我们小区也叫6栋,没有任何问题
但是一旦出了小区,就需要使用公有IP地址。就像人民路888号,是国家统一分配的,不能两个小区都叫人民路888号。

公有IP地址有个组织统一分配,你需要去买

如果你搭建一个网站,给你学校的人使用,让你们学校的IT人员给你一个IP地址就行

但是假如你要做一个类似网易163这样的网站,就需要有公有IP地址,这样全世界的人才能访问。

表格中的192.168.0.x是最常用的私有IP地址

你家里有Wi-Fi,对应就会有一个IP地址。一般你家里地上网设备不会超过256个,所以/24基本就够了

有时候我们也能见到/16的CIDR,这两种是最常见的,也是最容易理解的。

不需要将十进制转换为二进制32位,就能明显看出192.168.0是网络号,后面是主机号

而整个网络里面的第一个地址192.168.0.1,往往就是你这个私有网络的出口地址

例如,你家里的电脑连接Wi-Fi,Wi-Fi路由器的地址就是192.168.0.1

而192.168.0.255就是广播地址。一旦发送这个地址,整个192.168.0网络里面的所有机器都能收到。

但是也不总都是这样的情况。因此,其他情况往往就会很难理解,还容易出错。

4 一个容易“犯错”的CIDR

我们来看16.158.165.91/22这个CIDR

求一下这个网络的第一个地址、子网掩码和广播地址

你要是上来就写16.158.165.1,那就大错特错!!!

/22不是8的整数倍,不好办,只能先变成二进制来看

  • 16.158的部分不会动,它占了前16位
  • 中间的165,变为二进制为‭10100101‬。除了前面的16位,还剩6位。所以,这8位中前6位是网络号,16.158.<101001>,而<01>.91是机器号。

第一个地址是16.158.<101001><00>.1,即16.158.164.1

子网掩码是255.255.<111111><00>.0,即255.255.252.0

广播地址为16.158.<101001><11>.255,即16.158.167.255。

D类是组播地址

使用这一类地址,属于某个组的机器都能收到

这有点类似在公司里面大家都加入了一个邮件组。发送邮件,加入这个组的都能收到

在IP地址的后面有个scope

  • 对于eth0这张网卡来讲,是global,说明这张网卡是可以对外的,可以接收来自各个地方的包
  • 对于lo来讲,是host,说明仅可以供本机相互通信。
    lo全称是loopback,又称环回接口,往往会被分配到127.0.0.1这个地址
    这个地址用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。

5 MAC地址

在IP地址的上一行是link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff

这个被称为MAC地址

是一个网卡的物理地址,用十六进制,6个byte表示

MAC地址号称全局唯一,不会有两个网卡有相同的MAC地址,而且网卡自生产出来,就带着这个地址

很多人看到这里就会想,既然这样,整个互联网的通信,全部用MAC地址好了,只要知道了对方的MAC地址,就可以把信息传过去。

这样当然是不行的

一个网络包要从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能

而有门牌号码属性的IP地址,才是有远程定位功能

例如,你去XX市XX路XX号X楼X层找XX,你在路上问路,可能被问的人不知道X楼是哪个,但是可以给你指网商路怎么去
但是如果你问一个人,你知道这个身份证号的人在哪里吗?可想而知,没有人知道。

MAC地址更像是身份证,是一个唯一的标识

它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面的时候,可以不用担心冲突

从硬件角度,保证不同的网卡有不同的标识。

MAC地址是有一定定位功能的,只不过范围非常有限

你可以根据IP地址,找到XX市XX路XX号X楼X层,但是依然找不到我,你就可以靠吼了,大声喊身份证XXXX的是哪位?我听到了,我就会站起来说,是我啊
但是如果你在上海,到处喊身份证XXXX的是哪位,我不在现场,当然不会回答,因为我在杭州不在上海。

所以,MAC地址的通信范围比较小,局限在一个子网里面

例如,从192.168.0.2/24访问192.168.0.3/24是可以用MAC地址的

一旦跨子网,即从192.168.0.2/24到192.168.1.2/24,MAC地址就不行了,需要IP地址起作用了

6 网络设备的状态标识

<BROADCAST,MULTICAST,UP,LOWER_UP>net_device flags,网络设备的状态标识

  • UP
    网卡处于启动的状态
  • BROADCAST
    网卡有广播地址,可以发送广播包
  • MULTICAST
    网卡可以发送多播包
  • LOWER_UP
    L1是启动的,也即网线插着呢
  • MTU1500
    最大传输单元MTU为1500,这是以太网的默认值。

网络包是层层封装的

MTU是二层MAC层的概念。MAC层有MAC的头,以太网规定连MAC头带正文合起来,不允许超过1500个字节。正文里面有IP的头、TCP的头、HTTP的头。如果放不下,就需要分片来传输。

  • qdisc pfifo_fast (queueing discipline,排队规则)
    内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。

最简单的qdisc是pfifo,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列

pfifo_fast稍微复杂一些,它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。

三个波段(band)的优先级也不相同。band 0的优先级最高,band 2的最低。如果band 0里面有数据包,系统就不会处理band 1里面的数据包,band 1和band 2之间也是一样。

数据包是按照服务类型(Type of Service,TOS) 被分配到三个波段(band)里面的

TOS是IP头里面的一个字段,代表了当前的包是高优先级的,还是低优先级的。

队列是个好东西,后面我们讲云计算中的网络的时候,会有很多用户共享一个网络出口的情况,这个时候如何排队,每个队列有多粗,队列处理速度应该怎么提升,我都会详细为你讲解。

7 总结

  • IP是地址,有定位功能;MAC是身份证,无定位功能
  • CIDR可以用来判断是不是本地人
  • IP分公有的IP和私有的IP

参考

  • 趣谈网络协议

重学计算机网络(二) - 曾记否,查IP地址的更多相关文章

  1. Linux常用命令(二)查找当前ip地址

    查询当地ip地址(没错就是这么短): /sbin/ifconfig

  2. 计算机网络【3】—— IP地址分类与子网划分

    一.IP地址分类

  3. Linux基础二(修改ip地址、修改网关、修改DNS服务器、重新启动网络配置)

    网络的初始化 .ip地址的修改(临时生效) 使用ifconfig命令 ifconfig 网卡名 ip地址 netmask 子网掩码 [root@localhost /]# ifconfig eth1 ...

  4. 计算机网络-4-1-2-分类的IP地址

    有关IP最重要的文档就是互联网的正式标准RFC 791 IP地址及其表示方法 整个互联网就是一个单一,抽象的网络,IP地址就是给互联网上的每一台主机(或者路由器)的每一个接口分配一个在全世界范围内都是 ...

  5. 重学STM32----(二)

    前几天买了个蓝牙模块,昨天到来了,就打算来研究研究蓝牙.看了蓝牙模块的资料,知道通讯需要串口,那肯定要先写一个串口程序了.要是用库函数写,10多分钟可能就会搞定,但是这就违背我的初衷了,所以就不知天高 ...

  6. IP地址 A\B\C类

    互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(IP Address),在Internet上,一种给主机编址的方式.常见的IP地址,分为 ...

  7. Windows 之 IP地址

    IP地址是指互联网协议地址(Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络 ...

  8. windows之IP地址(一)

    服务器: 顾名思义,是服务我们上网的机器.结构组成上和普通的PC结构相似,装了服务器版的系统后都可以作为服务器使用,但前者可靠性高.服务器是网络这个网上的中间节点,供每台终端进行访问.数据信息保存,有 ...

  9. nginx 设置ip地址访问,但是设置域名访问不了

    一.导语 在Nginx的设置过程中,ip地址能正常访问的,但是把ip地址转换成域名,就访问不了了,这个是怎么回事呢?今天来探讨一下 二.设置ip地址做负载均衡 2.1.server端 server { ...

随机推荐

  1. Java连载6-变量的要求

    一.数据类型的作用 (1)不同的数据有不同的类型,不同的数据类型底层会分配不同的大小的空间 (2)数据类型是指程序在运行阶段应该分配多大的内存空间 二.变量要求 变量中存储的具体的“数据”必须和变量的 ...

  2. Spring框架之IoC和AOP

    Spring框架简介: 2003年2月,Spring框架正式成为一个开源项目,并发布于SourceForge中.致力于Java EE应用的各种解决方案,而并不是仅仅专注于某一层的方案,是企业应用开发的 ...

  3. 详解svm和smo的出现

    SupportVector Machines are learning models used forclassification: which individuals in a population ...

  4. hdu6406 Taotao Picks Apples(线段树)

    Taotao Picks Apples 题目传送门 解题思路 建立一颗线段树,维护当前区间内的最大值maxx和可摘取的苹果数num.最大值很容易维护,主要是可摘取的苹果数怎么合并.合并左右孩子时,左孩 ...

  5. lnmp php使用命令行去备份数据库

    <?php //备份数据库we8和foshan $time = date("Y-m-d",time()); $backtime = date("Y-m-d" ...

  6. 自动装配、JavaConfig、XML 三种方案之间,怎么导入和混合配置?

    在 Spring 中,这些配置方案都不是互斥的.完全可以将 JavaConfig 的组件扫描和自动装配/或 XML 配置混合在一起. Q:如何在 JavaConfig 中引用 XML 配置? Q:怎么 ...

  7. spring中获取容器中的Bean为什么前转成接口而不是实现类

    简单介绍一下上下文,userService是服务层接口有一个save方法,userServiceImpl是该接口的实现类重写了save方法. applicationContext.xml如图: 后台代 ...

  8. 彻底理解kubernetes CNI

    kubernetes各版本离线安装包 CNI接口很简单,特别一些新手一定要克服恐惧心里,和我一探究竟,本文结合原理与实践,认真读下来一定会对原理理解非常透彻. 环境介绍 我们安装kubernetes时 ...

  9. go 学习之路(二)

    一.文件名 关键字 标识符 所有go源码都以.go结尾 标识符以字母或下划线开头,大小写敏感 a.boy b.Boy c.a+b d.0boy e._boy f.=_boy g._ 以上变量c.d.f ...

  10. 深入了解String和intern

    引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String.这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念.常量池就类似一个JAVA系统级别提供的缓存. 8 ...