网络

2021-06-18  本文已影响0人  叔简

HTTP

特点

请求方式

请求和响应报文

状态码

get、post区别

连接建立流程

判断一个请求是否已经结束

HTTP持久连接

Charles抓包原理

HTTPS

概念

HTTPS协议栈.png

建立流程

1、客户端首次请求服务器,告诉服务器自己支持的协议版本,支持的加密算法及压缩算法,并生成一个随机数(client random)告知服务器。
2、服务器确认双方使用的加密方法,并返回给客户端证书以及一个服务器生成的随机数(server random)
3、客户端收到证书后,首先验证证书的有效性,然后生成一个新的随机数(premaster secret),并使用数字证书中的公钥,加密这个随机数,发送给服务器。
4、服务器接收到加密后的随机数后,使用私钥进行解密,获取这个随机数(premaster secret
5、服务器和客户端根据约定的加密方法,使用前面的三个随机数(client random, server random, premaster secret),生成『对话密钥』(session key),用来加密接下来的整个对话过程(对称加密)。


HTTPS加密的过程.png

会话密钥

问题一:为什么握手过程需要三个随机数,而且安全性只取决于第三个随机数?

前两个随机数是明文传输,存在被拦截的风险,第三个随机数是通过证书公钥加密的,只有它是经过加密的,所以它保证了整个流程的安全性。前两个随机数的目的是为了保证最终对话密钥的『更加随机性』。

问题二:Charles如何实现HTTPS的拦截?

Charles要实现对https的拦截,需要在客户端安装Charles的证书并信任它,然后Charles扮演中间人,在客户端面前充当服务器,在服务器面前充当客户端。

问题三,HTTPS都使用了哪些加密方法,为什么

DNS

概念

域名到IP的映射,DNS解析采用UDP数据报形式,且为明文传送

解析流程

1、浏览器中输入想要访问的网站域名,操作系统会检查本地hosts文件是否有这个网址的映射关系,如果有就调用这个IP地址映射,完成域名解析。没有的话就走第二步。
2、客户端回向本地DNS服务器发起查询,如果本地DNS服务器收到请求,并可以在本地配置区域资源中查到该域名,就将对应结果返回为给客户端。如果没有就走第三步。
3、根据本地DNS服务器的设置,采用递归或者迭代查询,直至解析完成。

DNS解析查询

DNS劫持问题

DNS劫持和HTTP的关系

解析转发问题

client发送域名,DNS为了节省资源,会转发给其他的DNS服务器,其他DNS服务器会向权威的DNS服务器来请求域名对应的IP,此时可能涉及的并不是原来网络的节点,产生一个跨网访问的问题,造成网络访问的缓慢

Session / Cookie

存在意义

HTTP协议无状态特点的补偿

Cookie

如何修改Cookie

如何删除Cookie

如何保证Cookie的安全性

Session

概念

用来记录用户状态,区分用户;状态保存在服务器端

Session的工作流程

依赖关系和区别

1、存储位置:Cookie存放在客户端上,Session数据存放在服务器上。
2、Session 的运行依赖 session id,而 session id 是存在 Cookie 中的,也就是说,如果浏览器禁用了 Cookie ,同时 Session 也会失效
3、安全性:Cookie存在浏览器中,可能会被一些程序复制,篡改;而Session存在服务器相对安全很多。
4、性能:Session会在一定时间内保存在服务器上,当访问增多,会对服务器造成一定的压力。考虑到减轻服务器压力,应当使用Cookie

UDP

特点

TCP

特点

功能

简述TCP慢启动的特点

发送报文指数增长,来试探拥塞的极限在哪,到门限初始值(16),减缓发送报文速率,加一递增,到24时,(连续三次ACK都未收到时,定义为网络拥塞),乘法减小发送报文到1,然后再指数增加,加法增加,慢慢恢复报文发送数量,门限值也减小到12(慢开始,拥塞避免算法)

TCP和UDP的区别

长链接和短链接

总之,长连接和短连接的选择要视情况而定。

socket

概念

建立socket连接

建立 Socket 连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

Socket连接与TCP连接

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

QQ、微信为什么是UDP而不是TCP:

像腾讯QQ之类的大规模即时通讯软件,经常性的是几千万用户同时在线 如果都采用长连接的方式。岂不是要服务器的硬件防火墙监控数千万个连接了,就算分布式服务端能承受这么多用户 网关也受不了,而且有理由相信服务器也受不了 。所以对于大规模即时通讯,尤其是用户数量众多 肯定不能用TCP常连接的方式,这种方式只适合于小规模的即时通讯,如局域网,公司内部的即时通讯等 对于大规模的,用户数量众多的C/S软件 应当采用UDP协议进行数据传输,网关就不停收发数据包就可以了。

使用TCP协议和客户端进行短命连接,用了就关 比如客户登陆请求好友列表,我们就和他建立TCP连接发给他好友列表,然后关掉连接 当用户要给另外一个客户发信心我们再建立连接,数据传完我们又关掉连接 这种方式,无疑服务器可以承载更多的用户登陆。但是缺点也是非常明显的 一般情况下我们接收的数据都不大,每次发一点点消息都要建立连接 TCP本来就比较消耗网络资源,这样毫无规律的断断连连 连连断断,加上本来这种方式就有较高的延迟 也不适合大规模的即时通讯

事实上,在Internet上传输的UDP包从A发送给B 它完整地到达几率一般情况下还是相当之高的。我们开发一个多用户的即时通讯软件 采用UDP传输消息的时候,报文被划分成包 一个UDP包究竟是多大?经过我的了解一个UDP用户包最大大小是64KB 根据网络状况,实际在传输包的时候可能把包划成若干个分片 一个分片的最大大小是1640B 可以保存好几百个汉字。UDP协议提供数据报机制传输信息 如果报文比较长,比如一个文件,一个图片 要被划分成若干个数据包,由于对于一般的文字消息和其它指令都是比较小的 它们会被放在一个包里面,由于UDP是无连接的 不可靠的,如果发生丢包,不会重传 所以不能保证数据包能完整并准确地到达目的地,但是对于我们的即时通讯软件来说 一般的聊天信息比较小,比如我们给一个好友发送一条聊天信息“今天我很高兴”,会不会服务器转发的时候只收到“今天我很高”,再传给好友的时候变成了“今天”,答案是不会发生这种情况的 UDP虽然描述是不可靠,不过依然在数据包中包含了头信息描述了包的大小等信息,在包进行转发的过程中 如果数据不完整,是会被网络设备发现的,比如中途一个转发这个包的路由器发现了一个不完整的UDP包会直接丢弃,如果是TCP 当有包被丢弃了会进行重传,对于UDP 包在传输过程中由于数据的缺失被丢弃不会进行重传 我们顶多就是一条信息发送失败了,而这种概率一般情况下是非常低的 。

开发时到底选择TCP还是UDP:

如果是由客户端间歇性的发起无状态的查询,并且偶尔发生延迟是可以容忍,那么使用HTTP/HTTPS吧。

如果客户端和服务器都可以独立发包,但是偶尔发生延迟可以容忍(比如:在线的纸牌游戏,许多MMO类的游戏),那么使用TCP长连接吧。

如果客户端和服务器都可以独立发包,而且无法忍受延迟(比如:大多数的多人动作类游戏,一些MMO类游戏),那么使用UDP吧。

WebRTC是干什么用的

WebRTC是一个可以用在视频聊天,音频聊天或P2P文件分享等Web App中的 API。借助WebRTC,你可以在基于开放标准的应用程序中添加实时通信功能。它支持在同级之间发送视频,语音和通用数据,从而使开发人员能够构建功能强大的语音和视频通信解决方案。该技术可在所有现代浏览器以及所有主要平台的本机客户端上使用。WebRTC项目是开源的,并得到Apple,Google,Microsoft和Mozilla等的支持。

如果某一请求只在某一地特定时刻失败率较高,会有哪些原因

这个是某公司二面时的问题,是一个开放性问题,我总结了以下几点可能:

1、该时刻请求量过大

2、该地的网络节点较不稳定

3、用户行为习惯,比如该时刻为上班高峰期,或者某个群体的特定习惯

总结

上一篇 下一篇

猜你喜欢

热点阅读