DNS(域名系统)的解析过程
- (1)首先判断本地缓存中是否存在该域名所对应的 IP地址的缓存。没有,就会向本地的 DNS服务器发送请求
- (2)本地的DNS首先会看是否存在对应的缓存,如果没有,就会向根域名服务器发起请求
- (3)获得负责顶级域名服务器的地址后,再向顶级域名服务器发送请求
- (4)获得负责的权威域名服务器的地址后,会向权威域名服务器发起请求
- (5)获得相应的IP地址后,就会返回给用户
用户向本地DNS服务器查询属于递归查询,本地的DNS服务器向各级域名服务器发起请求属于迭代查询。
递归查询指的是查询请求发出后,域名服务器代为向下一级域名服务器发出请求,最后向用户返回查询的最终结果。使用递归查询,用户只需要发出一次查询请求。
迭代查询指的是查询请求后,域名服务器返回单次查询的结果。下一级的查询由用户自己请求。使用迭代查询,用户需要发出多次的查询请求
缓存 -> 本地DNS服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器 -> 获得IP地址返回给用户
TCP的三次握手
- 第一次:客户端向服务器发送一个 SYN的请求报文段和一个随机序号seq,发送完毕后,进入 SYN_SEND状态
- 第二次:服务器接收到了客户端发送的 SYN 请求报文段,得知客户端想要建立连接,于是就返回一个 SYN ACK (确认字符 1:有效)的报文段,确认连接请求,另外还会服务器发送一个随机序号,发送完毕后,就进入了SYN_RECV状态
- 第三次:客户端收到了服务器的确认应答后,就进入了连接等待状态,向服务器发送一个ACK报文段,服务器收到后,也进入了连接状态。

SYN(同步序列编号)
为什么是三次握手?
为了防止服务器一直等待,然后浪费资源
出现这种情况
- 客户端发送连接建立请求,然后由于网络延迟,迟迟没有到达服务端
- 这时候由于超时重传,客户端由发送了一次请求建立连接,这次一切正常
- 当这个新的连接关闭后,之前的连接来了,服务端进行响应,然后等待客户端发送数据
- 但是由于客户端已经数据传输完毕了,就不理会这次,就造成了服务端一直等到客户端发送数据,造成数据浪费
TCP四次挥手
- 第一次挥手,客户端认为没有数据要再发送给服务器端,它就向服务器发送一个 FIN 报文段,申请断开客户端到服务器端的 连接。发送后客户端进入 FIN_WAIT_1 状态。
- 第二次挥手,服务器端接收到客户端释放连接的请求后,向客户端发送一个确认报文段,表示已经接收到了客户端释放连接的 请求,以后不再接收客户端发送过来的数据。但是因为连接是全双工的,所以此时,服务器端还可以向客户端发送数据。服务 器端进入 CLOSE_WAIT 状态。客户端收到确认后,进入 FIN_WAIT_2 状态。
- 第三次挥手,服务器端发送完所有数据后,向客户端发送 FIN 报文段,申请断开服务器端到客户端的连接。发送后进入 LAS T_ACK 状态。
- 第四次挥手,客户端接收到 FIN 请求后,向服务器端发送一个确认应答,并进入 TIME_WAIT 阶段。该阶段会持续一段时间, 这个时间为报文段在网络中的最大生存时间,如果该时间内服务端没有重发请求的话,客户端进入 CLOSED 的状态。如果收到 服务器的重发请求就重新发送确认报文段。服务器端收到客户端的确认报文段后就进入 CLOSED 状态,这样全双工的连接就被 释放了。

TCP 使用四次挥手的原因是因为 TCP 的连接是全双工的,所以需要双方分别释放到对方的连接,单独一方的连接释放,只代 表不能再向对方发送数据,连接处于的是半释放的状态。
最后一次挥手中,客户端会等待一段时间再关闭的原因,是为了防止发送给服务器的确认报文段丢失或者出错,从而导致服务器 端不能正常关闭。
TCP和UDP的区别
- 首先是名称上的区别,tcp叫做传输控制协议,udp叫做用户数据包协议
- tcp是面向连接的,udp是无连接的,简答来说就是发送数据前不需要建立连接
- tcp是可靠传输的,也就是在传输数据时tcp会保证数据无差错、不丢失、不重复、按需到达;udp是尽最大努力交付
- tcp面向字节流,udp面向报文
拥塞控制
TCP 的拥塞控制主要是根据网络中的拥塞情况来控制发送方数据的发送速率,如果网络处于拥塞的状态,发送方就减小发送的 速率,这样一方面是为了避免继续增加网络中的拥塞程度,另一方面也是为了避免网络拥塞可能造成的报文段丢失。
TCP 的拥塞控制主要使用了四个机制,分别是慢启动、拥塞避免、快速重传和快速恢复。
慢启动的基本思想是,因为在发送方刚开始发送数据的时候,并不知道网络中的拥塞程度,所以先以较低的速率发送,进行试探 ,每次收到一个确认报文,就将发动窗口的长度加一,这样每个 RTT (往返延时)时间后,发送窗口的长度就会加倍。当发送窗口的大小达 到一个阈值的时候就进入拥塞避免算法。
拥塞避免算法是为了避免可能发生的拥塞,将发送窗口的大小由每过一个 RTT 增长一倍,变为每过一个 RTT ,长度只加一。 这样将窗口的增长速率由指数增长,变为加法线性增长。
快速重传指的是,当发送方收到三个冗余的确认应答时,因为 TCP 使用的是累计确认的机制,所以很有可能是发生了报文段的 丢失,因此采用立即重传的机制,在定时器结束前发送所有已发送但还未接收到确认应答的报文段。
快速恢复是对快速重传的后续处理,因为网络中可能已经出现了拥塞情况,所以会将慢启动的阀值减小为原来的一半,然后将拥 塞窗口的值置为减半后的阀值,然后开始执行拥塞避免算法,使得拥塞窗口缓慢地加性增大。简单来理解就是,乘性减,加性增。
TCP 认为网络拥塞的主要依据是报文段的重传次数,它会根据网络中的拥塞程度,通过调整慢启动的阀值,然后交替使用上面四 种机制来达到拥塞控制的目的。
流量控制
TCP 提供了流量控制的服务,这个服务的主要目的是控制发送方的发送速率,保证接收方来得及接收。因为一旦发送的速率大 于接收方所能接收的速率,就会造成报文段的丢失。接收方主要是通过接收窗口来告诉发送方自己所能接收的大小,发送方根据 接收方的接收窗口的大小来调整发送窗口的大小,以此来达到控制发送速率的目的。
TCP是如何保证可靠传输的
校验和:
发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
确认应答+序列号(累计确认+seq)
超时重传
流量控制
拥塞控制
