计算机网络背景
计算机是人类的工具,人之间是要协作的,就注定了计算机之间要进行协作。(网络的产生是必然的)
具体怎么产生的? -> 局部产生的 -> 局部到整体的
互联网公司,运营商,做通信工具的公司互利共生。
初识协议
协议,本质是一种约定!(减少通信的成本,用于快速形成共识)
计算机之间,如何约定呢?
OSI,只生产标准,不写代码实现。
举例:电话接通要拨打方给钱,但只要没接通就不扣钱。因此可以约定好,用电话铃声响来传递信息,比如响一声要生活费,响两声报平安,从而减少通信的成本。
协议分层
协议本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计成层状结构的。
网络协议栈,就是分层的!
结论1:学网络,两种视角,普通用户视角,工程师视角
结论2:同层之间,在“直接”通信
结论3:分层之后,可以无障碍替换任意一层 --- 分层->解耦
OSI七层模型和TCP/IP五层(四层)模型
再识协议(计算机要遵守的?计算机角度,OS角度,如何理解协议呢?)
例子:假设有一台计算机,CPU在河南,显卡在浙江,内存在内蒙古,线还是连着的,只不过长度很长,它们之间还能进行数据传输吗?可以,无非就是时间久一点。
本地通信 vs 网络通信
网络通信:多台主机,通过网络通信,本质也是设备到设备!其中唯一的一个区别:单纯的距离变长了。
本地通信:所有设备是通过“线”连接起来的!-> 计算机内部,冯诺依曼,本身就是一个网络结构!!!
网络通信是新的技术->必然引发新的问题->引入新的技术在解决问题(比如多线程情况下,单互斥锁会导致释放锁的线程更容易申请锁,造成其他线程饥饿,从而引入同步)
新的问题:
如何处理数据?
数据丢了怎么办?
怎么定位目标主机?
怎么解决当下立即去哪里?
TCP/IP协议,本质:是一种网络 长 距离通信的解决方案!
重点:计算机通信的距离变长了
为什么要分层?
问题是不同性质的,不同种类的,怎么解决?协议分层
因此,协议为什么是分层的?因为问题是分层的,不同性质,不同种类的。
TCP/IP协议与操作系统的关系(宏观上,怎么实现的)
网络怎么实现和OS的体系结构有关。
网络协议栈,注定了是层状结构。
无论什么操作系统,只要用的是TCP/IP协议,那么它们的网络部分实现一定是一样的。这也是为什么不同操作系统之间能网络通信的原因。
传输层最著名的协议是TCP,网络层最著名的协议是IP,而传输层(TCP)和网络层(IP)两层必须实现在内核中,无论OS在这么不同,这部分大家必须遵守协议,必须一样。
整个协议叫TCP/IP协议原因:TCP和IP是核心。
协议本质(代码实现角度)
协议本质:就是约定好的结构体(计算机式的表达)
例如:主机A在传输层有结构
struct protocol
{
int a;
int b;
int c;
};
struct protocol data = {10, 20, 30};
主机A发送结构体对象data给主机B
可以简单理解为:不同操作系统的网络代码一样。
所谓协议,就是通信双方都认识的结构化的数据类型。
因为协议是分层的,所以,每层双方都有协议,同层之间,协议相同,可以互相认识。
例子:快递单子