了解web及网络基础
了解web及网络基础
以下内容简单的说明了一下TCP/IP协议族中HTTP协议、DNS服务、IP协议的一些概念和关系。笔者只是对知识点进行了总结,仅供参考: )
转载请注明出处:了解web及网络基础
1.1使用HTTP协议访问Web
在一些大厂秋招面试的时候,会问到这样一个问题:当我们在web浏览器的地址栏输入URL时,Web页面是如何呈现的?
在还没有HTTP协议基础的同学,最简单的解释即:
1. 在浏览器地址栏内输入URL之后,信息会被送往某处。
2. 然后从某处获得响应之后,内容就会显示在Web页面上。
够简单了吧.. Web浏览器向Web服务器发送请求、获取文件资源等信息之后,再将内容显示在浏览器上。
像这种通过发送请求获取服务器资源的浏览器,都可以称为客户端。因此,像浏览器、原生应用都可以称为客户端。因为都是通过向服务器发送请求的方式获取数据的。
web使用一种名为HTTP(HyperText Transfer Protocol, 超文本传输协议)的协议作为规范,完成从客户端到服务器等一系列运作流程。可以说,Web是建立在HTTP协议上通信的。
1.2 网络基础TCP/IP协议族
为了理解HTTP协议,有必要先了解一下TCP/IP协议族。这里不要有误区,认为TCP/IP协议族特指TCP协议和IP协议。TCP/IP是互联网相关的各类协议族的总称。因此,HTTP、FTP、TCP、UDP、IP等协议和DNS服务都是TCP/IP协议族的子集。
1.2.1 TCP/IP的分层管理
TCP/IP协议族里重要的一点就是分层。TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层、数据链路层。层次的区分参考OSI参考模型。
其实将TCP/IP协议族层次化是有好处的。比如,如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需要把变动的层替换掉即可。
TCP/IP协议族各层次的作用如下:
应用层:应用层决定了向用户提供应用服务时通信的活动。应用服务包括常见的HTTP协议、FTP协议和DNS服务。
传输层:传输层提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP(Transmission Control Protocol, 传输控制协议),UDP(User Data Protocol, 用户数据包协议)。这两个协议的区别可以参考wiki: TCP, UDP
网络层:网络层用户处理网络上流动的数据包。数据包是网络传输的最小数据单位。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。IP协议就位于网络层。
数据链路层:又叫网络接口层,主要用于处理连接网络的硬件部分。如操作系统、硬件设备驱动、网络适配器(网卡)、光纤等。硬件上的范畴均在链路层的作用范围之内。
1.2.2 TCP/IP通信传输流
由上图可以看出,利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。也就是说,客户端通过应用层、传输层、网络层、数据链路层到达服务器;而服务器以相反的方向到达客户端。
以HTTP举例。
客户端:
1. 首先,作为发送端的客户端在应用层(HTTP协议)发出一个查询订单的HTTP请求
2. 接着,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文,之后的文章会涉及)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。(TCP协议的作用)
3. 最后,在网络层(IP协议),增加作为通信目的地的MAC地址后转发给数据链路层。
接收端:
接收端的服务器在数据链路层接收到数据,按序号往上发送,一直到应用层。当数据包传输到应用层之后,才能算真正接收到有客户端发送过来的HTTP请求。
值得注意的是,在数据传输过程中,由上图可以看出,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
这种把数据信息包装起来的做法称为封装。
1.3 与HTTP协议关系密切的协议:IP、TCP和DNS
1.3.1 负责传输的IP协议
按照TCP/IP协议族层次进行分类,IP协议位于网络层。这里要注意的是,不要把IP协议和IP地址混在一起,这里谈的IP是一种协议的名称。
IP协议的作用是将各种数据转发给对方。而要保证确实传送到对方,则需要满足各类条件。其中两个重要的条件分别是: IP地址和MAC地址。
IP地址指明了计算机被静态或动态分配到的地址,MAC地址是网卡所属的地址。同时,IP地址是可变的,而MAC地址是不会发生变化的。其中,MAC地址也叫物理地址、链路地址或者硬件地址。下面是我本地IP地址和MAC地址截图。
1.4.2 确保可靠的TCP协议
按照TCP/IP协议族的分层管理中,TCP协议位于传输层,提供可靠的字节流服务
所谓字节流服务是指为了方便传输,TCP协议会将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指能够把数据准确可靠的传输给对方。
简言之,TCP协议为了传输数据更加方便,将大数据分割成数据包并且打上标志,同时能够确保数据准确无误的传输给对方。
TCP协议提供可靠的传输服务而采用了三次握手(Three-way handshaking)策略。TCP协议把数据包发送出去之后,不会对之后的数据置之不理,而是会确认对方时候成功收到数据。因此,握手过程中使用了主要两种TCP标志----SYN和ACK。三次握手的过程如下:
1. 客户端向服务器发送SYN形式的数据包,表示客户端需要建立连接请求。
2. 服务端接收到之后,回传一个带有SYN/ACK标志的数据包给客户端,表示接受连接请求。
3. 客户端此时会向服务端ACK,表示接收到消息。
第一二次握手的目的是确保服务端能够接收到客户端的消息并且能够正确的应答。第二三次握手的目的是确保客户端能够接收到服务端的消息并且能够做出正确的应答。
那两次握手可以吗?不行。两次握手之后,客户端必须给服务端回传消息。这样做的目的是为了防止请求延迟或中断而导致服务端等待客户端的消息造成带宽等资源的浪费。详细的三次握手和四次分手可以参考这篇文章。传送门: 理解TCP协议的三次握手和四次分手。
如果在握手过程中某个阶段因为某些原因中断了,TCP协议会再次以相同的顺序发送相同的数据包。
1.4.3 负责域名解析的DN服务
DNS服务同HTTP协议位于应用层,它提供域名到IP地址之间的解析服务。从定义可以知道,可以通过DNS服务将域名解析成IP地址;同样的,也可以将IP地址反查相应的域名。
最后以一张图片来说明各种协议与HTTP协议的关系。
下一篇文章会针对HTTP/1.1协议结构的知识点做总结。
未完待续: )