计算机网络(2)
文章目录
- 17.Http和Https的区别?
- 18.加密与认证
- 18.1讲讲对称加密与非对称加密?
- 18.2讲讲HTTPS加密与认证过程?(字节问过..)
- 19.TCP 的 TIME_WAIT知道吗?/简述什么是 MSL,为什么客户端要等待2MSL的时间才能完全关闭?
- 20.说说什么是 SYN flood,如何防止这类攻击?(泛洪攻击)
- 21.说说什么是 TCP 粘包和拆包?
- 22.说说从系统层面上,UDP 如何保证尽量可靠?
- 23.说一说 TCP 的 keepalive,以及和 HTTP 的 keepalive 的区别?
- 24.讲讲TCP 协议的延迟 ACK 和累计应答?
- 25.说说 TCP 如何加速一个大文件的传输?
- 26.说说端到端,点到点的区别?
- 27.说说浏览器从输入 URL 到展现页面的全过程
- 28.说说 HTTP 中的 referer 头的作用?
- 29.说说 HTTP 的方法有哪些?
- 30.说说 GET请求和 POST 请求的区别?
- 31.简述 HTTP 1.0,1.1,2.0 的主要区别?
- 32.说说 HTTP 常见的响应状态码及其含义?
- 33.说说 Cookie 和 Session 的关系和区别?
参考回答
①http是超文本传输协议,信息是明文传输,连接简单,无状态的;https是超文本传输安全协议,具有ssl安全加密。
②http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
③https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
参考回答
①对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;
②而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密;
③由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
参考回答
我们最终需要用对称加密来传送消息,但对称加密的秘钥我们通过非对称加密的方式发送。
前提:服务器端向第三方机构(CA)申请了一个身份z书(后用来认证)。
过程:
①客户端向服务器端发送请求,服务器将证书和公钥(非对称加密的公钥)发送给客户端;
②客户端拿着证书在第三方机构(CA)中认证,认证失败则停止交流,否则下一步;
③客户端将秘钥(对称加密的秘钥)通过公钥加密后发送给服务器,服务器用本地私钥解密,即得到了秘钥。
④此后,双方通过对称加密进行通信。
参考回答
(也称:2MSL等待状态)
①MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
②有效地终止TCP连接,使迟来的报文段有足够的时间被识别并丢弃。
参考回答
SYN Flood是一种利用TCP协议缺陷,发送大量半连接请求,耗费CPU和内存资源,一定意义上使服务器丧失功能。服务器收到请求,并将其放入半连接队列,并在一段时间内不断维护这些请求(但得不到回应),耗费资源。
防御方法:syn cookie
类别:DOS攻击方式的防范手段
防范原理:修改TCP服务器端的三次握手协议。在服务器收到SYN并返回SYN+ACK时,不分配专门的数据区,而是根据这个SYN计算出一个cookie值,在收到ACK时,服务器根据cookie值检查这个ACK的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。
参考回答
TCP是流式协议,所谓流,就是没有界限的一串数据。一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。
举个栗子:
假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下5种情况。
①服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包;
②服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包;
③服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这被称为TCP拆包;
④服务端分两次读取到了两个数据包,第一次读取到了D1包的部分内容,第二次读取到了D1包的剩余内容和D2包的整包,也被称为TCP拆包;
⑤如果滑动窗口很小,期间也有可能发生多次拆包问题。
参考回答
UDP仅提供了最基本的数据传输功能,对于可靠性并不关心,而是把这些问题抛给了UDP上层的应用层程序去处理。
最简单的方式是在应用层模仿传输层TCP的可靠性传输。
不考虑拥塞处理,可靠UDP的简单设计如下:
①添加seq/ack机制,确保数据发送到对端;
②添加发送和接收缓冲区,添加超时重传机制。
参考回答
HTTP Keep-Alive:
优:在http早期,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接。使用keep-alive可以在一次TCP连接中可以持续发送多份数据而不会断开连接,可以减少tcp连接建立次数、减少系统调用(socket的accept()和close()调用),以此提高服务器性能和效率。
缺:但是,keep-alive长时间的无效占用也会带来巨大损失,所以正确地设置keep-alive timeout时间非常重要。
TCP KEEPALIVE:
TCP连接建立之后,当连接很久没有数据报文传输时如何去确定对方还在线?
TCP协议通过一种巧妙的方式去解决这个问题,当超过一段时间之后,TCP自动发送一个数据为空的报文给对方,如果对方回应了这个报文,说明对方还在线,连接可以继续保持,如果对方没有报文返回,并且重试了多次之后则认为连接丢失,没有必要保持连接。
总结:TCP的keepalive机制和HTTP的keep-alive机制是说的完全不同的两个东西,tcp的keepalive是在ESTABLISH状态的时候,双方如何检测连接的可用行;而http的keep-alive说的是如何避免重复不断的TCP连接。
24.讲讲TCP 协议的延迟 ACK 和累计应答?参考回答
延迟ACK:TCP在接收到对方的报文后,并不会立即发送ack,而是等待一段时间后将ack和要发送的数据一块发送。当然等待时间不能超过对方的超时计数器时间。
累计应答:为了保证顺序性,每一个包都有一个ID(序号),数据包按照序号进行发送。而为了保证不丢包,对应发送的包都要进行应答,但不是一个个应答,而是会应答某个之前的ID,该模式称为累计应答。
参考回答
丢包预判:有些网络的丢包是有规律性的,例如每隔一段时间出现一次丢包,例如每次丢包都连续丢几个等,如果程序能自动发现这个规律(有些不明显),就可以针对性提前多发数据,减少重传时间、提高有效发包率。
…
参考回答
①端到端
端到端通信是针对传输层来说的,提供从发送端到接收端的数据通信。端到端的前提是已经建立了一条数据传输的链路,是在点到点的基础上的。
②点到点
点到点通信是针对数据链路层和网络层来说的,它只提供一台机器到另一台机器之间的通信,是直接相连的节点对等实体之间的通信。
参考回答
①输入地址,浏览器查找域名的IP地址
②浏览器向web服务器发送一个HTTP请求
③服务器响应并处理请求
④服务器返回一个HTTP响应
⑤浏览器显示HTML
⑥浏览器发送请求获取HTML中的资源
参考回答
①防盗链
将HTTP请求发给服务器后,服务器会提取Referer判断地址是否符合他的要求,符合就继续访问,否则会拦截,以此达到防盗链的效果。
②防止恶意请求
静态请求以.html结尾,动态请求以.shtml结尾,所有的动态请求必须Referer为我自己的网站。
③空Referer
定义:Referer头部的内容为空,或者一个HTTP请求中根本不包含Referer头部(一个请求并不是由链接触发产生的)。
空Referfer就表示一个HTTP请求并不是由某个链接触发产生的,即允许浏览器直接访问。
参考回答
GET: 从服务器获取资源,用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器。
POST:给服务器传输数据,主要功能与GET方法类似,但一般推荐使用POST方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
参考回答
①GET请求在URL中传送的参数是有长度限制的,而POST没有。
②GET比POST不安全,因为参数直接暴露在URL上。
③GET请求只能进行URL编码,而POST支持多种编码方式。
④GET在浏览器回退时是无害的,而POST会再次提交请求。
…
参考回答
http 1.0:
①默认不支持长连接,需要设置keep-alive参数。
http 1.1:
①默认长连接(keep-alive),http请求可以复用Tcp连接,但是同一时间只能对应一个http请求;
②增加了强缓存cache-control、协商缓存etag\if-none-match 是对http/1 缓存的优化。
http 2.0:
①多路复用,一个Tcp中多个http请求是并行的;
②二进制格式编码传输;
③服务端推送。
2XX:成功状态码(表示请求正常处理完毕)
4XX:客户端错误(表示服务器无法处理请求)
5XX:服务器错误状态码(表示服务器处理请求的时候出错)
参考回答
Cookie与Session都是会话的一种方式。服务端通过为用户创建Cookie/Session来获取信息。
区别:
①cookie数据存放在用户的浏览器上;session数据放在服务器上。
②cookie不是很安全,别人可以分析本地的COOKIE并进行COOKIE欺骗;考虑到安全应当使用session。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)