常见问题:
TCP三次握手和四次挥手
在浏览器中输入url地址->>显示主页的过程
TCP 协议如何保证可靠传输
HTTP和HTTPS的区别
TCP、UDP协议的区别
常见的状态码
TCP、UDP 协议的区别
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认(无连接、不确认)
虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信)
比如: QQ 语音、 QQ 视频 、直播等等
TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接
TCP 不提供广播或多播服务,因为 TCP 要提供可靠的,面向连接的服务
TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,
而且在数据传递时,有确认、窗口、重传、拥塞控制机制,
在数据传完后,还会断开连接用来节约系统资源,
以上机制难以避免增加许多开销,如确认,流量控制,计时器以及连接管理等。
这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。
TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。
在浏览器中输入url地址(eg:baidu.com) ->> 显示主页的过程
打开一个网页,整个过程会使用哪些协议
图片来源:《图解HTTP》
总体来说分为以下几个过程:
DNS解析
TCP连接
发送HTTP请求
服务器处理请求并返回HTTP报文
浏览器解析渲染页面
连接结束
0.第一步是浏览器对用户输入的网址做初步的格式化检查,只有通过以上检查才会进入下一步。
只输入baidu.com时没有明确告知浏览器是用哪个协议,
针对此种情况,浏览器有自己的预案,那就是默认使用http协议
1.域名解析,找到网站IP
(1)浏览器会缓存DNS(DNS Cathe)一段时间,一般2-30分钟不等。
如果有缓存,直接返回IP,否则下一步。
(2)缓存中无法找到IP,浏览器会进行一个系统调用,查询hosts文件。
如果找到,直接返回IP,否则下一步。
(在计算机本地目录etc下有一个hosts文件,
hosts文件中保存有域名与IP的对应解析,
通常也可以修改hosts科学上网或破解软件)
(3)进行了(1)(2)本地查询无果,只能借助于网络。
路由器一般都会有自己的DNS缓存,ISPDNS缓存,这时一般都能够得到相应的IP。
(4) 如果还是无果,
浏览器客户端向本地域名服务器发送一个含有域名www.baidu.com的DNS查询报文。
(大约80%的域名解析到这里就完成了)
本地DNS服务器把查询报文转发到根DNS服务器,根DNS服务器注意到其com后缀,
于是向本地DNS服务器返回com的顶级域名服务器的IP地址。
本地DNS服务器再次向comDNS服务器发送查询请求,
comDNS服务器注意到其baidu.com后缀并用负责该域名的权威DNS服务器的IP地址作为回应。
本地DNS服务器向权威DNS服务器发出请求,得到www.baidu.com的IP地址。
最后,本地DNS服务器将含有www.baidu.com的IP地址的响应报文发送给浏览器
到这里,浏览器就获得了IP。
在DNS解析过程中,常常会解析出不同的IP。
比如,电信的是一个IP,网通的是另一个IP。
这是采取了智能DNS的结果,降低运营商间访问延时,在多个运营商设置主机房,就近访问主机。
电信用户返回电信主机IP,网通用户返回网通主机IP。
当然,劫持DNS,也可以屏蔽掉一部分网点的访问,某防火长城也加入了这一特性。
DNS负载均衡:
原理是在DNS服务器中为同一个域名配置多个IP地址,在应答DNS查询时,
DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,
将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。
具体的负载安排可以根据每台机器的负载量,该机器离用户地理位置的距离等等。
2.找到网站IP之后,开始与网站建立TCP连接
第一次握手:建立连接。
客户端发送连接请求报文段,将SYN
位置为1,Sequence Number
为x;
然后,客户端进入SYN_SEND
状态,等待服务器的确认;
第二次握手:服务器收到SYN
报文段,需要对这个SYN
报文段进行确认,
设置Acknowledgment Number
为x+1(Sequence Number
+1);
同时,自己自己还要发送SYN
请求信息,将SYN
位置为1,Sequence Number
为y;
服务器端将上述所有信息放到一个报文段(即SYN+ACK
报文段)中,一并发送给客户端,此时服务器进入SYN_RECV
状态;
第三次握手:客户端收到服务器的SYN+ACK
报文段。
然后将Acknowledgment Number
设置为y+1,向服务器发送ACK
报文段,
这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED
状态,完成TCP三次握手。
3.浏览器向网站发出GET请求
GET http://www.baidu.com/ HTTP/1.1 Host: baidu.com User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Accept-Encoding: gzip, deflate Connection: Keep-Alive
浏览器向主机发起一个HTTP-GET方法报文请求。
请求中包含访问的URL,也就是http://www.baidu.com/ ,
还有User-Agent用户浏览器操作系统信息,编码等。
值得一提的是Accep-Encoding和Cookies项。
Accept-Encoding一般采用gzip,压缩之后传输html文件。
Cookies如果是首次访问,会提示服务器建立用户缓存信息,
如果不是,可以利用Cookies对应键值,找到相应缓存,
缓存里面存放着用户名,密码和一些用户设置项。
4.显示页面或返回其它
如果返回状态码200 OK,表示服务器可以响应请求,返回报文,
但是,大型网站一般存在多个主机站点,往往不会直接返回请求页面,而是重定向。
返回的状态码就不是200 OK,而是301,302以3开头的重定向码,
浏览器在获取了重定向响应后,在响应报文中Location项找到重定向地址,
现在浏览器知道了 “https://www.baidu.com/”才是要访问的正确地址,所以它会发送另一个http请求。
服务器处理该请求,并返回一个 HTTP 响应
HTTP/1.1 200 OK Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0 Expires: Sat, 01 Jan 2000 00:00:00 GMT P3P: CP="DSP LAW" Pragma: no-cache Content-Encoding: gzip Content-Type: text/html; charset=utf-8 X-Cnection: close Transfer-Encoding: chunked Date: Fri, 12 Feb 2010 09:05:55 GMT
Content-type为“text/html”,表示浏览器以HTML形式呈现内容,而不是下载文件。
重定向是为了负载均衡或者导入流量,提高SEO排名。
利用一个前端服务器接受请求,然后负载到不同的主机上,可以大大提高站点的业务并发处理能力;
重定向也可将多个域名的访问,集中到一个站点;
由于baidu.com,www.baidu.com会被搜索引擎认为是两个网站,造成实际baidu网站的连接数减少从而降低排名,
永久重定向会将两个地址关联起来,搜索引擎会认为是同一个网站,从而提高排名。
(
假如输入的url是baidu.com,而不是https://www.baidu.com
服务器会给浏览器响应一个301永久重定向响应,这样浏览器就会访问“https://www.baidu.com/” 而非“baidu.com”
)
(SEO(Search Engine Optimization):汉译为搜索引擎优化。是一种方式:利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。目的是:为网站提供生态式的自我营销解决方案,让其在行业内占据领先地位,获得品牌收益;SEO包含站外SEO和站内SEO两方面;为了从搜索引擎中获得更多的免费流量,从网站结构、内容建设方案、用户互动传播、页面等角度进行合理规划,还会使搜索引擎中显示的网站相关信息对用户来说更具有吸引力)
反向代理:
反向代理服务器位于网站机房,代理网站Web服务器接收Http请求,对请求进行转发。
反向代理服务器具有以下功能:
①保护网站安全:任何来自Internet的请求都必须先经过代理服务器;
②通过配置缓存功能加速Web请求:减轻真实Web服务器的负载压力;
维基百科及某些博客,会把热门词条,帖子,博客缓存在反向代理服务器上,
动态内容变化时,通知反向代理服务器缓存失效,再重新加载动态内容。
③实现负载均衡:均衡地分发请求,平衡集群中各个服务器的负载压力;
5.关闭TCP连接
四次分手:
第一次分手:主机1(可能是客户端,也可能是服务器端),
设置Sequence Number
和Acknowledgment Number
,向主机2发送一个FIN
报文段;
此时,主机1进入FIN_WAIT_1
状态;这表示主机1没有数据要发送给主机2了;
第二次分手:主机2收到了主机1发送的FIN
报文段,
向主机1回一个ACK
报文段,Acknowledgment Number
为Sequence Number
加1;
主机1进入FIN_WAIT_2
状态;主机2告诉主机1,我“同意”你的关闭请求,同时主机2进入CLOSE_WAIT
状态;
第三次分手:主机2向主机1发送FIN
报文段,请求关闭连接,同时主机2进入LAST_ACK
状态;
第四次分手:主机1收到主机2发送的FIN
报文段,向主机2发送ACK
报文段,
然后主机1进入TIME_WAIT
状态;主机2收到主机1的ACK
报文段以后,就关闭连接;
此时,主机1等待2MSL
后依然没有收到回复,则证明Server端已正常关闭,主机1也可以关闭连接了。
主机1:男生
主机2:女生
TCP四次分手过程:
在一起一段时间后,某个晚上,科研楼前,
男生:我觉得给不了你更多了,我已经给了我的全部,你还要怎样(暗示分手)
女生:行吧,我懂了,我知道你厌倦我了(内心等待男生挽留)
。。沉默一会儿后。。
女生:明天以后不会再见面了,也别做朋友(没有等到挽留的女孩逐渐心寒)
男生:嗯(开始漫长的沉默,等对方走人)
女生转身离开
男生看着女生的背影,突然想起了在一起的种种,开始有些不舍,他在原地等了2MSL,可能是在等女生挽留,
但是女生已经对这段关系绝望了,头也不回地消失在夜色中(走进了科研楼开始了科研)
男生苦笑了一下,也转身离去(回宿舍打王者)
科研楼前,恢复了只属于冬日夜晚的萧索与沉寂
6.浏览器解析渲染页面
当浏览器呈现HTML时,它会注意到需要获取其他URL的资源(比如图片,JS,CSS)
浏览器将发送GET请求以检索每个文件,
这些静态资源可能可以在CDN获取到,如果没有则返回源站去拿需要的数据。
CDN加速:
CDN(内容分发网络)仍然是一个缓存,它将数据缓存在离用户最近网络服务商机房,便于用户以最快速度获取数据。即所谓的“网络访问第一跳”。CDN只将访问频度很高的热点内容(例如:图片、视频、CSS、JS脚本等访问频度很高的内容)进行缓存,可以极大地加快用户访问速度,减少数据中心负载。
浏览器在解析html文件时,会”自上而下“加载,并在加载过程中进行解析渲染。
在解析过程中,如果遇到请求外部资源时,如图片、外链的CSS、iconfont等,请求过程是异步的,并不会影响html文档进行加载。
解析过程中,浏览器首先会解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。
DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow(回流);
当盒模型的位置,大小以及其他属性,如颜色、字体、等确定下来之后,浏览器便开始绘制内容,这个过程称为repain(重绘)。当文档加载过程中遇到js文件,html文档会挂起渲染(加载解析渲染同步)的线程,不仅要等待文档中js文件加载完毕,还要等待解析执行完毕,才可以恢复html文档的渲染线程。
因为JS有可能会修改DOM,最为经典的document.write,这意味着,在JS执行完成前,后续所有资源的下载可能是没有必要的,这是js阻塞后续资源下载的根本原因。
浏览器会在下载完全部CSS之后才开始对整个页面进行渲染,因此最好将CSS放在页面最上面;而浏览器在加载JS后会立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此最好将JS放在页面最下面;
各种协议与HTTP协议之间的关系
一般面试官会通过这样的问题来考察你对计算机网络知识体系的理解。
图片来源:《图解HTTP》
HTTP长连接、短连接
在HTTP/1.0中默认使用短连接。
也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源
(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
TCP 三次握手和四次挥手
为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。
漫画图解:
图片来源:《图解HTTP》
简单示意图:
客户端–发送带有 SYN 标志的数据包–一次握手–服务端
服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端
为什么要三次握手?
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,
而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常
第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发送正常
第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
为什么要传回 SYN
接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号。
传了 SYN,为啥还要传 ACK
双方通信无误必须是两者互相发送信息都无误。
传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。
断开一个 TCP 连接则需要“四次挥手”:
客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
服务器-关闭与客户端的连接,发送一个FIN给客户端
客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1
为什么要四次挥手
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
HTTP与HTTPS
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,
因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,
为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,
SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
1.HTTP和HTTPS的基本概念
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;
另一种就是确认网站的真实性。
2.HTTP与HTTPS有什么区别?
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
3.HTTPS的工作原理
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站 或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。
(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。
4.HTTPS的优点
尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:
(1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
(3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
(4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
5.HTTPS的缺点
虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:
(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
6.HTTP切换到HTTPS
如果需要将网站从http切换到https到底该如何实现呢?
这里需要将页面中所有的链接,
例如js,css,图片等等链接都由http改为https。
例如:http://www.baidu.com改为https://www.baidu.com
BTW,这里虽然将http切换为了https,还是建议保留http。
所以我们在切换的时候可以做http和https的兼容,
具体实现方式是,去掉页面链接中的http头部,这样可以自动匹配http头和https头。
例如:将http://www.baidu.com改为//www.baidu.com。当用户从http的入口进入访问页面时,页面就是http,
如果用户是从https的入口进入访问页面,页面就是https的。
6.对称加密(Symmetric Cryptography)又称私钥加密
对称密钥加密,又称私钥加密,即信息的发送方和接收方用一个密钥去加密和解密数据。
它的最大优势是加/解密速度快,适合于对大数据量进行加密,
对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。
在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。
现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。
对称加密通常使用的是相对较小的密钥,一般小于256 bit。
因为密钥越大,加密越强,但加密与解密的过程越慢。
如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;
但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。
密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。
7.非对称加密(Asymmetric Cryptography)又称公钥密钥加密
非对称密钥加密系统,又称公钥密钥加密。
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。
私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。
非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。
比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人——银行才能对你的消息解密。
与对称加密不同的是,银行不需要将私 钥通过网络发送出去,因此安全性大大提高。
目前最常用的非对称加密算法是RSA算法。
公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。
虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,
但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。为了解释这个过程,请看下面的例子:
(1) Alice需要在银行的网站做一笔交易,她的浏览器首先生成了一个随机数作为对称密钥。
(2) Alice的浏览器向银行的网站请求公钥。
(3) 银行将公钥发送给Alice。
(4) Alice的浏览器使用银行的公钥将自己的对称密钥加密。
(5) Alice的浏览器将加密后的对称密钥发送给银行。
(6) 银行使用私钥解密得到Alice浏览器的对称密钥。
(7) Alice与银行可以使用对称密钥来对沟通的内容进行加密与解密了。
总结
(1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。
(2) 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
(3) 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,
然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,
然后双方可以使用对称加密来进行沟通。
作者:大型互联网架构技术v
来源:CSDN
原文:https://blog.csdn.net/qq_41790443/article/details/82838803
版权声明:本文为博主原创文章,转载请附上博文链接!