网络基础知识
为什么学习网络知识?
作为开发人员,我们一般不需要自己去编写socket等底层代码。但是,假设我们遇到网站的性能无法满足我们的需求,如果不熟悉底层,可能对此束手无策,不知道从哪里着手优化。有比如当一个请求变慢,我们不知道怎样去判断到底是网络问题还是其他原因,比如数据包是否丢失,为什么会造成大量的连接丢失,因此还是很有必须学习一些网络知识以备不时之需。
什么是OSI?
开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织提出。
七层网络是哪七层?

以上的7层,在OSI模型中是自下而上,最底层是物理层,其次数据链路层...
OSI模型有趣历史
OSI模型最初是因为美国人的两台机器之间有进行通信的需求。
需求1:两个硬件之间如何进行通信?
具体就是A机器发送比特流,B机器能够收到,这就是物理层需要做的事。物理层定义了物理设备的标准,如网线的类型,光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流,就是我们所谓的1/0..二进制数据,将这些数据转化成电流强弱来进行传输,到达目的后,再转换为1/0..的机器码,也就是我们常说的“数模转换”与“模数转换”,这一层的数据叫做“比特”,网卡就是工作在这一层。
需求2:现在通过电线我能发数据流了,但是我还是希望能通过其他介质来进行传输,并且还要正确地发送比特流。
在物理层,传输介质很可能将数据误发给其他机器,比如A想发给B,可能在同一传输介质中的所有机器都能收到这个消息,假设C收到后,就需要知道这条消息到底是不是发送给它的?又是谁发送给它的?这条消息的目的是让它做什么?
数据链路层定义了如何格式化数据以进行传输,以及定义了如何控制对物理介质的访问,这一层通常还提供错误检测与纠正以确保数据传输的可靠性。本层将比特数据组成了帧,其中交换机就工作在这一层,对帧进行解码,并根据帧中包含的信息把数据发送到正确的接收方。
需求3:网络中如何选择最佳路径?
随着网络节点的不断增加,点对点之间进行通信的时候,是需要进行多个节点的,如何找到目标节点?如果选择最佳路径?这便是网络层要做的事。
网络层的主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方,网络层通过综合考虑、发送优先权、网路拥挤堵塞程度、服务质量以及可选路由的花费 来决定从一个网络中节点A与另一个网络中节点B的最佳路径。路由器就是工作在这一层。本层的数据,我们称为数据包。
需求4:当我发大量数据的时候,可能需要很长时间
例如一个视频格式的,网络会中断好多次,实际上,即使有了物理层和数据链路层,网络还是经常中断,只是中断的时间是毫秒级别的。那么,我还需要保证传输大量文件时的准确性。于是,我要对发出去的数据进行封装。就像发快递一样,一个个发送。
于是,发明了传输层(传输层在OSI模型中,是在网络层面上,也就是先选出了最佳网络路径,再考虑数据大小)。这一层需要关注TCP/IP协议中的TCP与UDP协议,注意:TCP/IP不是一个协议的名称,而是一堆协议的总称。
TCP协议
TCP协议是会绑定IP和端口的协议,是用于发送大量数据的,我发出去一万个包,另一台电脑就需要告诉我是否接收到一万个包,如果缺少3个包,就告诉我是第1001/234/8888个包丢了,那我再发一次。这样,就能保证对方把这个视频完整接收了。
UDP协议
适用于发送少量数据的。我发20个包出去,一般不会丢包,所以 ,我不管你收到多少,在多人互动游戏中,也经常受到UDP协议,因为一般都是简单的额信息,而且有广播的需求。如果用TCP,效率就会很低,因为它会不停地告诉主机我收到20个包,或者18个包,再发我两个!如果同时有1万台计算机都这样做,那么用TCP反而会降低效率,还不如用UDP,主机发出去就算了,丢几个包就卡一下,算了,下次再发包更新。
需求5:用户级别的体验并不是很好,难道每次都要调用TCP去打包,然后调用IP协议去找路由?
当然不行,所以我们要建立一个自动收发包,自动寻址的功能。
于是发明了会话层。会话层的作用就是建立和管理应用程序之间的通信。
需求6:现在我能保证应用程序自动收发包和寻址了,但是我要用Linux给window发包,两个系统语法不一致,就像安装包一样,EXE不能在Linux下用,shell在window也也是不能直接运行的。
于是需要表示层,帮我们解决不同系统之间的通信语法问题。
需求7:发送方知道自己发送的是什么东西,转换成字节码之后有多大,但是接收方肯定不知道
应用层它规定发送方和接收方必须使用一个固定长度的消息头,并且,消息头必须使用某种固定的组成,而且消息头里必须记录消息体的长度等一系列信息,以方便接收方能正确地解析发送方发送的数据。该层需要关注的TCP/IP协议有http、https、ftp等协议。
数据处理

一个完整的http请求过程
浏览器输入url后,http请求返回的完整过程

Q.E.D.
Comments | 1 条评论