本文主要是介绍网络-IP/子网掩码/端口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
下面有这样一个号码:010-12345678
想必一眼就能看出,这是北京市的一个电话号码,其中010代表北京,12345678代表这个城市的一部电话,也就是说,一个电话号的格式是:区号-电话号
而IP,也是上述的格式,比方说有这样一个IP:172.20.7.126,那么如何区分出哪个是区号,哪个是电话号呢?有两种方式
1.指定区号长度
2.由子网掩码告诉我们哪些是区号
1.指定区号长度
假设我告诉你172.20.7.126前6个数是区号,那么你一定知道172.20.7是区号,但是实际上我不能告诉你前6个是区号,因为172.20.7.126的标准写法是
172.020.007.126
也就是说标准写法不能省略0,省略0的写法只是我们人类更友好的可读,好了,现在我和你说“172.20.7.126的前9位是区号”,那么首先应该将172.20.7.126变成172.020.007.126,然后查9位,得出区号是172.020.007,但是和上面的道理一样,我不能直接告诉你前9位,因为IP协议规定要以IP的二进制方式告诉你,而不是IP的十进制172.020.007,那么下面要把172.020.007转换成二进制
172 | 020 | 007 | 总长度 |
---|---|---|---|
1010 1100 | 0001 0100 | 0000 0111 | 24 |
所以现在说法又改成了172.020.007.126前24位是区号,那么这个IP的区号是
172.020.007
但是我们都知道,作为程序员,一般都喜欢从0开始查数,所以说法又改成了172.020.007.126前23位是区号,那么这个IP的区号是
172.020.007
最终,这个IP的标准写法就是:172.020.007.126/23
人们通常写成:172.20.7.126
2.由子网掩码告诉我们哪些是区号,假设我告诉你子网掩码是255.255.255.0(C类IP),IP是172.20.7.126
首先将IP转成二进制:
172 | 020 | 007 | 126 |
---|---|---|---|
1010 1100 | 0001 0100 | 0000 0111 | 0111 1110 |
再讲子网掩码转换成二进制:
255 | 255 | 255 | 0 |
---|---|---|---|
1111 1111 | 1111 1111 | 1111 1111 | 0000 0000 |
将两个二进制进行&与操作
- | 172&255 | 020&255 | 007&255 | 126&0 |
---|---|---|---|---|
IP | 1010 1100 | 0001 0100 | 0000 0111 | 0111 1110 |
掩码 | 1111 1111 | 1111 1111 | 1111 1111 | 0000 0000 |
与操作结果 | 1010 1100 | 0001 0100 | 0000 0111 | 0000 0000 |
结果的十进制表示:172.20.7.0
IP协议规定:以0结尾的IP地址,表示的是网段,而172.20.7.0正好是以0结尾,所以这是一个网段,值为172.20.7
综上得知:"区号"是172.20.7
注意:子网掩码可能是任意值(本例是255.255.255.0),具体可搜索【IP的分类】,本文不再赘述
端口
一个端口代表一个程序
0-1024是约定俗成的各种服务,比如80基本都是http,443基本都是https程序,我们自己不要更改
1025-49151:叫注册端口,这些端口用于我们自己程序的绑定
49152-65535:叫动态端口,都是动态分配的,假设我是客户端,现在我和某个服务器建立连接,当建立连接之后,系统会给我分配一个端口,我使用该端口和服务器一直保持通信,此时使用的就是动态端口,如果连接没有断开,则一直使用该端口
这篇关于网络-IP/子网掩码/端口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!