专栏首页颇忒脱的技术博客面向程序员的网络基本知识 - IP地址

面向程序员的网络基本知识 - IP地址

Github

本系列文章旨在向程序员分享一些网络基本知识,让程序员具备基本的网络常识,以便与网络工程师沟通。本系列文章不会涉及如何组建网络、如何配置交换机/路由器等硬件相关的内容,所以不适合想考CCNA/HCNA证书的人士。

IP地址

IP地址,多么熟悉啊,比如192.168.1.1就是一个IP地址,但你可能未必知道IP地址的含义,本文将分享给你一些IP地址相关的基础知识。

IP地址的结构

事实上192.168.1.1这样的IP地址是一个IPv4地址,IPv4地址实际上是由4个字节组成,回想一下一个字节(byte)多少位(bit)来着?192.168.1.1实际上是二进制11000000.10101000.00000001.00000001的十进制表达。所以IP地址的最大值也就是255.255.255.255——11111111.11111111.11111111.11111111

所以在读下去之前请记住:IP地址是由4个字节组成,IP地址是二进制的。

network id和host

IP地址包含了两个信息:

  • network id,当前主机所属的二层网络
  • host,当前主机在二层网络中的ID

但是我们怎么从IP地址的4个字节中提取这两个信息呢?这就需要子网掩码(Subnet Mask)了。

子网掩码和IP地址一样也是4个字节,区别在于它的二进制形式中的1必须从左到右且连续,比如255.255.255.0的二进制是11111111.11111111.11111111.0254.255.255.0不是一个合法的子网掩码,因为它的二进制是11111110.11111111.11111111.0,1没有连续。1.255.255.0也不是一个合法的子网掩码,因为它的二进制是00000001.11111111.11111111.0,1不是从最左侧开始的。

我们在来看192.168.1.1的network id和host,它的子网掩码是255.255.255.0,为了简便起见,我们用子网掩码中的1的数量来表示:192.168.1.1/24

ip          : 11000000.10101000.00000001.00000001 (192.168.1.1)
subnet mask : 11111111.11111111.11111111.00000000 (255.255.255.0)
network id  : 11000000.10101000.00000001.00000000 (192.168.1.0)
host        : 00000000.00000000.00000000.00000001 (1)

我们把子网掩码和IP地址Bit AND一下,得到network id=192.168.1.0 ,把子网掩码取反码和IP地址Bit AND一下,得到host=1

那我们知道network id有什么用呢?当我们试图做网络通信的时候,操作系统会计算出源IP的network id和目标IP的network id,如果两者一样就说明在同一个二层网络,如果不一样则说明不在同一个二层网络,那么数据就会发送给路由器处理(回忆网络模型及网络设备的内容)。

IP地址类型

IP地址是分类型的,有:

  • A类:1-126.xxx.xxx.xxx / 8
  • B类:128-191.xxx.xxx.xxx / 16
  • C类:192-223.xxx.xxx.xxx / 24
  • D类:224-239.xxx.xxx.xxx
  • E类:240-255.xxx.xxx.xxx
  • loopback:127.xxx.xxx.xxx

不过我们一般都只会接触到A、B、C三类加一个loopback地址。

私有IP地址

在A、B、C三类IP地址中有部分地址保留为私有地址,Internet上的网络设备均不会接受、发送或者转发属于私有地址的源IP地址或目的IP地址。私有IP地址的范围是:

  • A类:10.0.0.0 ~ 10.255.255.255
  • B类:172.16.0.0 ~ 172.31.255.255
  • C类:192.168.0.0 ~ 192.168.255.255(这个很熟悉吧)

参考资料

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring、Spring Boot和TestNG测试指南 - 测试@Configuration

    在Spring引入Java Config机制之后,我们会越来越多的使用@Configuration来注册Bean,并且Spring Boot更广泛地使用了这一机...

    颇忒脱
  • 使用Kubespray安装k8s集群

    本文撰写时,Kubespray的master分支不稳定,请使用release版本来安装,具体来说就是切换到最新的tag上。

    颇忒脱
  • 各大API网关性能比较

    API网关最基本的功能就是反向代理,所以在对API网关做技术选型的时候需要着重考察其性能表现,本文对Nginx、Haproxy、Netty、Spring Clo...

    颇忒脱
  • [备忘]liunx下shell脚本通过IP授权方法

    IP=$(curl http://ip.6655.com/ip.aspx -x122.225.117.181:80)

    繁花云
  • 加点的心得

    加点的一般方法:    Catalog _catalog=MapInfo.Engine.Session.Current.Catalog;    MapInf...

    用户1075292
  • 快速理解网络通信协议

    用户1263954
  • 三十天学不会TCP,UDP/IP网络编程 - UDP的实践--DHCP

    在经历了一顿忙碌加出去玩了玩之后,我又开始重新更新了~这是最新的一篇~完整版可以去gitbook(https://www.gitbook.com/@rogerz...

    一心一怿
  • Confluence 6 在 Apache 或者系统级别阻止垃圾 原

    如果一个垃圾发布机器人攻击你的 Confluence 站点,这些程序可能来自于同一个 IP 地址,或者是一个比较小范围的 IP 地址段。希望找到攻击者的 IP ...

    HoneyMoose
  • 网络编程懒人入门(二):快速理解网络通信协议(下篇)1、前言2、系列文章3、参考资料4、一个小结5、用户的上网设置6、一个实例:访问网页附录:更多网络编程资料

    本文上篇《网络编程懒人入门(一):快速理解网络通信协议(上篇)》分析了互联网的总体构思,从下至上,每一层协议的设计思想。基于知识连贯性的考虑,建议您先看完上篇后...

    JackJiang
  • 啥操作?1张网卡,绑定99个IP,用了这么久电脑,竟不知有这功能

    一张网卡可以设置多个IP系列,如192.168.1.0、192.168.2.0、192.168.3.0等,可以同时使用。听起来有用吗?当然是了!

    程序员小助手

扫码关注云+社区

领取腾讯云代金券