learn-tech/专栏/全解网络协议/09我想有个家-什么是IP地址.md
2024-10-16 06:37:41 +08:00

141 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
09 我想有个家 - 什么是IP地址
今天开始我们来看一下你可能听过的最多的一个概念即使你不是工程师你可能也听过这个词IP当然可能IP的意思不一样。所以为了澄清首先我们要来说一下我们的IP是什么这里的IP不是Intellectual property不是指的disney的Star wars。而是网络里面的IP即Internet Protocol。IP是一个很有用而且很复杂的概念。这也是为什么我要用一整章来讲解。
什么是IP?
那什么是IP或者说什么是IP地址呢IP地址用由句点分隔的四组数字组成。我们前面的二进制里面也讲了这一点对不对。IP地址被分配给网络上设备的网络接口卡并且我们的IP地址被分为两部分。它具有网络部分另一部分是主机部分。网络部分标识联网设备。主机部分标识的是特定网络上的单个设备。这与我们的地址没有太大的区别。这与将特定的街道地址作为识别为个人的方式非常相似。将你房子周围的空气和邮政编码标识为区域在一个区域里有很多房屋但地址和门牌号都是不同的你可能是住在一门我是二门等等。但是它们都属于相同的邮政编码。我们的邮政编码有点像我们的网络部分还有我们的主机部分有点像我们的地址。我们在邮编中具有唯一标识或邮政编码并且在邮编中具有通用标识。
IP地址以四个十进制数字的格式写入。这些十进制数字中的每一个我们称为八位字节。因此203.0.113.10那里有四个八位字节。它包含八个二进制位。因此我们的IPv4地址始终为32位长。我们将其分为四组每组八位然后将它们转换回十进制以便将它们编程到计算机中并进行讨论。你想一下那在每一组里的数字最大是多少
1982年提出Ipv4时犯了一个巨大的错误这也是我们需要克服的一个大障碍这是将二进制转换成十进制而不是其他更有效的方式。这像不像是你写的代码会为后面的扩展产生影响和阻碍其实很正常你想想IP虽然有问题但是也使用了将近30年。现在有了IPV6但是还需要一段时间来全面使用或者一起使用。这里我们来思考一下或者是发散一下你的思维现在这种形式如何识别地址的网络和主机部分呢我们的地址始终包含网络部分和主机部分。但是应该如何确定哪个是网络部分哪个是主机部分呢
地址类型
我们来看一下地址类型。我们可以从功能上来分类地址类型。基本上可以分为三类。
网络地址-它是系统中一组设备或一组IP地址的标识符。网络地址有点像我们的邮政编码而没有与之关联的街道地址。邮政编码代表一个地理区域。我们的网络地址代表IP地址范围。网络地址有时称为网络前缀或简称为前缀。
广播地址是第二种地址。广播地址是网络上所有设备的标识符。举个例子来说在美国的话纸质的邮件还是非常普及的。所以每家都会经常收到纸质的广告比如说某某超市商品促销了之类的。这个就是广播你会发现住在某一个区域的住户都会收到相同的广告促销。这个就有点像是广播地址。如果我有一个小公司想要发类似的广告只需要去邮局然后说我想把这个广告发给邮政编码xxxxx的住户然后邮局就会帮我去投放了。广播地址的目的是可以一次将消息发送到网络上所有设备的地址。
主机地址是第三种。主机地址是确认在网络中的独一的设备。比如一台电脑打印机或者是一个路由器。如果我们有一台设备比如说电脑想有一个IP地址。那么该计算机必须具有主机地址并且不能为其分配网络地址或广播地址。前两种地址主要用于描述我们的网络但是主机地址才是我们需要显示的应用到我们的设备上。
我们现在来深度剖析每一种地址类型,让你有一个更深层次的认识。
网络地址
先看一下这个例子
203.0.113.0
11001011 00000000 01110001 00000000下面讲解的是这部分
11111111 11111111 11111111 00000000 (子网掩码)
255.255.255.0 子网掩码
相信前面认真学习的同学可以看出以上IP地址的端倪吧。
网络部分是203.0.113 主机部分是0
复制
你在这里如果对子网掩码陌生,先忽略,我们后面会讲到。
如果你的地址的主机部分全部为零就好像上面的例子那样那么这个是网络地址。你永远不能将其分配给任何网卡。我下图标记出来了。如果全0或者全1。那就注定这不是一个普通的地址。
广播地址
先看一下这个例子
203.0.113.255
11001011 00000000 01110001 11111111下面讲解的是这部分
11111111 11111111 11111111 00000000 (子网掩码)
255.255.255.0 子网掩码
网络部分是203.0.113 主机部分是255
复制
如果你的地址的主机部分为全部为1就好像上面的例子那样那么这个是广播地址。同理你也永远不能将其分配给任何网卡。就好像上面说的全0和全1都是特殊的。全0是网络地址。全1是广播地址。
主机地址
先看一下这个例子
203.0.113.10
11001011 00000000 01110001 00001010下面讲解的是这部分
11111111 11111111 11111111 00000000子网掩码
255.255.255.0 子网掩码
网络部分是203.0.10 主机部分是10
复制
我们上面讲的主机部分全是0的时候叫做网络地址全是1的时候叫做广播地址那其他的呢是不是就是我们需要的主机地址了。既然这个是主机地址了是不是你就可以把它赋值给网卡了。可以赋给打印机路由器等等。比如在这里主机部分就是10。
所以在这里子网掩码是一个不变量那你的主机地址范围是不是就是在00000000 到 11111111之间的值。也就是1 到254。
私有和公有地址
私有地址只允许在一个公司内部使用你仔细想一下这说明什么说明你在A公司的内部可以使用10.0.0.1我在B公司也可以同样使用10.0.0.1对不对。这样会冲突吗不会因为是内部使用互相是看不到的为什么需要这样呢开动你的小脑瓜想一下下一小节会讲到。当然不可能所有的IP地址都可以作为私有的下面是所有私有地址的范围
10.0.0.0 -- 10.255.255.255
172.16.0.0 -- 172.31.255.255
192.168.0.0 -- 192.168.255.255
复制
看透IP
我们之前说过数据的传输是靠Header来确定这是要传到哪里的数据。那我们来看一下IP的header是什么样子的我懒得画了就直接从网上找了一个。
我们还是一个一个的字段来讲解。
Version版本号4bits用来暗示版本号我们一直说IPV4那这里就是4对不对那IPV6呢
IHLInternet Header Length头部长度 4bits头部的长度
Type of Service服务类型8 bits因为是8 bits所以可以分成下面的8个值。用于定义包的优先级值越大数据越重要我就不翻译下面的意思了。感兴趣的自己查一下。
000 Routine
001 Priority
010 Immediate
011 Flash
100 Flash Override
101 CRI/TIC/ECP
110 Internet Control
111 Network Control
Total Length总长度16 bits总长度包括头和数据
Identification标识 16 bits: 一个序列号,与源地址,目标地址和用户协议一起,旨在唯一地标识一个数据报(Datagram)
Flags标志3 bits: 当前仅定义了两个位。更多的位用于分段和重组。第二位是DFDont Fragment位。如果已知目标没有重组片段的功能则此位可能很有用。但是如果设置了此位数据报一旦超过路由网络的最大大小则该数据报将被丢弃。
Fragment Offset片偏移(13 bits)此片段在原始数据报中的位置以64位为单位。这意味着除最后一个片段以外的其他片段必须包含长度为64位倍数的数据字段。
Time to Live生存时间(8 bits):定义一个电报允许在网络中存活的时间以S来计算。
Protocol协议8 bits: 指示在目的地接收数据字段的下一个更高级别的协议此字段标识ip头之后的数据包中下一个头的类型举个例子。TCP的值是6UDP的值是17。
Header Checksum首部校验16 bits: 仅应用于头部的错误检测。
Source Address源地址32 bits: 源IP地址
Destination Address目标地址32 bits: 目标IP地址
Options选项variable编码发送用户请求的选项
Padding填充variable用于确保数据报头是32位长度的倍数
Data数据variable数据
下面来看一个具体的例子。不知道你有没有听过wireshark这是一个用于包裹分析的工具感兴趣的可以下载来试一下。
从上图你可以看出你们包含着我们上面讲的header里面的内容上面的是理论概念这个图是在实际发送中的具体数据包里面有什么。比如你可以看到version4也就是IPV4。然后就是Header lengthTotalLength。。。等你可以对着上面的理论模型来找到一一对应。