计网重点问题

一、DNS

在这里插入图片描述在这里插入图片描述

1.1 什么是递归查询?

主机向本地域名服务器的查询一般都采用递归查询方式,所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份向其它根域名服务器继续发出查询请求报文,而不是让主机自己进行下一步的查询,因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

1.2 什么是迭代查询?

本地域名服务器根域名服务器的查询通常是采用迭代查询(iterative query)方式。迭代查询的特点是这样的:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询 (而不是替本地域名服务器进行后续的查询) 。根域名服务器通常是把自己知道的顶级域名服务器的 IP 地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的 IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询,本地域名服务器就这样进行迭代查询。最后,知道了所要解析的域名的IP地址,然后把这个结果返回给发起查询的主机。当然,本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。

1.3 DNS的查询流程

1.在浏览器中输入www.baidu.com域名,操作系统会先检查自己本地的hosts文件是否有这个域名的映射关系,如果有,就返回相对应的IP地址映射,完成域名解析;
2.如果hosts文件中没有,则查询本地DNS的缓存,如果有该域名的映射关系,则返回IP地址完成域名解析;
3.如果本地DNS的缓存中没有该域名的映射关系,主机则向本地域名服务器进行递归查询;
4.之后本地域名服务器会向根域名服务器发起迭代查询,根域名服务器会告诉本地域名服务器下一次要去查询的顶级域名服务器的IP地址;
5.本地域名服务器向顶级域名服务器发起查询请求,顶级域名服务器会告诉本地域名服务器下一次要去查找的权限域名服务器的IP地址;
6.本地域名服务器向权限域名服务器发起查询请求,权限域名服务器告诉本地域名服务器所查询主机的IP地址;
7.本地域名服务器告诉主机www.baidu.com所对应的IP地址。
注: 权限域名服务器中保存了它所管辖区中的所有主机的域名到IP地址的映射

二、TCP和UDP

2.1 三次握手

在这里插入图片描述

  • 第一次握手:客户端向服务端发一个 SYN 报文,并指明客户端的初始化序列号(ISN)x。此时客户端处于 SYN_SENT 状态。TCP报文段的首部同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号;

  • 第二次握手:当服务端收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号(ISN)y。同时会把客户端的 ISN + 1 作为ack字段的值,表示已经收到了客户端的 SYN,此时服务器处于 SYN_RCVD 的状态。在确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y;

  • 第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,同样将服务端的 ISN + 1 作为ack字段的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,表明双方已建立起了连接;

1. 为什么要三次握手?
只有经过三次握手客户端或服务端才能保证自己和对方的接受和发送能力正常。

2. 三次握手可以携带数据吗?
第一、二次不可以(SYN报文不可以携带数据),第三次可以。第一次握手不可以携带数据,其中一个简单的原因就是会让服务器更加容易受到攻击了(客户端—>服务器)第二次握手时由于服务器向客户端方向的连接还尚未建立,所以不可以携带数据(服务器—>客户端),此次握手不存在遭受攻击的问题。第三次握手时,此时客户端已经处于 ESTABLISHED 状态。对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以可以在报文段中携带数据。

2.2 四次挥手

在这里插入图片描述

  • 第一次挥手:客户端发送一个 FIN 报文(FIN=1),并指定一个初始化序列号 (ISN)u 。此时客户端处于 FIN_WAIT1 状态,停止发送数据,主动关闭TCP连接,等待服务端的确认;
  • 第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,并指定一个初始化序列号 (ISN)v 且把客户端的初始化序列号 u +1 作为 ACK 报文的ack字段的值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态,TCP处于半关闭状态。当客户端收到服务端的确认报文后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段;
  • 第三次挥手:如果服务端的数据传送完毕后需要断开连接,会向客户端发给 FIN 报文(FIN=1),并指定一个初始化序列号 (ISN)w 且把客户端的初始化序列号 u +1 作为ack值。此时服务端处于 LAST_ACK 的状态(FIN=1,ACK=1,序号seq=w,确认号ack=u+1);
  • 第四次挥手:客户端收到 服务端的FIN 之后,同样会发送一个 ACK 报文作为应答,且把服务端的初始化序列号值 w+1 作为 ACK 报文的的ack字段的值,此时客户端处于 TIME_WAIT 状态。需要等待一段时间以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,当服务端收到 ACK 报文之后,就会关闭连接,处于 CLOSED 状态。客户端需要等待2MSL后,才进入CLOSED状态。

1. 客户端为什么要等待2MSL?

  • 客户端在发送第四次挥手的确认报文后,再经过2MSL,可使本次TCP连接中的所有报文段在网络中消失,不会出现在下一个TCP连接中
  • 保证客户端发送的最后一个ACK报文段能够到达服务端(如果丢失的话会进行超时重传)

2.3 TCP和UDP的区别

  • TCP是面向连接的,UDP面向无连接
  • TCP提供可靠的交付服务,保证数据无差错、不丢失、不重复且按序到达,UDP尽最大努力交付
  • TCP对系统资源的要求高,UDP对系统资源的要求少
  • TCP是点对点的,UDP支持一对一、一对多、多对多的交互通信

