HTTP协议简介/数据包封装/三次握手/DNS解析

1.浏览器背后的故事

在这里插入图片描述解释:
打给小红,由姓名的代号来记录, 小红就是域名,电话号就是IP地址,共同语言(比如英语,汉语这些)就是HTTP协议
渲染:
浏览器收到的是莫名其妙的报文,所以浏览器要进行渲染再给用户。 根据html文件描述相对应的数学模型 ,要用我们浏览器的各个零部件,从而将网页的源代码js,css,这些转为图像和文字。

2.HTTP

◆超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
是用来在网页之间传递html的规则

传输超文本的协议
A按照协议把超文本递给B,A和B遵守着这种规则
超文本:超级文本,在文本内容中有链接,点击链接就可以跳转到其他页面。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展
在这里插入图片描述历史:
1990底,tim发明了url, http, 表达信息的语言html,通过这些实现了一个服务器和浏览器
然后万维网经历了发展快速又混乱的几年,很多公司做了扩展但是都不能兼容,有一个团队结合多方发表了HTTP1.0,在0.9的基础上做了大量的改进。

特点:
0.9版本:只有get技能,只能传递html格式的字符串,每个http请求都是短链接
1.0版本:post,状态码,缓存,重定向等都有了
1.1版本:connect,持久连接,管道机制,是目前最常用的版本

QUIC协议:传输层的协议,谷歌在2013年提出,减少TCP通信的延迟和开销,采用了UDP这种不大可靠的做基础,做了大量改进,想把TCP,UDP二者合一

Web与HTTP
◆WEB是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统
◆建立在Internet 上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet.上的信息节点组织成一个互为关联的网状结构

3.透过TCP/IP看HTTP

◆HTTP协议是构建在TCP/IP协议之上的,是TCP/IP协议的一个子集
◆为了更好的理解HTTP协议,我们先了解一下 TCP/IP的相关知识。

TCP/IP协议族
◆TCP/IP协议其实是一系列与互联网相关联的协议集合起来的总称(规则)
◆封层管理是TCP/IP协议的特征
在这里插入图片描述应用层
◆应用层一般是我们编写的应用程序,决定了向用户提供的应
用服务。应用层可以通过系统调用与传输层进行通信。
如: FTP、DNS、HTTP等。

传输层.
◆传输层通过系统调用向应用层提供处于网络连接中的两台计算机
之间的数据传输功能。
◆在传输层有两个性质不同的协议:TCP(面向连接, 可靠效率低)和UDP(无连接,不可靠效率高)。

网络层
网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传输给对方。(在众多路径中选择一条路径)

链路层(又名数据链路层,网络接口层)

