什么是子网

1,071 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情


现将目录贴下:

  • 什么是socket
  • IP地址、struct以及地址转换
  • 从IPv4迁移到IPv6
    • IP地址,IPv4和IPv6
    • 字节序
    • struct结构
    • 再谈IP地址
  • System call 或 Bust
    • getaddrinfo()—准备开始!
    • socket()—拿到文件描述符!
    • bind()—我在监听哪个端口?
    • connect()—嘿,你好啊!
    • listen()—会有人联系我吗?
    • accept()—感谢呼叫3490端口
    • send() and recv()—跟我唠唠吧,宝儿!
    • sendto() and recvfrom()—用DGRAM风格跟我说话
    • close() and shutdown()—滚犊子!
    • getpeername()—你哪位?
    • gethostname()—我是谁?
  • Client-Server基础
    • 一个简单的流服务器
    • 一个简单的流客户端
    • Datagram Sockets
  • 技术进阶
    • Blocking—何谓阻塞?
    • poll()—同步的I/O多路复用
    • select()—老古董的同步I/O多路复用
    • 数据只传了一部分怎么办?
    • Serialization-如何封装数据?
    • 数据封装
    • 广播数据包-大声说「Hello,World」

现代的互联网是基于TCP/IP的思路来设计的,说得通俗点就是互联网由许许多多的小子网组成,子网中的设备用集线器进行连接,子网之间通过路由器进行互联,如下图:

2022-10-03-040038.png

为了更好地管理IP地址(其实也是践行上面这个思路),IP地址本身被分成了两部分,分别是网络号和主机号。

更具体地,互联网诞生之初,IP地址曾经被分成了ABCDE 5类,很多计算机网络的书介绍IP地址的时候也是以这个分类开始的。

但是这个划分依然是一个历史概念,实际使用中已经没有任何意义!因此关于这部分知识的讲述都可以直接忽略。

取而代之的是在1993年,因特网工程任务组IETF又提出了无分类编址(CIDR)的方法来解决IPv4地址紧缺的问题,当然了,同时启动的还有彻底解决IP地址耗尽问题的IPv6项目。

在互联网中,每个设备都会被分配一个IP地址(其实被分配IP地址的是设备上的网卡,如果一台设备有多个网卡,自然就会有多个IP地址),这个地址就相当于“XX路XX号”,其中“路”就相当于网络号,“号”就相当于主机号,两者合起来就是IP地址啦!

因此,理论上我们应该能通过IP地址识别出主机处于的子网号,以及子网下的主机号。

IPv4的IP地址由32个bit组成,按照每8个比特(1字节)为一组分成4组,但是仅凭这一串数字根本无法区分哪部分是网络号,哪部分是主机号。

因此需要某些附加信息。这个附加信息就是子网掩码

子网掩码的格式是一串与IP地址长度相同的32比特数字,左边是一串连续的1,右边剩下的都是0。其中为1的那一部分表示的是网络号,剩下为0的一部分表示的是主机号。子网掩码表示网络号与主机号之间的边界,正规的表示方式如下所示:

image.png

一种最简单的表示方法是,把1的部分的比特数用十进制的方式写在IP地址的右侧,比如:

182.92.193.45/24