IP在TCP/IP参考模型中处于第三层,也就是网络层
网络层的主要作用是:实现主机和主机之间的通信,也叫做点对点通信
网络层(IP)提供点到点的服务,运输层(TCP/UDP)提供端到端的服务
有的小伙伴分不清 IP(网络层) 和 MAC (数据链路层)之间的区别和关系。
其实很容易区分,在上面我们知道 IP 的作用是主机之间通信用的,而 MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。
举个生活的栗子,小林要去一个很远的地方旅行,制定了一个行程表,其间需先后乘坐飞机、地铁、公交车才能抵达目的地,为此小林需要买飞机票,地铁票等。
飞机票和地铁票都是去往特定的地点的,每张票只能够在某一限定区间内移动,此处的「区间内」就如同通信网络中数据链路。
在区间内移动相当于数据链路层,充当区间内两个节点传输的功能,区间内的出发点好比源 MAC 地址,目标地点好比目的 MAC 地址。
整个旅游行程表就相当于网络层,充当远程定位的功能,行程的开始好比源 IP,行程的终点好比目的IP 地址。
如果小林只有行程表而没有车票,就无法搭乘交通工具到达目的地。相反,如果除了车票而没有行程表,恐怕也很难到达目的地。
因为小林不知道该坐什么车,也不知道该在哪里换乘。因此,只有两者兼备,既有某个区间的车票又有整个旅行的行程表,才能保证到达目的地。与此类似,计算机网络中也需要「数据链路层」和「网络层」这个分层才能实现向最终目标地址的通信。
还有重要一点,旅行途中我们虽然不断变化了交通工具,但是旅行行程的起始地址和目的地址始终都没变。其实,在网络中数据包传输中也是如此,源IP地址和目标IP地址在传输过程中是不会变化的,只有源 MAC 地址和目标 MAC 一直在变化。
具体参考: 数据链路层VS网络层
在TCP/IP网络通信时,为了保证能够正常通信,每个设备都需要配置正确的IP地址。否则无法实现正常的通信
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地址大致分为:A类,B类、C类。实际上,IP地址一共分为5类:A类,B类、C类、D类、E类
问:怎么判断是哪类IP地址
问:A、B、C 分类地址最大主机个数是如何计算的呢?
最大主机个数,就是要看主机号的位数,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数:
为什么要减 2 呢?
因为在 IP 地址中,有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址
在分配过程中,应该去掉这两种情况。
从而,可以算出各类IP地址的最大主机数量
因为D类和E类地址是没有主机号的,所以不可用于主机IP, D类用来组播(就是多播)的,E类只是试用的。
广播地址用于什么?多播地址用于什么?
由于IP分类存在很多缺点
所以现在上面的分类方法已经不用了,为此我们引入了CIDR。
CIDR可以用来判断是不是本地人
两个命令: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地址值scope
link/ether 00:0c:29:db:1a:7e brd ff:ff:ff:ff:ff:ff
,这个被称为MAC地址,是一个网卡的物理地址,用16进制,6个byte表示。
,这个叫做net_device_flags,网络设备的状态标识
mtu 1500
:最大传输单元MTU为1500,这是以太网的默认值
qdisc
,queueing discipline,即排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc
(排队规则)把数据加入队列qdisc
是pfifo
,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列pfifo_fast
稍微复杂一点。它的队列包括三个波段(band)。在每个波段里面,使用先入先出规则