我所认为的网络协议的核心
做为一个开发,一个绕不开的问题就是网络,说到网络咱们又会想到网络协议,那么咱们常说的网络协议又是什么呢?一般咱们说的网络协议指的是TCP/IP协议族,是互联网全部相关协议的一个总称,而HTTP协议只是他下边的一个子集。固然也有说法任务TCP/IP是指TCP和IP两种协议,还有的是认为TCP/IP是在IP协议的通讯过程当中使用到的协议族的统称。服务器
那么其核心又是什么呢?我认为TCP/IP协议族最重要的是它分层管理的思想。TCP/IP协议族按层次分为了应用层、传输层、网络层和数据链路层四层结构。全部的设计都是在这四层结构上进行的,这样就会有一个好处,若是有地方须要变更,只须要把对应层的东西进行修改就能够了,最重要的是分工明确,应用层只考虑分配给本身的任务就能够了,而不须要关心怎么传输,能不能送达一类的问题,职能划分明确,简单明了。网络
那么每层都作了什么事情呢?大数据
-
应用层操作系统
决定了向用户提供应用服务时的通讯活动。TCP/IP协议族内预存了各种通用的应用服务,如FTP(File Transfer Protocol,文件传输协议)和DNS(Domain Name System,域名系统)服务等,咱们常说的HTTP协议也是处于该层。设计
-
传输层3d
传输层是应用层的上层,提供处于网络链接中的两台计算机之间的数据传输。传输层主要包含两个协议TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。blog
-
网络层(网络互连层)接口
网络层是用来处理网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了经过怎样的路径(即传输路线)到达对方的计算机,并把数据包传送给对方。当与对方计算机之间经过对台计算机或网络设备进行传输时,网络层所起的做用就是在众多的选项内选择一条传输路线。咱们所熟知的如IP协议就是属于这一层。three
-
链路层(数据链路层,网络接口层)图片
用来处理网络链接的硬件部分。包括控制操做系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分。硬件上的范畴均属于链路层
一个网络请求的历程
下面咱们那HTTP请求为例来分析一下一个网络请求从发出到完成的主要经历。
首先咱们须要了解几个与HTTP密切相关的协议:IP、TCP和DNS。
-
负责传输的IP协议
IP(Internet Protocol)协议位于网络层,几乎全部使用网络的系统都会用到IP协议。注意IP跟IP地址是不一样的概念,IP是指的协议名称。
IP协议的做用是把各类数据包传送给对方,而要保证确实传送到对方那里,须要知足各种条件,其中两个重要条件是IP地址和MAC地址(Media Access Control Address)。
IP地址指明了节点被分配的地址,MAC地址是指网卡所属的固定地址。IP地址和MAC地址进行配对,IP地址能够变换,但MAC地址基本不会更改。
-
确保可靠性的TCP协议
上面讲了TCP时候位于传输层的,其主要是提供可靠的字节流服务。
所谓字节流服务(Byte Stream Service)是指为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指可以把数据准确可靠的传给对方,一句话说就是TCP协议为了更容易传送大数据把数据进行分割,而且可以保证数据最终准确送给对方。
那TCP协议是怎么实现可靠性呢?这里就采用了咱们所熟知的三次握手策略(three-way handshaking)。握手过程当中使用了TCP的标志SYN(synchronize)和ACK(acknowledgement)。
首先发送端发送一个带有SYN标志的数据包给对方,接收端收到后回回传一个带有SYN/ACK标志的数据包给发送端表示确认收到信息。而后发送端收到信息后会再回传一个带ACK标志的数据包给接收端,表明握手结束。若是传输中断,发送端会继续以相同的顺序发送相同的数据包。固然除了三次握手之外TCP协议还有其余各类手段保证通讯的可靠。
-
负责域名解析的DNS服务
DNS服务和HTTP协议是同样位于应用层的,它提供域名到IP地址之间的解析服务。计算机既能够被赋予IP地址,也能够被赋予主机名和域名。好比www.baidu.com。一般咱们都是经过主机名或域名来访问对方的计算机,而不是直接输入IP地址访问。可是域名或主机名对人类来说比较容易记忆,可是让计算机去理解就会比较困难,因此就有了DNS服务的诞生,DNS协议提供经过域名查找IP地址或逆向从IP地址反查域名的服务。
总结:了解了这几个协议那么咱们一个网络请求的历程就会比较清晰了,首先用户输入一个地址www.baidu.com给客户端,而后客户端就会去找DNS服务问www.baidu.com的IP地址是什么,而后DNS把IP地址返回给客户端,而后HTTP协议会根据IP地址生成针对对应Web服务器的HTTP请求报文,这时候请求从应用层来到了传输层,到传输层之后TCP协议就会把HTTP请求的报文分割成报文段,并把每一个报文段可靠的传给服务器,传输过程会通过网络层,IP协议根据IP地址搜索对应的服务器,通过咱们的网线之类的硬件传到服务器服务端又会经过这一端的TCP协议将客户端发送过来的报文段按原先的顺序组合成完整的数据告诉服务器,而后服务器获得数据后就会把相应的信息按原路返回到客户端。
简化过程就是 客户端应用层--->传输层--->网络层--->链路层--->网络层--->传输层--->服务端应用层。
具体的引用一张图片来讲明: