每个程序员需要必须知道的知识点,一篇比较全面复习的文章(2)

原创不易,如果需要转载请附上本连接

计算机网络

1. 三次握手和四次挥手

每个程序员需要必须知道的知识点,一篇比较全面复习的文章(2)

  1. 建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

  2. 服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

  3. 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

每个程序员需要必须知道的知识点,一篇比较全面复习的文章(2)

  1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其***为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

  2. 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的***seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

  3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

  4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的***为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

  5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的***是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

  6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”
TCP的三次握手与四次挥手理解及面试题(很全面)


2. TIME_CLOSE 和 TIME_WAIT 的状态和意义

TIME_CLOSE 表示接受到了对方申请关闭连接的请求,但是这个时候可能你的应用层还有事情需要处理。
TIME_WAIT 会默认等待2MSL时间后,才最终进入CLOSED状态。

tcp协议close_wait与time_wait状态含义


3. TCP 如何保证可靠传输

  1. 确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。

  2. 数据校验

  3. 数据合理分片和排序:TCP会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。

  4. 流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。

  5. 拥塞控制:当网络拥塞时,减少数据的发送。

TCP 协议如何保证可靠传输


4. 流量控制和拥塞控制

流量控制

  1. 滑动窗口
    数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失。利用滑动窗口机制可以很方便地在TCP连接上对发送方的流量进行控制。
  2. 延迟ACK
    如果TCP对每个数据包都发送一个ACK确认,那么只是一个单独的数据包为了发送一个ACK代价比较高,所以TCP会延迟一段时间,如果这段时间内有数据发送到对端,则捎带发送ACK,如果在延迟ACK定时器触发时候,发现ACK尚未发送,则立即单独发送。

拥塞控制

  1. 慢启动
  2. 拥塞避免
  3. 快重传
  4. 快恢复

快速了解TCP的流量控制与拥塞控制


5. CRC 循环校验的算法

6. 如何使用 UDP 实现可靠传输

7. 为什么不能是两次握手

8. SYN FLOOD 是什么

9. HTTPs 和 HTTP 的区别

10. HTTPS 的原理,客户端为什么信任第三方证书

11. HTTP 方法了解哪些

12. HTTP 异常状态码知道哪些

13. HTTP 长连接短连接使用场景是什么

14. Arp 攻击

15. NAT 原理

16. DNS 服务器与提供内容的服务器的区别

17. 怎么实现 DNS 劫持

18. 对称加密和非对称的区别,非对称加密有哪些

19. AES 的过程

20. 安全攻击有哪些

21. DDOS 有哪些,如何防范