网络协议(二)
网络协议(二)
DNS 查询服务器的基本流程是什么?DNS 劫持是什么?
DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器
DNS 查询的方式有两种:
- 递归查询:如果 A 请求 B,那么 B 作为请求的接收者一定要给 A 想要的答案
- 迭代查询:如果接收者 B 没有请求者 A 所需要的准确内容,接收者 B 将告诉请求者 A,如何去获得这个内容,但是自己并不去发出请求
查询过程
解析域名的过程如下:
首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表
若没有命中,则继续搜索操作系统的 DNS 缓存
若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的 DNS 缓存,查找成功则返回结果
若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询
首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器
- 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址
- 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址
- 本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起
至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起
什么是DNS劫持?
DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。
预防DNS劫持?
修改默认的路由器登陆账号与密码
Cookie 和 Session 的关系和区别是什么?
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
(5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
简述 HTTPS 的加密与认证过程
https加密过程
服务端证书通过CA机构签名认证的过程如下
RestFul 是什么?RestFul 请求的 URL 有什么特点?
REST(Resource Representational State Transfer【表现层状态转化】)。如果一个架构符合REST原则,就称为RESTful架构,是一种面向资源的软件架构风格
REST最大的几个特点为:资源、统一接口、URI和无状态。
资源:网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。资源总要通过某种载体反应其内容,文本可以用txt格式表现,也可以用HTML格式、XML格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现;JSON是现在最常用的资源表示格式。
网络上的实体!
统一接口:数据的元操作,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。
通过HTTP方法来确定并完成对实体的操作!
URI:可以用一个URI(Universal Resource Identifier,统一资源定位符)指向资源,即每个URI都对应一个特定的资源。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或识别符。一般的,每个资源至少有一个URI与之对应,最典型的URI即URL。
通过URI来识别不同的资源(实体)!
无状态:所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。
WebSocket是有状态的
通过URI对资源(实体)操作时,无状态,没有上下文的影响!
Resultful特点:
1.使用URL描述资源
2.使用HTTP方法描述行为。使用HTTP状态码来表示不同的结果
3.使用json交互数据,传统模式使用的是键值对形式
4.RESTful只是一种风格,并不是强制的标准。
RestFul 与 RPC 的区别是什么?RestFul 的优点在哪里?
RESTFUL 与RPC的区别
1.restfull和rpc都是client/server模式的,都是在 Server端 把一个个函数封装成接口暴露出去
2.restful使用http协议实现,而rpc则不一定使用http,一般比较常用的是tcp, RPC 可以获得更好的性能(省去了 HTTP 报头等一系列东西),TCP更加高效,而HTTP在实际应用中更加的灵活。
3.从使用上来说:Http接口只关注服务提供方(服务端),对于客户端怎么调用,调用方式怎样并不关心;而RPC服务则需要客户端接口与服务端保持一致,服务端提供一个方法,客户端通过接口直接发起调用。
优点
RPC的优势:
- 是查找的精确性,快速性,短路径,和确定性,因为属于内网查询,独立的注册中心,所以查找的速度更快。
- 而且由于做了精简和优化,删去了RESTful方式里面很多多余的信息,比如Header,而且做了压缩和序列化,通过二进制方式传输,传输的内容更少,传输的速度也更快。
- 环节和流程更少,因为RESTful需要经过路由,负载均衡,网关,防火墙和一系列的身份识别和校验,就像大楼内来了个不认识的人,楼管大叔肯定要查你的身份证等等信息核实你的信息。 而且RPC就省去了这些环节,就像你天天出来进去,楼管大妈早就对你很熟了,不需要每次核实你的信息,RPC省去了很多环节。
RESTful的优势:
- 通用性更好,RESTful可以供任何接入互联网的终端调用,各种平台,各种终端都可以用RESTful传输和交换数据,而且有一套标准和规范的传输格式,所以格式更加标准化和通用化。
- 安全性更高,因为属于连接外围和内网的通道,所以会经过一些列的安全和身份校验。
- 移植性更好,从一个服务器迁移到另一个服务器,从一个节点迁移到另一个节点,从一个架构移植到另一种架构,都可以轻松完成。
RPC的应用场景:当你的框架和语言种类也比较多,内部之间调用量非常大的时候,RPC是最佳的选择。RPC更多是内网之间的数据传输,一般是部署在服务层的分布式系统里面,或者微服务系统。有服务治理,服务限流、服务降级、服务熔断、服务监控等等,类似于大楼里面配了治安处,物业处、后勤处、监控中心等。
RESTful的应用场景:数据更多是公网上的传输,比如服务端API供 IOS、Android、PC等客户端调用, API供第三方合作方调用等 。
TCP 挥手时出现大量 CLOSE_WAIT 或 TIME_WAIT 怎么解决?
TIME_WAIT状态
主动断开方处于TIME_WAIT状态时,源端口无法使用
端口最大数是65535,因此如果频繁主动断开TCP连接,将很快耗尽端口号。一旦达到了上限,则新的请求就无法被处理,接着就是大量Too Many Open Files异常,然后tomcat、nginx、apache崩溃
如何解决TIME_WAIT问题
解决TIME_WAIT大量出现
最核心的思想,就是打开系统的TIME_WAIT重用和快速回收
net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME_WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME_WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
CLOSE_WAIT状态
如果出现了CLOSE_WAIT过多的状态
1.在对方关闭连接后,自身程序里没有检测 -(被动方的角度)
2.本身忘了需要关闭连接,于是整个资源就一直被程序占用着。-(主动方的角度)
如何解决CLOSE_WAIT问题
关闭正在运行的程序
尽快修改程序bug,然后测试提交到线上服务器
什么是跨域,什么情况下会发生跨域请求?
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。
同源策略:所谓同源是指:协议,域名,端口均相同。即便两个不同的域名指向同一个ip地址,也非同源。
http://www.123.com/index.html调用 http://www.123.com/server.php (非跨域)
http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)
http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)
http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)
http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)
请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。
简述对称与非对称加密的概念
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)
常见的对称加密有DES、三 重DES、AES等
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)
- 只能私钥加密公钥解密,或者公钥加密私钥解密;
- 一方保留密钥,一方公开密钥;不能同时公开,具体公开哪方需要根据实际情况来决定
非对称加密算法常见有:RSA算法(3个人名简写)和diffie - hellman算法(迪菲·赫尔曼算法)
HTTP 中 GET 和 POST 区别
1、GET 方法:从指定的资源请求数据。
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
例如:https://www.xxxx.com/xxx.asp? name1=value1&name2=value2
而需要注意的是:GET方法是可见的,而POST方法是在HTTP消息主体中发出的,具有不可见性。下面是一些GET的注释:
请求可被缓存。
请求保留在浏览器历史记录中。
请求可被收藏为书签。
请求不应在处理敏感数据时使用
请求有长度限制
请求只应当用于取回数据
GET—>application/x-www-form-urlencoded 。
GET—->只允许 ASCII 字符。
2、POST 方法:向指定的资源提交要被处理的数据
请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
GET方法是可见的,而POST方法是在HTTP消息主体中发出的,具有不可见性。下面是一些 POST的注释:
请求不会被缓存
请求不会保留在浏览器历史记录中
不能被收藏为书签
请求对数据长度没有要求
POST—>application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
POST—> 没有限制。也允许二进制数据。
TCP 的 keepalive 了解吗?说一说它和 HTTP 的 keepalive 的区别?
TCP Keepalive
链接建立之后,如果应用程序或者上层协议一直不发送数据,或者隔很长时间才发送一次数据,当链接很久没有数据报文传输时如何去确定对方还在线,到底是掉线了还是确实没有数据传输,链接还需不需要保持,这种情况在TCP协议设计中是需要考虑到的。
TCP协议通过一种巧妙的方式去解决这个问题,当超过一段时间之后,TCP自动发送一个数据为空的报文给对方,如果对方回应了这个报文,说明对方还在线,链接可以继续保持,如果对方没有报文返回,并且重试了多次之后则认为链接丢失,没有必要保持链接。
TCP Keepalive HTTP Keep-Alive 的关系
HTTP协议的Keep-Alive意图在于TCP连接复用,同一个连接上串行方式传递请求-响应数据;TCP的Keepalive机制意图在于探测连接的对端是否存活。
简述常见的 HTTP 状态码的含义(301,304,401,403)
200 OK :服务器成功返回用户请求的数据。
201 CREATED :用户新建或修改数据成功。
202 Accepted: 请求已被接受,但尚未处理。
301 Moved Permanently: 永久重定向。
304 Not Modified: 请求资源与本地缓存相同,未修改。
307/302 Temporary Redirect:临时重定向。不会从POST变成GET。
400 INVALID REQUEST :用户发出的请求有错误。
401 Unauthorized :用户没有权限。
403 Forbidden :访问被禁止。
404 NOT FOUND :请求针对的是不存在的记录。
406 Not Acceptable :用户请求的的格式不正确。
500 INTERNAL SERVER ERROR :服务器发生错误。
503 Service Unavailable:服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。
简述 TCP 的 TIME_WAIT 和 CLOSE_WAIT
TIME_WAIT-主动关闭
- TIME_WAIT 是主动关闭链接时形成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。 由于TIME_WAIT 的时间会非常长,因此server端应尽量减少主动关闭连接
CLOSE_WAIT-被动关闭
- CLOSE_WAIT是被动关闭连接是形成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,因此进入CLOSE_WAIT状态。但如果服务器端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在很多CLOSE_WAIT状态的连接。此时,可能是系统忙于处理读、写操作,而未将已收到FIN的连接,进行close。此时,recv/read已收到FIN的连接socket,会返回0。
简述 TCP 滑动窗口以及重传机制
滑动窗口
窗口的实现实际上是操作系统开辟的一个缓存空间,发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。
通常窗口的大小是由接收方的决定的。
发送方发送的数据大小不能超过接收方的窗口大小,否则接收方就无法正常接收到数据。不是完全相等,接收窗口的大小是约等于发送窗口的大小的
重传机制
当某一段报文丢失了,图中(1001 - 2000)数据段丢失了,接受方没有接收到该数据段,则会一直的给发送方发送ACK(下一个是1001),如果发送端主机连续收到同样一个(下一个1001),就会将对应的数据(1001 - 2000)重新发送。
这时候如果接收端收到1001之后,再次返回的就是ACK(8001)了。之前的(2001 - 8000)都接收到了接受缓存区。
这种机制被称为“高速重发机制”(快速重传)
简述 DDOS 攻击原理,如何防范它?
整个过程可分为:
- 扫描大量主机以寻找可入侵主机目标;
- 有安全漏洞的主机并获取控制权;
- 入侵主机中安装攻击程序;
- 用己入侵主机继续进行扫描和入侵。
DDoS攻击防御方法
1. 过滤不必要的服务和端口:可以使用Inexpress、Express、Forwarding等工具来过滤不必要的服务和端口,即在路由器上过滤假IP。比如Cisco公司的CEF(Cisco Express Forwarding)可以针对封包Source IP和Routing Table做比较,并加以过滤。只开放服务端口成为目前很多服务器的流行做法,例如WWW服务器那么只开放80而将其他所有端口关闭或在防火墙上做阻止策略。
2. 异常流量的清洗过滤:通过DDOS硬件防火墙对异常流量的清洗过滤,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判断外来访问流量是否正常,进一步将异常流量禁止过滤。单台负载每秒可防御800-927万个syn攻击包。
3. 分布式集群防御:这是目前网络安全界防御大规模DDOS攻击的最有效办法。分布式集群防御的特点是在每个节点服务器配置多个IP地址(负载均衡),并且每个节点能承受不低于10G的DDOS攻击,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护角度去影响企业的安全执行决策。
4. 高防智能DNS解析:高智能DNS解析系统与DDOS防御系统的完美结合,为企业提供对抗新兴安全威胁的超级检测功能。它颠覆了传统一个域名对应一个镜像的做法,智能根据用户的上网路线将DNS解析请求解析到用户所属网络的服务器。同时智能DNS解析系统还有宕机检测功能,随时可将瘫痪的服务器IP智能更换成正常服务器IP,为企业的网络保持一个永不宕机的服务状态。
5.带宽资源要充足:带宽直接决定了抗DDOS攻击的能力,至少要选择100M带宽的,越多越好。
6.服务器的硬件配置:在带宽以及流量有充分保障的前提下,服务器的硬件配置必须得跟上。当然,主要的因素还是CPU和内存
7.搭建CDN:将内容缓存在终端用户附近
简述 OSI 七层模型,TCP,IP 属于哪一层?
TCP,IP 属于传输层
OSI七层模型 | TCP/IP模型 | 功能 | TCP/IP协议族 |
---|---|---|---|
应用层 | 应用层 | 直接向用户提供服务,完成用户希望完成的各种网络操作 | HTTP,FTP,TFTP,DNS,Telnet,SMTP |
表示层 | 进行数据编解码,数据加解密和格式转换 | 没有协议 | |
会话层 | 解除或建立与别的节点的联系,组织和协调两个会话进程之间的通信,并对数据交换进行管理 | 没有协议 | |
传输层 | 传输层 | 向两台主机中进程之间的通信提供通用的数据传输服务,实现端到端连接 | TCP,UDP |
网络层 | 网络层 | 为分组交换网上的不同主机提供通信服务,也就是进行IP选址和路由选择 | IP,ICMP,RIP,IGMP |
数据链路层 | 数据链路层 | 在物理层提供的比特流基础上,通过差错控制、流量控制的方法,将由差错的物理线路变为无差错的、能可靠传输数据帧的数据链路 | SLIP,CSLIP,PPP,ARP,RARP, |
物理层 | 物理层 | 利用传输介质为数据链路层提供物理连接,实现相邻计算机节点之间比特流的透明传输 | IEEE802.1 A,IEEE802.2到IEEE802.11 |
题目答案均为转载,题目先后顺序按各大厂总出题次数排列!