文章目录
- 1. 网络协议初识
- 1.1 为什么要有网络协议
- 1.2 协议分层
- 2. OSI七层模型
- 3. TCP/IP五层(或四层)模型
- 4. 网络传输基本流程
- 5. 以太网通信
1. 网络协议初识
1.1 为什么要有网络协议
早期计算机是独立的,如果要进行数据交互,就得从一台主机到另一台主机;后来出现了网络,将多台计算机连接在一起,可以完成数据交互。
局域网LAN:多台计算机在同一个区域连在一起
广域网WAN:距离十分远的计算机连在一起。
“局域网”和“广域网”是一个相对概念,就比如说我们国家的网络就可以看作一个大型的局域网
但是计算机的传输媒介是光和电,通过频率和强弱来表示0
和1
,所以想要传递不同的信息,就要先约定好,也就是“协议”
- 计算机有不同的厂商
- 计算机也有不同的操作系统
如果要这些不同的计算机,不同的系统进行通信,就得约定一个共同的标准,也就是网络协议
1.2 协议分层
举个例子:
在C++中,有继承和多态,着本质上就是一种软件分层,基类是上层,子类的各种实现是下层,子类的修改并不影响基类;
Linux文件系统,每个文件里面都有struct file
对象,里面包含了函数指针,这个指向着底层不同硬件的方法,在我们上层用户就可以,统一以文件的视角处理所有的软件,在硬件驱动和用户之间加了一个软件层,这也属于一种软件分层。
这些分层,可以在一定程度上降低各个模块之间的耦合度,层和层之间互不影响,在后续的维护上面成本就低一些。
而对于网络协议这里为什么是层状,原因很朴素:
- 网络规模太大,分层将各个模块解构出来
- 协议要解决问题,而这些问题也刚好是层状的
2. OSI七层模型
OSI
组织针对分层的需求将网络协议分为了7层模型:
但在实践中,有些是不好写到操作系统内部的,所以在工程实践的时候,严格上只划分了5层(会话层和表示层并没有在协议中体现出来,合并在应用层了)。
3. TCP/IP五层(或四层)模型
- **物理层:**负责光电信号的传递方式,我们现在使用的光纤、WiFi都是属于物理层概念,物理层的能力决定了最大传输速率、传输距离、抗干扰性等。
- **数据链路层:**负责设备之间的数据帧的传递和识别
- **网络层:**负责地址管理和路由选择,在
IP
协议中通过IP
地址来标识一台主机,通过路由表的方式规划两台主机之间的数据传输线路(路由),路由器工作在网络层 - **传输层:**负责数据之间通信的安全性和可靠性
- **应用层:**负责应用之间的沟通
传输层和网络层属于Linux
内核的模块,而网卡本质上是属于硬件,我们获取信息本质就是通过网卡将数据拉取到本地,所以网络通信本质上也是访问硬件,而用户是没有资格去直接访问硬件的,所以操作系统要提供一批系统调用(一般由传输层提供)。
不管是Linux还是Windows或者是其他的操作系统,它们在系统这块不管怎么不同,但是在网络层面,必须要遵守网络协议标准,不然无法入网
4. 网络传输基本流程
在网络协议栈中,每一层都有对应的协议
在封装的时候,就要考虑到解包的问题,所以任何协议层都要提供解包的方法,即将有效载荷和报头分离;同时每层给协议也需要有将自己的有效载荷交付给上层哪个协议的能力
5. 以太网通信
每台主机在局域网上,都需要有自己唯一的“编号”
在一个教室里面,老师在上面讲课,点人回答问题,比如说点的是“阿坤,请问回答如何训练鸡打篮球”,老师说的这个话,此时教室里所以的人都听到了,可是站起来准备回答的只有“阿坤”。因为这个报头是“阿坤”的,其他人在脑海对比之后发现不是自己,所以没有站起来,然后将整个报文丢弃。
然后“阿坤”说:“老师,训练鸡打篮球首先要养两年半”,此时这个话,全班也听到了,但是这个报头是“老师”,所以其他人对比之后,也是将报文丢弃,这整个过程,虽然其他人都听到了,但是对于“阿坤”和“老师”来说,他们认为本次只完成了他们两个之间的交流。
上面这个例子,就是以太网(局域网)的通信原理。
这个“编号”就是主机的mac
地址,当要进行通信的时候,就会携带自己的编号和对方的编号,比如说有10台主机h1、h2...h10
。
主机h1
要给h10
发信息,在网卡层面,除了h1
本身,其他的9台主机其实都收到了信息,在数据链路层就会进行解析,发现目标不是自己就之间丢弃,然后上层并不知道这个事情,在底层直接处理掉了;如果是自己,则层层解析,拿到最后的信息。
如果想搞乱一个局域网,只需向局域网中不断发送垃圾信息,和正常信息不断碰撞,让主机收不到正常信息即可。
当然除去恶意碰撞,每台主机都要有自己的碰撞避免算法(发生碰撞时,错峰发送),这个是以太网自己协议自己定的。
息不断碰撞,让主机收不到正常信息即可。
当然除去恶意碰撞,每台主机都要有自己的碰撞避免算法(发生碰撞时,错峰发送),这个是以太网自己协议自己定的。
局域网可以看作是多台主机共享的临界资源