目录
1. 网络
1.1 网络是什么
网络本质是一个软件,软件是可以进行分层的。例如STL库,实际上分为了STL调用接口和STL库。
网络也是软件,网络协议栈也是层状结构:
1.2 网络在哪里
这里的网络,其实指的就是网络协议栈,它是一个软件,叫TCP/IP协议栈,属于OS的一部分。
2. 协议
所谓的计算机协议,本质其实就是约定,约定是由编码的程序员自己根据标准文档,或者自己喜好定义的协议。
3. TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
-
物理层: 负责光/电信号的传递方式,比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。
-
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。
-
网络层: 负责地址管理和路由选择。例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。
-
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。
-
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
对于应用层来说,它处于用户层,其他的都是内核层。这也就说明了这层与其他层是解耦的。应用层用于处理程序细节,其他三层用于处理通信细节。
3.1 分层细节
3.2 报头
报头就是格式+数据,类似于快递单上的报头。
报头本身就是数据,是一种结构化的数据,封装了不同层的报头信息,是通过位段来实现的。
在进行数据传输的时候,需要报头中的数据,来指导当前层进行某种协议决策。
3.2.1 封装与解包
- 添加报头的过程叫封装,解除报头的过程叫解包。
前面说了报头其实是一种结构化数据,里面封装了对应层的报头。
- 封装与解包
封装与解包概略图:
在这个过程中,数据需要自顶向下传输,在每一层都添加各自的报头。来到接收端的时候,进行数据交付。在每一层看来,同层得到的报头数据都是一样的,基于每一层来说,都认为这是对方直接传输给自己的。
对于上图来说,就是先从左顶到左底,再从右底到右上。这些过程包含了许多的封装与解包。但是由于同层报头协议,会导致同层的看起来数据是直接由对方传递给自己的。
封装的过程,其实就是应用层数据通过协议栈发到网络上时,将报头里的位段信息拷贝到数据的前面,让其带有报头信息。那么前部分(首部)就是报头,后部分就是数据。 这些信息中包含了一些类似于首部有多长, 有效载荷有多长, 上层协议是什么等信息。
解包的过程,只需要将其报头的指针指向数据端,就将报头给解除了。 专业的话说就是:数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
- 有效载荷
每一层的协议实际上只关心数据中与当前层对应的报头信息,而剩下信息的具体内容根本不必关心,我们将数据中除当前层的报头以外的数据叫做“有效载荷”。
需要注意的是,上层协议在数据封装时添加的报头信息,在下层协议进行数据解包时看来就是有效载荷。比如数据封装时应用层添加的报头信息,在对端主机进行数据解包时,在对端主机的传输层、网络层以及链路层看来,该应用层曾经添加的报头信息就是有效载荷。
所以总结起来就是,几乎每一层的报头中,都要包含两种字段:
- 当前报文的有效载荷要交付给上层的哪一个协议
- 几乎每个报头,都明确报头和有效载荷的边界
这些是协议的共性。
4. 数据传输
4.1 局域网
对于局域网内的网络传输时,上图内容是适用的。但是对于跨网络的内容传输时,需要有更多的程序来支持。
- 局域网通信原理
对于局域网内的主机互相通信时,实现方式是A主机向B主机发送macB报头,其他所有主机都会接收到,但是解析以后得到的不是自己想要的,就会进行丢弃,只有B主机成功接收。这看起来就像是A主机单程发送数据给了B主机。
- 碰撞避免算法
如果同时发送,就可能会发生数据碰撞的问题。所以每台主机都要有碰撞检测的能力,并且要有碰撞避免的算法。
- 互斥性
局域网里有公共资源,可以让多个主机向里面输入数据,可以看作是临界资源。为了保证碰撞避免,任一时刻都只能让一台主机向局域网中发送数据。这就是局域网数据传输的互斥性。
以太网就是基于这种碰撞的方式来实现的。
跨网段的主机的文件传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
4.2 IP地址与Mac地址
- IP地址
IP地址是在IP协议中, 用来标识网络中不同主机的地址。
对于一个报文来说,IP地址的作用就是标识其从哪来到哪去。或者说IP地址最大的意义是指导一个报文如何进行路径选择。
- Mac地址
MAC地址用来识别数据链路层中相连的节点。
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)
Mac地址就是标识数据上一站从哪里来,下一站从哪里去。并且一直在变化。