盒子
盒子
文章目录
  1. 1. 整体概括
  2. 2. 举例说明
  3. 3. 涉及的协议
  4. 4. HTTP协议和特点,与HTTPS的区别(+2分)
  5. 5. 三次握手四次挥手原理及原因
  6. 6. DNS具体解析原理(+2分)
  7. 7. 通俗的表达整个流程让小白用户理解(+2分)

Http请求完整流程

1. 整体概括

DNS域名解析 -> 发起TCP三次握手 -> 建立TCP连接后发起HTTP请求 -> 服务器响应HTTP请求,浏览器得到html代码
-> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) -> 浏览器对页面进行渲染呈现给用户

2. 举例说明

举个例子在浏览器中输入www.baidu.com后执行的全部过程:
1)浏览器获取输入的域名www.baidu.com
2) 浏览器向DNS请求解析www.baidu.com的IP地址
3)域名系统DNS解析出百度服务器的IP地址
4)浏览器与该服务器建立TCP连接(默认端口号80)
5)浏览器发出HTTP请求,请求百度首页
6)服务器通过HTTP响应将首页文件发送给浏览器
7)TCP连接释放
8)浏览器将首页文件进行解析,并将web页展示给用户

3. 涉及的协议

1)应用层:HTTP、DNS
2)传输层:TCP、UDP
3) 网络层:IP(IP数据包传输和路由选择)、ICMP(提供网络传输过程中的差错检测)、ARP(将本机的默认网关IP地址映射为MAC地址)

4. HTTP协议和特点,与HTTPS的区别(+2分)

HTTP是超文本传输协议,是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型,特点主要有:
1)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
2)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记
3)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
4)无状态:HTTP协议是无状态协议。协议对于事务处理没有记忆能力。缺点:每次发送请求的时候都需要不断的重新传输数据。优点:server服务器只是作为应答,时效速度比较快。
为了解决上述无状态的特性:可以使用cookie和session,来支持客户端和服务端的动态交互
5)支持B/S及C/S模式

https是http over ssl(Secure Socket Layer),简单讲就是http的安全版本,在http的基础上通过传输加密和身份认证保证了传输过程中的安全性。你通常访问的网站大部分都是 http 的,最简单的方法可以看看网址是以 http:// 开头还是 https:// 开头
http不安全,主要是因为它传输的是明文内容,也不对传输双方进行身份验证。只要在数据传输路径的任何一个环节上,都能看到传输的内容,甚至对其进行修改。例如一篇文章”攻下隔壁女生路由器后 , 我都做了些什么” 中,很多攻击的环节,都是通过分析http的内容来进行。而在现实生活中呢,你很有可能泄露你的论坛高级会员账号/密码,游戏vip账号/密码,隐私的聊天内容,邮件,在线购物信息,等等。
https之所以安全,是因为他利用 ssl/tls 协议传输。

https耗性能吗
三次握手的时候耗,建好连接之后就不太耗了。按照目前加密强度的计算开销,服务器支撑握手性能会下降 6-8 倍,但是如果建立好连接之后,服务器就几乎可能撑住打满网卡的 https 流量了。所以连接复用率的提升和计算性能的优化都是重点

5. 三次握手四次挥手原理及原因

首先我们明确:TCP标志位有6种标示,即:SYN(建立联机) 、 ACK(确认) 、 PSH(传送) 、 FIN(结束) 、 RST(重置) 、 URG(紧急) 、 Sequence number(顺序号码) 、 Acknowledge number(确认号码)

1

三次握手
为了准确无误的将数据发送到指定IP处,TCP协议采用了三次握手的策略,如下步骤所示:
1)客户端采用TCP协议将带有SYN标志的数据包发送给服务器,等待服务器的确认
2)服务器端在收到SYN的数据包后,必须确认SYN,即自己发送的ACK标志,同时,自己也将会向客户端发送一个SYN标志
3)客户端在接收到服务器短的SYN+ACK包后,自己会向服务器发送ACK包,完成三次握手。那么客户端和服务器正式建立了连接,开始传输数据。

2