2.4 TCP如何保证可靠传输

  • 校验和:发送端和接收端会分别计算数据的校验和,如果两者不一致,则说明数据在传输过程中出现了差错,TCP将丢弃和不确认此报文段
  • 序列号:TCP会对每一个发送的字节进行编号,接收方接到数据后,会对发送方发送确认应答(ACK报文),并且这个ACK报文中带有相应的确认编号,告诉发送方,下一次发送的数据从哪一个编号多少开始发送。如果发送方发送重复的数据,接收端也可以通过序列判断,直接将数据丢弃。如果如果发送方在发送数据后一 段时间内没有收到确认报文段就会进行超时重传;
  • 超时重传:如果发送方在发送数据后一段时间内没有收到确认报文段,那么发送方就会重新发送数据;
  • 流量控制:如果发送端发送数据太快,接收端来不及接收就会出现丢包问题。为了解决这个问题, TCP协议利用了滑动窗口进行了流量控制。在TCP报文段首部有一个16位大小的字段,该字段代表接收端接收数据缓冲区的剩余大小。接收端会在收到数据包后发送ACK报文时,将自己的窗口大小填入ACK中,发送方会根据ACK报文中的窗口大小控制发送速度。如果窗口大小为零,发送方会停止发送数据;
  • 拥塞控制:如果网络出现拥塞,则会产生丢包等问题,这时如果发送方会将丢失的数据包继续重传,网络拥塞会更加严重,所以在网络出现拥塞时应注意控制发送方发送的数据大小,降低整个网络的拥塞程度。拥塞控制主要有四部分组成:慢开始、拥塞避免、快重传、快恢复
    在这里插入图片描述
  1. 慢开始:为了避免一开始发送大量的数据而产生网络阻塞,会先将cwnd(拥塞窗口)初始化为1, 每收到一个报文段的ACK报文后,cnwd就+1,所以cnwd成指数形式快速增长,因此每经过一个传输轮次,cnwd就加倍;
  2. 拥塞避免:当cwnd>=ssthresh(慢开始门限值)时, 进入到拥塞避免阶段,每经过一个传输轮次cnwd加1。但是当网络出现超时时,会将门限值ssthresh设为出现超时cwnd的一半,cwnd重新设置为1,然后重新执行慢开始算法;
  3. 快重传:有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞。如果发送方迟迟收不到确认,就会产生超时,就会误认为网络发生了拥塞。这就导致发送方错误的启动慢开始,把拥塞窗口cwnd又设置为1,因而降低了传输效率。快重传算法规定:发送发只要一连收到3个连续的对某个报文段的重复确认就应当立即对该报文段进行重传,这样就不会出现超时现象,发送方也不会误认为出现了网络拥塞;
    在这里插入图片描述
  4. 快恢复:当发送方收到三个连续的重复确认后,会执行快重传算法并且知道只是丢失了个别报文段,于是不启动慢开始算法,而是执行快恢复算法。快恢复会将门限值ssthresh设置为发生快重传时的cwnd数量的一半,而cwnd不是设置为1而是设置为门限值ssthresh,之后开始执行拥塞避免算法。

注:发送窗口一般是滑动窗口和拥塞窗口的最小值

三、HTTP和HTTPS

3.1 什么是对称加密和非对称加密

  • 对称加密:加密和解密使用同一把密钥,优点是运算速度快,缺点是如何安全将密钥传输给另一方。常见的对称加密算法有DES、AES等

  • 非对称加密:加密和解密使用不同的密钥,一把公开的公钥,一把私有的私钥。公钥加密的信息只有私钥才能解密,私钥加密的信息只有公钥才能解密。优点解决了对称加密中存在的安全问题。缺点是运算速度较慢。常见的非对称加密算法有RSA、DSA、 ECC等

3.2 HTTPS的加密流程

  1. 客户端向服务端发起第一次握手请求, 告诉服务端客户端所支持的SSL协议的版本、加密算法及密钥长度等信息并且请求服务器的公钥;
  2. 服务端将自己的公钥发给数字证书认证机构,数字证书认证机构利用自己的私钥对服务器的公钥进行数字签名,并给服务器颁发数字证书;
  3. 服务端将证书发给客户端;
  4. 客户端利用数字认证机构的公钥,验证数字证书上的数字签名,确认服务器公钥的真实性;
  5. 客户端使用服务端的公钥加密自己生成的对称密钥,发给服务端;
  6. 服务端收到加密信息后利用私钥解密信息,获得客户端发来的对称密钥;
  7. 之后通信双方可用对称密钥来加密和解密信息。

3.3 HTTP和HTTPS的区别

  1. HTTP是明文传输,而HTTPS在TCP 和 HTTP 网络层之间加⼊了 SSL/TLS 安全协议,使得报文能够加密传输,保证数据在传输过程中的机密性,防止被窃听
  2. HTTP 连接的建⽴相对简单, 在TCP 的三次握⼿之后便可进行 HTTP 的报⽂传输。而 HTTPS 在 TCP 三次握⼿之后,还需进行 SSL/TLS 的握手过程,才可进行加密报文的传输。
  3. HTTP使用80端口,HTTPS使用443端口
  4. HTTPS 协议需要向 CA(数字证书认证机构)申请数字证书,来保证服务器的身份是可信的(服务器公钥的可信度)。

Guess you like

Origin blog.csdn.net/qq_40714246/article/details/120637090