计算机网络
最近在整websocket健权和代理的过程中复习了一把计算机网络相关的知识,理了一遍各个协议的层级关系
网络协议模型
网络协议模型通常是指OSI体系结构的七层协议模型,这是一个标准,可以理解为这是一个抽象基类
而实际应用中主流的TCP/IP四层模型则是OSI标准的一个实现,他是OSI七层协议的子类
而五层协议也是一个标准,但他是非官方的,是业界根据TCP/IP四层模型对OSI七层模型提出的一个改进方案
OSI七层协议模型
OSI,Open System Interconnect,开放式系统互联
这个标准的各个层次的划分遵循几个原则:
- 同一层中的各网络节点都有相同的层次结构,具有同样的功能
- 同一节点内相邻层次之间通过接口进行通信
- 每一层使用下层提供的服务,并且向上层提供服务
- 不同节点的同层按照协议实现对等层之间的通信
应用层
最上层协议,终端应用所在的层次,这里的数据是真实原始数据,比如对于浏览器来说就是html格式的文档
表示层
对数据格式进行序列化和反序列化,也就是转码、加密
会话层
控制会话的开始和结束,将多个数据包进行整合,保证表示层看到的数据是连续、完整的
在会话层及以上的高层次中,数据传送的单位不再另外命名,而是统称为报文
传输层
这一层保证网络传输过程中数据的准确性、完整性、高效性,保证收到的数据包是顺序的、是否进行差错校验,对同一主机上不同应用的数据流的输入进行复用等。比如常用的TCP、UDP都在这一层
这一层的数据单元也是数据包(packets),但根据协议的不同,TCP的数据包称为段 (segments),而UDP的数据报称为数据报(datagrams)
网络层
这层对网络拓补中端到端的传输进行定义,为每个节点进行标识,保证数据包的路由准确。IP、IPv6等网络地址协议就在这一层
这一层的数据单位是数据包(packet)
数据链路层
定义了数据在单个链路上如何进行传输,比如从网卡到路由器数据帧应该如何传输。ARP、RARP等地址解析协议就在这一层
这一层的数据单位是帧(frame)
物理层
实际的物理传输,比如Rj45,802.3等
这一层的数据单位是比特(bit)
TCP/IP四层协议模型
在实际应用中TCP/IP对OSI完整且严谨的模型进行了集成和简化
将OSI的应用层、表示层、会话层集成成一层
传输层定义了TCP、UDP两种协议
网络层使用IP、IPv6协议标识网络中各个结点
我们在进行socket编程的时候实际上就是使用TCP/IP协议,并在其应用层上进行开发
传输层TCP协议送过来的数据是一段一段的顺序的数据包,我们不断从socket中read直到遇到eof,这个过程就是OSI中会话层的工作,保证数据报是完整的
数据传输过程中为了保证安全可能会进行加密,也有可能传输的是二进制文件(图片,压缩包等),所以我们得到的数据可能是无意义不可读的串,需要对这些数据进行decode或者使用特定的程序打开,decode就是OSI中表示层的工作,而使用特定程序展示数据就是应用层的工作
数据传输过程
对于协议中的每一层来说,上层丢下来的东西就是他们要处理的data,处理这些数据的过程就是按照标准对这些数据进行拆分(控制每个包、帧的大小)并带上相应的头,然后丢给下一层(使用下层提供的服务),而接受端则需要将收到的帧、包还原,并丢给上层处理,还原出真实原始的data
socket
关于socket,我们可以理解为他是操作系统中应用层和下层协议之间沟通的一个缓冲,因为操作系统无法直接为每个底层网络暴露用户进程端口,这也十分危险,所以加一个中间层来提供多对多的通信(软件设计的基本思路就是所有问题都可以通过加中间件解决XD)
所以socket可以理解为就是TCP/IP协议模型中应用层的一个接口,对其进行读写操作就是应用层上的发送和获取数据