四次挥手
四次挥手是用来断开服务器和客户端之间的通信的,之所以要断开连接,是因为TCP/IP协议是要占用端口号的,而计算机的端口却是有限的,不进行断开的话,势必会造成计算机资源的浪费。
1)在整个通信的过程中,谁先发起请求,谁就是客户端。当客户端的数据传输到尾部时,客户端向服务器发送带有FIN标志的数据包,使其明白自己准备断开通信了。
2)因为TCP的通信是使用全双工通信的WebSocket,所以在断开连接的时候也应该是双向的;当服务器收到带有FIN标志的数据包时,其必不会直接发送FIN标志断开通信的请求,而是先发送一个带有ACK标志的应答信息,使客户端明白服务器还有数据要进行发送。
3)当服务器的数据发送完成后,向客户端发送带有FIN标志的数据包,通知客户端断开连接。
4)当客户端收到FIN后,担心网络上某些不可控制的因素导致服务器不知道他要断开连接,会发送ACK进行确认,同时把自己设置成TIME_WAIT状态并启动定时器,在TCP的定时器到达后客户端并没有接收到请求,会重新发送;当服务器收到请求后就断开连接;当客户端等待2MLS(两倍报文最大生存时间)后,没有收到请求重传的请求后,客户端这边就断开连接,整个TCP通信就结束了。

3

4

三次握手为什么不能改成两次握手?
三次握手中的每一次都是必须的。如果是两次握手,在第二次结束后,服务器并不能保证客户端已经收到了第二次的请求,如此一来的话,服务器会一直保存着这个通信过程,因为TCP通信都是要占用端口的,造成了一定的资源浪费。所以,就一定要让客户端来发送ACK的确认请求

关闭的时候为什么会是四次挥手?
四次挥手不能像三次握手一样,三次握手可以将ACK+SYN 一起发送,ACK用于确认信息,SYN却是用来建立联机的;四次挥手中ACK是不能和FIN一起发送,ACK只是告诉客户端确认我收到了,等我将数据发送完毕之后会向其发送FIN的标志,所以四次挥手是不能够改变的。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假想网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

TCP和UDP的区别
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击
UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……
UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

基于上面的优缺点,各自应用场景
什么时候应该使用TCP:当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 …………
什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……

6. DNS具体解析原理(+2分)

DNS(Domain Name System) 是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于 TCP/IP 网络,它从事将主机名或域名转换为实际 IP 地址的工作。DNS 就是这样的一位“翻译官”,它的基本工作原理可用下图来表示

5

1)在浏览器中输入 www.qq.com 域名,操作系统会先检查自己本地的 hosts 文件是否有这个网址映射关系,如果有就先调用这个 IP 地址映射完成域名解析。
2)如果 hosts 里没有这个域名的映射,则查找本地 DNS 解析器缓存是否有这个网址映射关系,如果有直接返回,完成域名解析。
3)如果 hosts 与本地 DNS 解析器缓存都没有相应的网址映射关系,首先会找 TCP/IP 参数中设置的首选 DNS 服务器,在此我们叫它本地 DNS 服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4)如果要查询的域名,不由本地 DNS 服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,完成域名解析,此解析不具有权威性。
5)如果本地 DNS 服务器本地区域文件与缓存解析都失效,则根据本地 DNS 服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地 DNS 就把请求发至 “根 DNS 服务器”,“根 DNS 服务器”收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个 IP。本地 DNS 服务器收到 IP 信息后,将会联系负责 .com 域的这台服务器。这台负责 .com 域的服务器收到请求后,如果自己无法解析,它就会找一个管理 .com 域的下一级 DNS 服务器地址 (qq.com) 给本地 DNS 服务器。当本地 DNS 服务器收到这个地址后,就会找 qq.com 域服务器,重复上面的动作,进行查询,直至找到 www.qq.com 主机。
6)如果用的是转发模式,此 DNS 服务器就会把请求转发至上一级 DNS 服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根 DNS 或把转请求转至上上级,以此循环。不管是本地 DNS 服务器用是是转发,还是根提示,最后都是把结果返回给本地 DNS 服务器,由此 DNS 服务器再返回给客户机。

6

7

7. 通俗的表达整个流程让小白用户理解(+2分)

普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立TCP连接,等浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包,服务器调用自身服务,返回HTTP Response(响应)包;客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内容随后断开与该服务器之间的TCP连接。
一个Web服务器也被称为HTTP服务器,它通过HTTP协议与客户端通信。这个客户端通常指的是Web浏览器(其实手机端客户端内部也是浏览器实现的)。

Web服务器的工作原理可以简单地归纳为:
客户机通过TCP/IP协议建立到服务器的TCP连接
客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果
一个简单的HTTP事务就是这样实现的,看起来很复杂,原理其实是挺简单的。需要注意的是客户机与服务器之间的通信是非持久连接的,也就是当服务器发送了应答后就与客户机断开连接,等待下一次请求。

参考: 一个Http请求的流程
一次完整的Http请求过程

支持一下
扫一扫,支持沈健
  • 微信扫一扫
  • 支付宝扫一扫