用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC( Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。

4.数据包的封装过程

在这里插入图片描述应用程序的数据在发布到网络之前,从上往下传递,每层协议都会在上层协议的基础上加上自己的头部信息。链路层还会加上尾部信息,实现封装。
发送端发送数据时,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。而接收端接收数据时,数据会从下层传输到上层,传输前会把下层的头部信息删除
在这里插入图片描述
利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。
发送端从应用层往下走,接收端则往应用层往上走。
我们用 HTTP 举例来说明:
1.首先作为发送端的客户端在应用层(通过HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。
2.接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数据(就是HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
3.在网络层(通过IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。
4.接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
这种把数据信息包装起来的做法称为封装(encapsulate)

5.传输层–TCP三次握手

使用TCP协议进行通信的双方必须先建立连接,然后才能开始传输数据。为了确保连接双方可靠性,在双方建立连接时,TCP协议采用了三次握手策略。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述完成三次握手就可以进行数据传输

为什么非要进行三次握手?
客户端和通讯端要进行连接,要确认双方的收发能力都是正常,
第一次握手, 客户端发送给服务器,服务器能收到,那么这个时候服务端能确定客户端的发送能力正常,服务端的接受能力正常。
第二次握手, 客户端确认服务端的接受能力正常(服务端接收到了我的包),发送能力也是正常的(服务端发来了新的),也知道了自己的发送能力是正常的(服务端接收到了我的包)
第三次握手, 因为服务端只知道客户端的发送能力和自己的接受能力正常,通过第三次握手,服务端知道客户端的接收能力正常(客户端对服务端有了第二次的回应),服务端的发送能力正常(发出去了)

为什么建链接要3次握手,断链接需要4次挥手?

对于建链接的3次握手: 主要是要初始化Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)——所以叫SYN,全称Synchronize Sequence Numbers。也就上图中的 x 和 y。这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输的问题而乱序(TCP会用这个序号来拼接数据)。

对于4次挥手: 因为TCP是全双工的,所以,发送方和接收方都需要Fin和Ack。只不过,有一方是被动的,所以看上去就成了所谓的4次挥手。如果两边同时断连接,那就会就进入到CLOSING状态,然后到达TIME_WAIT状态。

当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

6.DNS域名解析

DNS: 域名解析协议(将域名转化为相对应的IP地址 www.baidu.com)

www.baide.com 通过 DNS 协议解析对应的 IP 地址 + 80(端口号)— 》web服务器

◆已经介绍了与HTTP协议有着密切关系的TCP/IP协议(使用DNS解析的),接下来介绍的DNS服务也是与HTTP协议有着密不可分的关系。
◆通常我们访问一个网站,使用的是主机名或者域名来进行访问的。因为**相对于IP地址(一 组纯数字), 域名更容易让人记住。但TCP/IP协议使用的是IP地址进行访问的,所以必须有个机制或服务把域名转换成IP地址。**DNS服务就是用来解决这个问题的,它提供域名到IP地址之间的解析服务。
在这里插入图片描述
为了提高效率,DNS服务解析是有层次的,原则是就近原则,首先本地电脑会将一些经常使用的域名和ip地址形成映射保存到本地host文件,所以搜寻的时候,系统会从本地的host文件先去找,没有的话再去本地的DNS服务器(在tcp/ip的参数里,配置网络的时候会配置一个DNS服务器,会找首选DNS服务器即本地DNS服务器), 如果本地dns找不到,会一层层上传(前提是设置了转发模式),直到根服务器,找到了再回传。

host:比如访问谷歌,可以修改host 将谷歌的地址指向映像或者 别的地址

很久没见过的同学叫小白,想不到电话号码,在脑子里想一下,想到了就拨出去(本地host查询),想不起来就看看手机通讯录(本地NDS),没有的话我家楼下有个营业厅,让她们帮忙查查,问问总公司(没有转发模式的情况),有转发模式的话,就是一层层向上

DNS 域名解析协议的工作原理 递归式 迭代式

见以下链接
http://blog.chinaunix.net/uid-26275986-id-4110819.html

递归式和迭代式

  • 递归与迭代的区别 所谓 递归查询过程 就是 “查询的递交者” 更替, 而 迭代查询过程 则是 “查询的递交者”不变。
    举个例子来说,你想知道某个一起上法律课的女孩的电话,并且你偷偷拍了她的照片,回到寝室告诉一个很仗义的哥们儿,这个哥们儿二话没说,拍着胸脯告诉你,甭急,我替你查(此处完成了一次递归查询,即,问询者的角色更替)。然后他拿着照片问了学院大四学长,学长告诉他,这姑娘是xx系的;然后这哥们儿马不停蹄又问了xx系的办公室主任助理同学,助理同学说是xx系yy班的,然后很仗义的哥们儿去xx系yy班的班长那里取到了该女孩儿电话。(此处完成若干次迭代查询,即,问询者角色不变,但反复更替问询对象)最后,他把号码交到了你手里。完成整个查询过程。

递归查询是以本地名称服务器为中心查询,
递归查询是默认方式,迭代查询是以DNS客户端,也就是客户机器为中心查询。其实DNS客户端和本地名称服务器是递归,而本地名称服务器和其他名称服务器之间是迭代。
在这里插入图片描述DNS 和 CDN

A在上海,B在新疆,C在西安, 大家都想看一个视频,但是这个视频资源挂在上海服务器,其他人都会访问比较慢,把CDN挂在DNS上,用CDN来进行内容的分发,根据自己的区域来决定应该访问哪一边的服务器。

7.HTTP事务处理过程

在这里插入图片描述在这里插入图片描述HTTP工作过程

1.地址解析
如用客户端浏览器请求这个页面:

localhost.com:8080/index.htm

从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:

  • 协议名:http
  • 主机名:localhost.com
  • 端口:8080
  • 对象路径:/index.htm

在这一步,需要域名系统DNS解析域名,得主机的IP地址。

2,封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

3,封装成TCP包,建立TCP连接(TCP的三次握手)
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口。

4,客户端向服务器发送请求命令
建立TCP连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。

5,服务器响应
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据.

6,服务器关闭TCP连接
一般情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接,即把链接释放掉,然后如果客户端或者服务器在其头信息加入了这行代码 Connection:keep-alive ,TCP 连接在发送后将仍然保持打开状态,于是,客户端可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

实验—对于浏览器来说HTTP请求到底是什么样子

1.下载WIRESHARK进行抓包,要下载最稳定的版本
在这里插入图片描述
2.打开以后选择所要抓取的网络,这里选择的是wlan
在这里插入图片描述
3.找一个网站
在这里插入图片描述
4.然后去WIRESHARK里面看一下
在这里插入图片描述在这里插入图片描述
5.可以通过浏览器的开发者工具看到一些请求的简单状况

在这里插入图片描述
在这里插入图片描述包括请求时间,缓存等等,都会展示出来

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章