【操作系统】网络1(协议)
协议(网络中的关键)
字面上理解,就是一个约定
网络中的协议
协议分层
分层带来的好处
- 分层能够避免某个协议过于庞大。(类似于写代码,如果代码太复杂,就要拆分成多个文件)【互联网上需要考虑问题有很多】
- 分层后,协议之间“解耦合”,上层协议不需要理解下层协议的细节实现,相当于“封装”
- 分层之后,任意层次的协议,都可以灵活替换
实际网络通信中的协议要更加复杂,要分很多层,例如:OSI七层模型
TCP/IP五层(或四层)模型
应用层
应用程序直接打交道的协议(实际开发中涉及最多的部分,甚至需要自己设计应用层协议)
传输层
负责端到端之间的传输。(只关注起点和终点)
【例如在淘宝买东西,卖家发货只关注收件人的地址】
网络层
负责点到点之间的传输。(需要规划路径)
【例如物流公司,需要规划到底怎么运输】
数据链路层
负责相邻点之间具体如何传输
【例如已经规划好路线了,从 A 到 C,那么从 A 到 C 乘飞机还是火车就是数据链路层需要考虑的问题】
物理层
网络通信的基础设施(网站、基站、光纤)
【相当于铁路、公路、航道、港头码头……】
从程序员的角度,有的时候会忽略物理层,所以有的时候会称为“四层模型”。
上层协议调用下层协议,下层协议给上层协议提供服务
传输层和网络层都是纯软件协议,由操作系统内核实现;数据链路层和物理层与系统没有直接关系,而是取决于具体的硬件设备(以及硬件配套的驱动程序)
对于Java程序员来说,重点要理解应用层 + 传输层
常见笔试题
- 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
- 对于一台路由器, 它实现了从网络层到物理层;
- 对于一台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层;
【这是笔试中的说法,但是不是真实情况,真实的情况是,现在的交换机和路由器没有本质区别,而且都实现到应用层(交换机、路由器和电脑都没有什么本质区别了)】
两个核心操作
封装
分用
例如:
我要发一条QQ消息给小明“在吗”
封装过程
我的主机
1、应用层(QQ)需要根据用户输入的数据,把这个数据构造成一个应用层数据报。这个构造数据包的过程,就可以想象成是一个字符串拼接(序列化)。

2、应用层协议把数据要交给传输层协议,来进一步封装。封装的意思就是给刚才的数据基础上再加上一个传输层协议报头。(报头:也是字符串连接,可以看成发快递的标签)

3、传输层需要把数据进一步的交给网络层,网络协议再加上一个网络层的协议报头。【传输层数据包:帧()】

4、网络层还需要进一步把数据交给数据链路层,数据链路层的协议帧头+帧尾【网络层数据包:包】

【例】我想从 A 到 C 需要经过 B
我的整个数据报中:
网络层:源ip始终是A,目的ip始终是 C
数据链路层:源mac 和目的mac 随着我的行程而改变,最开始的源mac 是 A ,目的mac 是 B,当我到了 B 以后,源mac 就变成了 B,目的mac 就变成了 C
5、数据链路层得到的数据帧,还要交给物理层,物理层就会把这个数据转换成光电信号,通过硬件设备(网线、光纤、电磁波……)传输出去了
中间是怎么传输的暂时不描述,直接看分用的过程,也就是小明收到我的消息后主机怎么处理
分用过程
1、物理层接收到对方法来的光电信号,解析成二进制的 bit 流,进一步得到了数据链路层数据帧,把数据帧交给链路层来处理

2、数据链路层解析数据帧,剥离帧头、帧尾,取出中间的IP,把数据交给网络层

3、网络层拿到刚才的网络层数据包,再来解析,去掉网络协议报头,把数据交给传输层

4、传输层协议拿到传输层数据包,再来解析,去掉传输层报头,把应用层数据报交给应用层

5、应用层解析应用层数据报,分析出数据内容是啥,发送者是谁,显示到界面上,此时小明就能看见我的消息了


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
