计算机网络

1.三次握手四次挥手

延申题目:

1).为什么需要三次握手?两次可以吗?

答:不可以(非常坚定的语气)。可以给面试官举个例子:假如只有前面2次握手,那么服务端来收到SYN并且发出SYN+ACK包之后就会处于工作状态。如果服务端在某一时刻突然收到了一个来自客户端的SYN包,在发出ACK之后,服务端处于工作状态。但是可能这个包是卡了很久已经被客户端给丢弃了。客户端收到SYN+ACK之后,表示情绪淡定不予理会,但是服务端已经处于工作状态了,会造成资源的浪费。

2).为什么断开连接需要四次

答:根据状态流程图,我们可以看出服务端响应断开连接的请求时,其ACK和FIN包并不是一起发送给客户端的,因为第一次由客户端->服务端的FIN信号表示的是客户端想要断开连接。服务端先给出ACK确认信号,表示已经收到FIN请求,然后当自己也可以结束的时候,再次发送FIN信号,所以需要挥手交互需要四次。

3).四次挥手主动方为什么需要等待2MSL?

答:主动关闭方在收到被动一方发出的FIN信号,会立马发送ACK确认信号,之后状态转变为TIME_WAIT,等待2MSL后才会进入CLOSE状态。我们先来解释下什么叫MSL(Maximum Segment Lifetime)吧。

MSL表示最大报文生存周期:任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

主动关闭方需要等待2MSL是为了,防止最后一次ACK没有被正确的传给被动方,被动关闭方会再次发送FIN信号。

2.http请求方式

3.输入一个网址发生啥

1)DNS解析:查找浏览器缓存 ->操作系统缓存 ->路由器缓存 -> 本地DNS服务器 -> 根域名服务  如果到了根域名服务器进行搜索,还没有结果,说明域名不存在或者域名过期了

2)进行TCP连接,三次握手(详情见问题一)

3)浏览器发送HTTP请求

浏览器和服务器建立连接以后,浏览器接着给这个IP地址给服务器发送一个http请求,方式为get,例如访问www.baidu.com。其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。

这个get请求包含了主机(Host)用户代理(User-Agent),用户代理就是自己的浏览器,它是你的"代理人",Connection(连接属性)中的keep-alive表示浏览器告诉对方服务器在传输完现在请求的内容后不要断开连接,不断开的话下次继续连接速度就很快了。可能还会有Cookies,Cookies保存了用户的登陆信息,一般保存的是用户的JSESSIONID,在每次向服务器发送请求的时候会重复发送给服务器。

在建立连接发送请求时每个服务端需要和客户端保持通信,有很多客户端都会和服务器进行通信。服务器为了识别是哪个客户端与它通信,就必须用一个标识记录客户端的信息。客户端首次访问服务器,服务端返回响应时通过附带一个记录的客户端信息的标识来返回给客户端,这个标识就是JSESSIONID,JSESSIONID就放在了客户端的Cookies里。当客户端再次向服务器发送请求时上就使用上次记录的Cookies里面的JSESSIONID,这样服务器就知道是哪个浏览器了。这样他们之间就能保持通信了。发送完请求接下来就是等待回应了

4)服务器处理请求

服务器收到浏览器的请求以后,会解析这个请求(读请求头),然后生成一个响应头和具体响应内容。接着服务器会传回来一个响应头和一个具体响应内容,响应头告诉了浏览器一些必要的信息,例如重要的Status Code,1开头表示临时响应,2开头如200表示一切正常,3开头表示重定向,4开头是客户端错误,如404表示请求的资源不存在,5开头表示服务器端错误,如500 (服务器内部错误):有bug导致程序嗝屁了,502 (错误网关):服务器从上游接到了无效响应(服务器是活着的,拿到的响应是无效的,我见过的就是用域名访问服务器,域名对应的端口号的那个程序死了)

响应:就是具体的要请求的页面内容。

5)浏览器解析渲染页面

a. 浏览器显示HTML

当服务器返回响应之后,浏览器读取关于这个响应的说明书(响应头),然后开始解析这个响应并在页面上显示出来。浏览器打开一个网址的时候会慢慢加载这个页面,一部分一部分的显示,直到完全显示,直到最后的旋转进度条停止。因此在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了。

b. 浏览器向服务器发送请求获取嵌入在HTML中的对象

在浏览器显示HTML时,打开一个网页的过程中,主页(index)页面框架传送过来以后,浏览器还会因页面上的静态资源多次发起连接请求,需要获取嵌入在HTML中的其他地址的资源。这时,浏览器会发送一些请求来获取这些文件。这些内容也要一点点地请求过来,所以标签栏转啊转,内容刷啊刷,最后全部请求并加载好了就终于好了。

这时请求的内容是主页里面包含的一些资源,如图片,视频,css样式,JavaScript文件等等。

这在文件属于静态文件,首次访问会留在浏览器的缓存中,过期才会从服务器去取。缓存的内容通常不会保存很久,因为难保网站不会被改动。

静态的文件一般会从CDN中去取,CDN根据请求获取资源的时候可能还会用到负载均衡。

c. 浏览器发送异步(AJAX)请求

对于那些动态的请求,动态网页等就必须要从服务器获取了。对于静态的页面内容,浏览器通常会进行缓存,而对于动态的内容,浏览器通常不会进行缓存。对于这些动态请求,Nginx可能会专门设置一些服务器用来处理这些访问动态页面的请求。

6)关闭TCP连接

当数据完成请求到返回的过程之后,根据Connection的Keep-Alive属性可以选择是否断开TCP连接,HTTP/1.1一般支持同一个TCP多个请求(长连接),而不是1.0版本的完成一次请求就发生断开(短链接),关闭过程(4次挥手,详情见问题一)

4.SSL协议通信过程

(1) 浏览器发送一个连接请求给服务器,服务器将自己的证书(包含服务器公钥S_PuKey)、对称加密算法种类及其他相关信息返回客户端;

(2) 客户端浏览器检查服务器传送到CA证书是否由自己信赖的CA中心签发。若是,执行4步;否则,给客户一个警告信息:询问是否继续访问。

(3) 客户端浏览器比较证书里的信息,如证书有效期、服务器域名和公钥S_PK,与服务器传回的信息是否一致,如果一致,则浏览器完成对服务器的身份认证。

(4) 服务器要求客户端发送客户端证书(包含客户端公钥C_PuKey)、支持的对称加密方案及其他相关信息。收到后,服务器进行相同的身份认证,若没有通过验证,则拒绝连接;

(5) 服务器根据客户端浏览器发送到密码种类,选择一种加密程度最高的方案,用客户端公钥C_PuKey加密后通知到浏览器;

(6) 客户端通过私钥C_PrKey解密后,得知服务器选择的加密方案,并选择一个通话密钥key,接着用服务器公钥S_PuKey加密后发送给服务器;

(7) 服务器接收到的浏览器传送到消息,用私钥S_PrKey解密,获得通话密钥key。

(8) 接下来的数据传输都使用该对称密钥key进行加密。

上面所述的是双向认证 SSL 协议的具体通讯过程,服务器和用户双方必须都有证书。由此可见,SSL协议是通过非对称密钥机制保证双方身份认证,并完成建立连接,在实际数据通信时通过对称密钥机制保障数据安全性

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心脏dance

如果解决了您的疑惑,谢谢打赏呦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值