本章将开始对Linux网络编程进行系统的学习,而这篇主要学习网络的基本知识
网络本质是一个层状结构,同时也是操作系统的一部分
计算机之间相互独立
用户之间需要交互,在计算机层面即计算机之间数据需要进行交互:多台计算机连接在一起, 完成数据共享
计算机数量更多了, 通过交换机和路由器连接在一起
将远隔千里的计算机都连在一起
注:所谓 “局域网” 和 “广域网” 只是一个相对的概念, 广域网也可以看做一个比较大的局域网
计算机生产厂商有很多,计算机操作系统也有很多,计算机网络硬件设备还是有很多,如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来,约定一个共同的标准大家都来遵守,这就是 网络协议
因为网络本质就是一个层状结构,所以对于网络协议也需要进行分层制定协议,便于进行同层之间的数据交流
注:实际的网络通信会更加复杂, 需要分更多的层次,而分层最大的好处在于 “封装”,每层之间进行解耦,也就是可以很方便的进行替换任何一层协议,提高可维护性
同一个局域网内的主机是能够直接进行通信的
数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
在局域网中广播的实现条件是,将目标主机设计为约定好的mac地址在局域网中不存在的,所有主机都约定好这个地址是广播地址,广播地址一般是:0xffff,而所有的主机都可以收到由广播发送的数据包,并对他进行向上层交付
会将某一个片区发生碰撞的数据包进行过滤,不再转发,只转发合法的数据帧,减低数据碰撞混乱的情况的概率
注:虚拟机中的mac地址不是真实的mac地址, 可能会冲突;也有些网卡支持用户配置mac地址