http基础系列之《了解web以及网络基础》

2020-06-29  本文已影响0人  自律财富自由

我们一起来了解学习下http。

看完本系列,让大家对 HTTP 协议形成一个整体概念,明确设计 HTTP 的目的及意义所在,了解 HTTP 的工作机制。 同时做到对各种客户端与服务器的通信交互场 景的细节等都做到了然于心,从而在平时的开发工作中独立思考,迅速准确地定位分析由 HTTP 引发的问题,并辅以适当的方法加以解决。

先从最基础的网络知识了解。

思考

经典面试题:从地址栏输入URL到页面呈现的过程发生了什么?

大部分人都清楚, 从客户端发出请求到收到响应的开发过程, 但是中间具体发生了什么事情,大部分人就懵了。所以,跟着本系列,让我们一起去了解这个过程吧!

1、TCP/IP协议族

TCP/IP 是互联网相关的各类协议族的总称。
通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作 的。
而 HTTP 属于它内部的一个子集。


图(1.1) - TCP/IP协议族

互联网中计算机之间的通信都按照某种约定进行, 这种约定我们称为协议。上图1.1中就包含了各种通信协议。

1.1 TCP/IP协议族的分层

TCP/IP 协议族按层次分别分为以下 4 层:

分层的意义在于,在规定好各层的接口之后, 我们可以自由的更改对应层的设计以及可按照层级去方便的定位问题。

各层的作用

1.2 TCP/IP协议族的通信传输流

TCP/IP协议族的通信传输流

发送端从应用层按照顺序往下走。
接收端从链路层到应用层往上走。

比如HTTP请求, 也就是我们通常在发起一个网页浏览请求的操作。

接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用 层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。

http请求过程

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

1.3 与HTTP关系密切的IP、TCP、DNS

1.3.1 负责传输的IP协议

IP不同于我们常说的“IP地址”,IP是一种协议的名称。
按层次, IP协议(Internet Protocal)位于网络层。

IP协议的作用:将数据包传送到指定计算机。
而保证数据包确实传送到指定计算机的两个重要条件是:IP地址MAC地址(Media Access Control Address)。
IP地址指明了节点被分配到的地址。
MAC地址是指网卡所属的固定地址。
IP地址和MAC地址可配对。
IP地址可变, MAC地址基本不会变。

IP地址间的通信依赖MAC地址映射。
在网络上,通信的双方在同一局域网 (LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。
中转过程中:

在通信过程中,无论哪台计算机、哪台网络设备,它们都无法全面掌握互联网中的细节,只能粗略的获取传输路线,这种机制称为路由选择(routing)

路由选择过程

1.3.2 确保可靠性的TCP协议

可靠的传输服务:能够把数据准确、可靠的传输给对方。
按层次分,TCP协议位于传输层, 提供可靠的字节流服务

TCP协议将数据分割成报文段(segment)进行传输, 且TCP能够确认数据最终是否送达到对方。

TCP协议如何确保数据送达对方?
TCP协议采用三次握手策略(three-way handshaking)建立一个连接。

所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。
在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。

因此, TCP协议将数据包发送出去之后,一定会去确认数据是否发送到对方。
握手的过程使用了TCP协议的两个标志:SYN(synchronize)和ACK(acknowledgement)

若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发 送相同的数据包。

三次握手过程
为什么要三次握手?
客户端和服务端都需要确认双方的发送、接收的能力都是ok的。至少需要三次才能确认。

TCP协议采用4次挥手来关闭一个连接。

为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方ACK和FIN一般都会分开发送

TCP协议使用其他手段确保通信的可靠性

1.3.3 DNS服务(Domain Name System)

按层次划分, DNS服务位于应用层。提供域名到 IP 地址之间的解析服务。

计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。

主机名或者域名方便人类记忆访问, IP地址方便计算机识别。

因此, 为了人类和计算机的无障碍沟通, DNS服务就诞生了。
DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。

了解了IP 协议、TCP 协议和 DNS 服务之后, 我们看一下IP 协议、TCP 协议和 DNS 服务在使用 HTTP 协议的通信过程中各自发挥了哪些作用?

一次http请求过程

上述过程也完整的说明了我们的思考题:从地址栏输入URL到页面呈现的过程发生了什么?现在你知道该如何完美的去回答这个问题了吗?
(不包括浏览器渲染的部分:

上述了解了从请求到响应的过程, 那么在地址栏输入地址, 我们还涉及两个基础概念:URI和URL。

1.4 URI 和 URL

URL: 就是我们平时在浏览器访问的地址。

1.4.1 URI (Uniform Resource Identifier)
Uniform
规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文 环境来识别资源指定的访问方式。另外,加入新增的协议方案(如 http: 或 ftp:)也更容易。
Resource
资源的定义是“可标识的任何东西”。除了文档文件、图像或服务(例 如当天的天气预报)等能够区别于其他类型的,全都可作为资源。另 外,资源不仅可以是单一的,也可以是多数的集合体。
Identifier
表示可标识的对象。也称为标识符。

综上, URI 就是由某个协议方案表示的资源的定位标识符

URI 用字符串标识某一互联网资源,而 URL表示资源的地点(互联网上所处的位置)。可见 URL是 URI 的子集。

URI:它是一个字符串用来标示抽象物理资源

Web上可用的每种资源( HTML文档、图像、音频、视频片段、程序等)都由一个通用资源标识符(Uniform Resource Identifier, 简称”URI”)进行定位。

URI的格式由三部分组成:

URL的格式一般由下列三部分组成:

他们的定义看起来很类似,但是有一定的差别。

URI与URL之间的联系

可能看完这些概念, 还是有些绕。
个人觉得,只要记住URI是更高层次的抽象, URL是具体的访问地址。他们之间是抽象和具体的关系,应该就容易理解了。

总结

本文简单介绍了网络基础中TCP/IP协议族的分层以及每层之间的相互作用。
每层中的不同协议之间是如何协作完成一个http请求的?
了解URI、URL的定义以及他们之间的区别是什么?
你可以按照层次, 从上到下依次回顾,每层之间的作用是什么。
比如应用层有HTTP协议、DNS协议,就可以联想到DNS协议将我们平时访问的URL地址解析为对应的IP地址,然后通过IP地址发起http请求;发起请求后, 通过HTTP协议生成请求报文,然后将请求报文传送给传输层。

到了传输层, 就有TCP协议。TCP协议将请求报文进行分割等操作, 并确认报文可靠的发送到对方(三次握手过程)。

接着到了网络层,此时IP协议通过IP地址搜索对方的MAC地址(ARP协议),一边中转一边传送。然后找到了服务器上的资源(链路层)。

最后将找到的资源按照顺序进行重组,按照原路返回回传到应用层,这样就完成了一次请求到响应的过程。

下次, 我们将简单了解一下http协议结构。
我的博客地址
后续持续更新,欢迎关注~

上一篇下一篇

猜你喜欢

热点阅读