我们应该知道在网页浏览器里面输入URL之后,信息会发送到某处,然后从某处获得回复,然后将web页面呈现出来。
那么,再详细一点,web浏览器是根据地址栏中的指定URL,从web服务器端获取文件资源等信息,从而显现出web页面。
像这种通过发送请求获取服务器资源的web浏览器,都可称为客户端。
web使用一种名为HTTP的协议作为规范,以来完成从客户端到服务端的等一系列的流程。
可以这么说,Web是建立在HTTP协议上进行通讯的。
我们通常使用的网络,是在TCP/IP协议族的基础上运作的。
HTTP协议就是TCP/IP协议族的一个子集。
可以这么说,
TCP/IP协议就是与互联网相关的协议集合,而不只是TCP协议和IP协议。
TCP/IP协议族里面最重要的就是分层。
TCP/IP协议族按照层次分为四层:
TCP层次化的好处:对于每一层的设计,如果某一层出现了bugs或者修改,那么就不需要对整体的设计进行改动,每一层协议各司其职,只保证自己的方面不出现问题就行。
应用层决定了决定了向用户提供应用服务时通信的活动。
就比如:FTP(文件传输协议)和DNS(域名系统)。
HTTP协议就位于TCP/IP协议的应用层。
传输层提供处于网络连接状态的两台计算机之间的数据传输。
只包含TCP(传输控制协议)和UCP(用户数据报协议)两个性质不同的协议。
数据包是网络传输的最小数据单位,网络层就是来处理在网络上流动的数据包。
网络层规定了要通过怎样的路径来到达对方的计算机,并把数据包传送给对方。
这么说,网络层的作用就是,当两台网络连接的数据传输的过程中要经过很多计算机或者网络设备,那么网络层就从众多路径内选出一条传输路线。
数据链路层用来处理数据传输过程中的硬件相关,即处理连接网络的硬件部分,包括控制操作系统,硬件的设备驱动,NIC,光纤等物理可见部分。
利用TCP/IP协议族进行通讯的时候,会通过分层顺序与对方进行通讯,发送端从应用层往下走,接收端从数据链路层往上走。
来看看两台计算机在进行数据传输的过程中TCP/IP协议如何运作。
对于HTTP报文呢,在发送端每向下传输一层,必然会被打上一个经过该层的首部信息,反之,在接收端每往上一一层,就相应的删除对应的首部。
应用层就是传输HTTP报文,传输层是对HTTP报文首部添加TCP报文段,网络层在HTTP报文最首部增加IP报文段,数据链路层是添加以太网首部。
这种将数据信息包装起来的做法就叫做封装。
而TCP/IP协议的每一层协议对于数据传输的作用表面上就体现在它在数据中添加的报文。
IP协议处在网络层,它的作用是把各种数据包传送给对方。而如果要保证确实传送到对方那里,则需要满足各种条件,其中非常重要的是IP地址和MAC地址。
其中IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以跟MAC地址进行配对,IP地址可以变换,但是MAC地址基本不会改变。
IP间的通信依赖MAC地址,在网络上,通信的双方往往不会处于同一个局域网中,而是要通过多台计算机和网络设备中转才能连接到对方。而在进行中转的过程中,会利用中转设备的MAC地址来对接到下一个目标。在这里会采用ARP协议用以解析地址,只需要知道通信方的IP地址就可以反查出对应的MAC地址。
TCP协议处在传输层,负责的是提供可靠的字节流服务。
所谓字节流服务是指:为了方便运输,将大块数据分割成以报文段为单位的数据包进行管理。
而可靠的传输服务是指,能够把数据准确可靠地传递给对方。
简单来说,TCP协议为了更容易传输大数据才将数据分割,而且TCP协议能够确认数据最终是否送达对方。
为了准确无误的将数据传输到对方,TCP协议采用了三次握手策略。
用TCP协议把数据包送出去后,TCP一定会对是否准确传输进行验证,这里使用TCP的两个标:SYN和ACK。
发送端首先发送一个带SYN标识的数据包给对方。
接收端收到以后,回传一个带SYN/ACK标志的数据包以示传达确认信息。
最后,发送端再回传一个带ACK标志的数据包,代表握手结束。
DNS服务跟HTTP协议都是位于应用层的协议,它提供域名到IP地址的解析服务。
计算机既可以被赋予IP地址,也可以被赋予主机名与域名。
相较于IP地址的一大串数字而言,主机名和域名的那种字母搭配往往更符合人类记忆模块。
但是吧,当你传到一个域名,这种符合人类思维的方式计算机并不能理解,所以DNS服务就有了存在的必要。
DNS服务通过域名查找IP,也可以从IP地址查到域名。
知道了这些,我们再来梳理一遍数据传输的过程:
参考书籍:《图解HTTP》上野宣 著 于均良 译