- 英文小册原文地址:beej.us/guide/bgnet…
- 作者:Beej
- 中文翻译地址:www.chanmufeng.com/posts/netwo…
现将目录贴下:
- 什么是socket
- 两种Socket
- 漫谈网络
- IP地址、struct以及地址转换
- IP地址,IPv4和IPv6
- 子网
- 字节序
- struct结构
- 再谈IP地址
- 从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
的思路来设计的,说得通俗点就是互联网由许许多多的小子网组成,子网中的设备用集线器进行连接,子网之间通过路由器进行互联,如下图:
为了更好地管理IP地址(其实也是践行上面这个思路),IP地址本身被分成了两部分,分别是网络号和主机号。
更具体地,互联网诞生之初,IP地址曾经被分成了A
、B
、C
、D
、E
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
的一部分表示的是主机号。子网掩码表示网络号与主机号之间的边界,正规的表示方式如下所示:
一种最简单的表示方法是,把1
的部分的比特数用十进制的方式写在IP地址的右侧,比如:
182.92.193.45/24