Linux 网络基础(一)
网络发展
早期计算机主要用于军事领域,采用独立模式,计算机之间相互独立。

网络互联:多台计算机连接在一起实现网络互联。

局域网 (LAN):计算机数量增多,通过交换机和路由器连接在一起。
广域网 (WAN):将远隔千里的计算机连接在一起。

所谓局域网与广域网是相对概念。家庭路由器可看作局域网,连接社区的则是广域网;社区看作局域网,连接世界的则是广域网。
认识协议
协议是一种约定。

计算机之间通过光信号、电信号交流,通过频率强弱代表 0 和 1。要想传递不同信息,就要约定好数据格式,比如 000 代表什么信息。要想多台计算机之间相互通信,就要约定共同的标准,这就是网络协议。
网络协议
协议分层

以打电话为例,语言层有协议(如汉语),通信设备层也有协议。

英语之间交流,只需在语言层变更,不必改电话协议;改成无线电协议,不必改汉语协议。所以,分层最大的好处是封装。这个例子只有两层,实际上的网络协议层数更多、更复杂。
OSI 七层协议
该协议将网络从逻辑上分为 7 层,概念清楚,理论完整:
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
TCP/IP 五层(四层)协议
学习时通常将上三层合称为应用层。TCP/IP 五层协议因物理层不重点学习,也常被称为 TCP/IP 四层协议。之所以叫 TCP/IP 协议,是因为 TCP 代表传输层,IP 代表网络层,这是学习的重点。
每层都要有自己的协议:
- 应用层:处理发来的数据(HTTPS, HTTP, FTP, SMTP)
- TCP 协议:解决长距离传输丢失数据问题
- IP 协议:如何定位主机
- 数据链路层:保证数据准确到达下一个设备
网络传输基本流程
网络协议栈与操作系统关系密切。


网络通信的本质就是贯穿协议栈的过程。
数据包的封装和解包
用户层拿到有效载荷后,会添加报头再传给传输层,传输层再添加报头传给网络层,网络层再添加报头传给数据链路层,通过物理层将数据传到另一台主机后,数据链路层解包属于自己的报头并向上传输,网络层解包自己的报头,传输层解包自己的报头,应用层解包自己的报头,最后拿到数据。

扩展说明:
- 每一层协议都要提供一种能力:分离报头和有效载荷的能力。
- 每一层协议,都要在报头提供决定将有效载荷提供给上一层协议的能力。
MAC 地址
MAC 地址用来识别数据链路层的相连节点。MAC 为 48 位,即 6 字节,用十六进制加冒号表示,例如 08:00:27:03:fb:19。MAC 在网卡出厂时就设置好了,通常唯一。

在局域网中,多台主机共同向其中发送数据。主机 H1 发送数据会被其他所有主机接收,数据内容包含 M1 发出、M10 接收(假设)。H2 主机接收后发现自己是 M2,不是 M10,直接丢弃,不再向上层传输。主机 H10 接收发现自己就是 M10,向上层传输。
同一时间只能有一台主机向局域网发送数据,因此主机发送数据前,要执行避免碰撞的算法。
交换机:核心工作是划分碰撞域。当左侧主机交换数据时,数据不会传到右侧;当右侧发生碰撞时,碰撞也不会干扰到左侧。


