什么是http?
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出。
HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP进行通信的HTTP的实现程序。
请求命令的传输过程
客户端发出请求命令,服务端响应请求的命令返回前端代码,然后前端代码被网站(如百度)解析,浏览器将解析的代码渲染,最后完成响应。
一个请求命令传输的完整过程
OSI七层模型
OSI七层模型中各层包含的东西
(1)应用层:浏览器输入URL,浏览器要将URL解析为IP地址,解析域名就要用到DNS协议(可以扩展DNS解析过程),DNS服务器是基于UDP的,因此会用到UDP协议。知道了IP地址,浏览器会开始构造一个HTTP请求报文,因此要用到http协议,如果采用https还会使用https协议先对http数据进行加密,随后将构建的报文传递给传输层。
(2)传输层:传输层会向服务端发起TCP连接,在建立连接前,会先进行TCP三次握手(比较慢,没有UDP协议快)。为了方便传输,会对数据进行分割(以报文段为单位),并标记编号,方便服务器接受时能够准确地还原报文信息。所以在传输层用到了TCP协议。
(3)网络层:网络层将来自传输层的TCP报文段打包,并加入源及目标的IP地址,因此用到了IP协议,随后根据路由表一跳一跳发送到目的地址。如果目标地址与源地址在同一个网段,则根据mac地址发送即可,因为又要使用到ARP协议查询mac地址。
(4)数据链路层:数据链路层将网络层传递的数据分成以"帧"为单位的数据包,因此用到了以太网协议。利用mac地址以及广播的形式进行数据帧的传递。
(5)物理层:物理层的任务就是透明地传送比特流。
(6)服务器接受请求,接受过程就是把以上步骤逆转过来,同时服务器返回HTP响应报文。
(7)浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
(8)结束连接
URL
URL:统一资源定位器(通俗来说是链接的概念),首先,浏览器第一步工作就是对URL(就是网址)进行解析,从而生成发送给Web服务器的请求信息。
URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
也可认为由4部分组成:协议、主机、端口、路径
所以URL本质上是请求服务器里的文件资源。
TCP三次握手
目录
所谓的三次握手即TCP连接的建立。建立一个 TCP 连接时,需要客户端和服务端发送三个数据包。进行三次握手是为了确定双方的接收能力和发送能力是否正常。这个连接必须是一方主动打开,另一方被动打开的。
第一次握手:
- 客户端给服务端发送一个 SYN 报文,并指定客户端的初始化序列号 ISN ,此时客户端处于 SYN_SEND 状态。
第二次握手:
- 服务端收到客户端的SYN报文后,会以自己的SYN报文作为应答,并且也是指定了自己的初始化序列号ISN。同时会把客户端的ISN+1作为ACK的值,表示自己已经收到了客户端的SYN,此时服务器处于SYN_REVD状态。
第三次握手:
- 客户端受到 SYN 报文后,会发送一个 ACK 报文,把服务器的 ISN + 1 作为自己Acknowledgment number的值,表明自己已经收到了 SYN 报文,此时客户端处于ESTABLISHED状态,服务器收到 ACK 报文后,也处于 ESTABLISHED状态。此时双方已经建立链接。
- ACK报文段可以携带数据,不携带数据则不消耗序号。
内网IP和外网IP
内网IP为本机客户端的IP,外网IP为本机连通外界使用的IP,我们通过外网IP来上网。
DNS协议和IP
域名和IP之间通过DNS协议转换,DNS 域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库。
域名可将一个IP地址关联到一组有意义的字符上去。用户访问一个网站的时候,既可以输入该网站的IP地址,也可以输入其域名,对访问而言,两者是等价的。
例如:微软公司的Web服务器的IP地址是207.46.230.229,其对应的域名是www.microsoft.com,不管用户在浏览器中输入的是207.46.230.229还是www.microsoft.com,都可以访问其Web网站。
域名和网址的区别
只有当域名经过域名解析之后(也就是将域名和网站的IP地址建立对应连接关系)这个域名才会成为一个网址。
Mac地址:无线网卡或以太网卡分配的唯一代码;
ARP:地址解析协议,将IP地址转换为Mac地址;
DNS:域名系统,将域名转换为IP;