IP的基本认识
IP在TCP/IP参考模型中处于第三层,也就是网络层
网络层的主要作用是:实现主机和主机之间的通信,也叫做点对点通信
问:网络层与运输层的关系
网络层(IP)提供点到点的服务,运输层(TCP/UDP)提供端到端的服务
问:网络层和数据链路层的关系
有的小伙伴分不清 IP(网络层) 和 MAC (数据链路层)之间的区别和关系。
其实很容易区分,在上面我们知道 IP 的作用是主机之间通信用的,而 MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。
举个生活的栗子,小林要去一个很远的地方旅行,制定了一个行程表,其间需先后乘坐飞机、地铁、公交车才能抵达目的地,为此小林需要买飞机票,地铁票等。
飞机票和地铁票都是去往特定的地点的,每张票只能够在某一限定区间内移动,此处的「区间内」就如同通信网络中数据链路。
在区间内移动相当于数据链路层,充当区间内两个节点传输的功能,区间内的出发点好比源 MAC 地址,目标地点好比目的 MAC 地址。
整个旅游行程表就相当于网络层,充当远程定位的功能,行程的开始好比源 IP,行程的终点好比目的IP 地址。
如果小林只有行程表而没有车票,就无法搭乘交通工具到达目的地。相反,如果除了车票而没有行程表,恐怕也很难到达目的地。
因为小林不知道该坐什么车,也不知道该在哪里换乘。因此,只有两者兼备,既有某个区间的车票又有整个旅行的行程表,才能保证到达目的地。与此类似,计算机网络中也需要「数据链路层」和「网络层」这个分层才能实现向最终目标地址的通信。
还有重要一点,旅行途中我们虽然不断变化了交通工具,但是旅行行程的起始地址和目的地址始终都没变。其实,在网络中数据包传输中也是如此,源IP地址和目标IP地址在传输过程中是不会变化的,只有源 MAC 地址和目标 MAC 一直在变化。
具体参考: 数据链路层VS网络层
IP基础
在TCP/IP网络通信时,为了保证能够正常通信,每个设备都需要配置正确的IP地址。否则无法实现正常的通信
- 互联网上的每个接口必须有一个唯一的Internet地址(也叫做IP地址)
- 多接口主机具有多个IP地址,其中每个接口都对应一个IP地址。
- 由于互联网上的每个接口必须有一个唯一的IP地址,因此必须要有一个管理机构为接入互联网的网络分配IP地址。这个管理机构就是互联网网络信息中心,称作InterNIC(Internet Network Information Center)。InterNIC只分配网络号。主机号的分配由系统管理员来负责。
- 有三类I P地址:单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机)。
IP地址(ipv4)由32
位二进制数来表示。
-
因此IP地址的最大值是 2 3 2 = 4294967296 2^32=4294967296 232=4294967296,即最大允许 43 亿台计算机连接到网络。
-
实际上,IP 地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有 2 个以上的网卡,也就是它们会有 2 个以上的 IP 地址。
-
因此,让 43 亿台计算机全部连网其实是不可能的。
-
IP 地址是由「网络标识」和「主机标识」这两个部分组成的,所以实际能够连接到网络的计算机个数更是少了很多
-
「网络标识」唯一标记一个局域网
-
「主机标识」唯一标记局域网中的一台主机
-
现在的网络设备早就超过了43 亿了,为了解决IP不足的问题,提出了
NAT
技术。 后来,又有了ipv6
为了方便记忆,我们采用了点分十进制的标记方式处理IP地址:将32位的IP地址以每8位为组,共分为 4
组,每组以「.
」隔开,再将每组转换成十进制
IP地址的分类[了解即可,目前已经不用]
我们知道 IP 地址是由「网络标识」和「主机标识」这两个部分组成的,又根据「网络标识」和「主机标识」的位数,我们可以将IP地址大致分为:A类,B类、C类。实际上,IP地址一共分为5类:A类,B类、C类、D类、E类
问:怎么判断是哪类IP地址
问:A、B、C 分类地址最大主机个数是如何计算的呢?
最大主机个数,就是要看主机号的位数,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数:
为什么要减 2 呢?
因为在 IP 地址中,有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址
- 主机号全为 1 指定某个网络下的所有主机,用于广播
- 主机号全为 0 为本地地址,表示本地网络或主机;
在分配过程中,应该去掉这两种情况。
从而,可以算出各类IP地址的最大主机数量
对于A,B,C类(A、B、C三类是给互联网用户使用的)
因为D类和E类地址是没有主机号的,所以不可用于主机IP, D类用来组播(就是多播)的,E类只是试用的。
广播地址用于什么?多播地址用于什么?
由于IP分类存在很多缺点
- 同一网络下没有地址层次,比如一个公司里用了 B 类地址,但是可能需要根据生产环境、测试环境、开发环境来划分地址层次,而这种 IP 分类是没有地址层次划分的功能,所以这就缺少地址的灵活性。
- A、B、C 类有个尴尬处境,就是不能很好的与现实网络匹配。
- C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个网吧都不够用。
- 而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。
所以现在上面的分类方法已经不用了,为此我们引入了CIDR。
无类型域间选路CIDR
- CIDR打破了原来设计原来设备的几类地址的做法,将32位的IP地址一分为二,前面是网络号,后面是主机号。
- 从哪里分呢? 比如10.100.122.2/24,这个IP地址中有一个斜杠,斜杠后面有个数字24。这种地址就是CIDR。后面24的意义是,32位中,前24位是网络号,后8位是主机号
CIDR可以用来判断是不是本地人
IP地址 VS 域名系统 VS 端口号
- 在一个互联网上,每个接口都使用IP地址来标识,尽管用户习惯使用主机名而不是 I P地址。
- 域名系统为主机名和 I P地址之间提供动态的映射。
- 端口号用来标识互相通信的应用程序。服务器使用知名端口号,而客户使用临时设定的端口号。
Linux下如何查看IP地址
两个命令:ifconfig、ip addr。
看个例子:
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:db:1a:7e brd ff:ff:ff:ff:ff:ff
inet 192.168.0.28/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33
valid_lft 652806sec preferred_lft 652806sec
inet6 fe80::3c21:538a:3012:67c9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:13:61:c6 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:13:61:c6 brd ff:ff:ff:ff:ff:ff
这个命令显示了这台机器上所有的网卡。大部分网卡都有一个IP地址,当然,这不是必须的。
192.168.0.28
就是网卡ens33的IP地址值- IP之后的
scope
- 对于ens33这张网卡来讲,是global,表示这张网卡是可以对外的,可以接收来自各个地方的包
- 对于lo来讲,是host,表示这张网卡仅供本机相互通信
- lo全程是loopback,又称为环回接口,往往会被分配到127.0.0.1这个地址。这个地址用于本机通信,经过内核处理后直接返回,不会在任何网络中出现
- 在IP地址的上一行是
link/ether 00:0c:29:db:1a:7e brd ff:ff:ff:ff:ff:ff
,这个被称为MAC地址,是一个网卡的物理地址,用16进制,6个byte表示。- MAC地址是一个很容易让人误解的地址。因为MAC地址号称全局唯一,不会有两个网卡有相同的MAC地址,而且网卡自生产出来,就带着这个地址。很多人就会想,既然这样,整个互联网的通信,全部用MAC地址就好了,只要知道了对方的MAC地址,就可以把信息传过去
- 这样当然是不行的,一个网络包要从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能。而有门牌号码属性的IP地址,才是有远程定位功能的。
- 也就是说,IP地址相当于门牌号码,MAC地址相当于身份证。你问路的时候可以问【xxx路xxx号】怎么走,但是你不能问【身份证号码为xxx】的人在哪里
- MAC地址像是身份证,是一个唯一的标识。它的唯一性设计时为了组网的时候,不同的网卡放在一个网络里面的时候,可以不用担心冲突。从硬件角度,保证不同的网卡有不同的标识
- MAC地址是由一定定位功能的,只不过范围非常有限。你可以根据IP地址,找到杭州市xxx路xxx层ccc号,但是依然找不到人,这时候你就可以吼,身份证号xxx的是哪位?对方听到了,就会回应,是我。当然,如果你在上海叫,身份证号xxx的是哪位,是绝对找不到的
- 也就是说,MAC地址的通信范围比较小,局限在一个子网里面。比如,从192.168.0.2/24访问192.168.0.3/24是可以用MAC地址的。一旦跨子网,比如从192.168.0.2/24访问192.168.1.3/24就只能用IP地址定位了
- 现在很多工具都有可以更改本机的MAC地址,也就是网络上存在很多MAC地址被更改成一样,为什么没有出现通讯异常或者混乱? MAC地址是一个局域网冲突才会影响网络通信,局域网外是IP定位,所以不同局域网的网络设备MAC一样是不会有通讯问题的
- 关于
<BROADCAST,MULTICAST,UP,LOWER_UP>
,这个叫做net_device_flags,网络设备的状态标识- UP表示网卡处于启动的状态
- BROADCAST表示这个网卡有广播地址,可以发送广播包
- MULTICAST表示网卡可以发送多播包
- LOWER_UP表示L1是启动的,也即是网线插着呢
mtu 1500
:最大传输单元MTU为1500,这是以太网的默认值- 网络包是层层封装的、MTU是二层MAC层的概念。
- MAC层有MAC的头,以太网规定连MAC头带正文合起来,不允许超过1500个字节。正文里面有IP的头、TCP的头、HTTP的头。如果放不下,就需要分片来传输
- `qdisc pfifo_fast``
qdisc
,queueing discipline,即排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc
(排队规则)把数据加入队列- 最简单的
qdisc
是pfifo
,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列 pfifo_fast
稍微复杂一点。它的队列包括三个波段(band)。在每个波段里面,使用先入先出规则- 三个波段(band)的优先级页不相同。band 0 优先级最高、band 2的最低。如果biand 0里面有数据包,系统就不会处理band 1 里面的数据包,bind 1 和 bind 2 之间也是一样
- 数据包是按照服务类型(Type of Service,TOS)被分配到三个波段(band)里面的。TOS是IP头里面的一个字段,代表了当前的包是高优先级的,还是低优先级的