【操作系统】网络1(协议)

协议(网络中的关键)

字面上理解,就是一个约定


网络中的协议

 

协议分层

分层带来的好处

  1. 分层能够避免某个协议过于庞大。(类似于写代码,如果代码太复杂,就要拆分成多个文件)【互联网上需要考虑问题有很多】
  2. 分层后,协议之间“解耦合”,上层协议不需要理解下层协议的细节实现,相当于“封装”
  3. 分层之后,任意层次的协议,都可以灵活替换

实际网络通信中的协议要更加复杂,要分很多层,例如: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、应用层解析应用层数据报,分析出数据内容是啥,发送者是谁,显示到界面上,此时小明就能看见我的消息了

 

 


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部