网络编程六 - 网络编程相关面试题汇总,nginx 运行原理
1、说一下 TCP 的三次握手过程
参加下图
2、为什么 TCP 握手需要三次?
TCP 是可靠的传输控制协议,三次握手能保证数据可靠传输又能提高传输效率。
如果 TCP 的握手是两次:
<1>如果 client 发给 server 的 SYN 报文因为网络原因,延迟发送。由于 client 没有收到 server 对 SYN 的确认报文,会重发 SYN 报文,服务器和回复 ACK,连接建立。数据发送完毕,这条连接被正常关闭。这时,延迟的 SYN 报文发到了 server,server 误以为这是 client 重新发送的同步报文,又回复了一个 ACK,和 client 建立了连接。
<2>如果 server 给 client 发送的 ACK 报文因为网络原因,报文被丢弃,此时 server 认为已经建立好连接,但是 client 没有收到确认报文,认为没有建立好连接。client 会重发 SYN 报文,此时 server 已经处于就绪状态,认为已经建立好连接。
如果 TCP 的握手是四次:
–1.client 给 server 发送 SYN 同步报文;
–2.server 收到 SYN 后,给 client 回复 ACK 确认报文;
–3.server 给 client 发送 SYN 同步报文;
–4.client 给 server 发送 ACK 确认报文。
第 2.3 步之间,server 和 client 没有任何的数据交互,分开发送相当于多发了一次 TCP 报文段,SYN 和 ACK 标识只是 TCP 报头的一个标识位。很明显,这两步可以合并,从而提高连接的速度和效率。
3、解释一下 TCP 的四次挥手
![](https://img-blog.csdnimg.cn/20200119162923435.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow
_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2IzNzk2ODUzOTc=,size_16,color_FFFFFF,t_70)
4、为什么要有 TIME_WAIT 状态?
TIME_WAIT 状态存在有两个原因。
<1>可靠终止 TCP 连接。如果最后一个 ACK 报文因为网络原因被丢弃,此时 server 因为没有收到 ACK 而超时重传 FIN 报文,处于 TIME_WAIT 状态的 client 可以继续对 FIN 报文做回复,向 server 发送 ACK 报文。
<2>保证让迟来的 TCP 报文段有足够的时间被识别和丢弃。连接结束了,网络中的延迟报文也应该被丢弃掉,以免影响立刻建立的新连接。
5、为什么 TCP 的挥手需要四次?
TCP 是全双工的连接,必须两端同时关闭连接,连接才算真正关闭。
如果一方已经准备关闭写,但是它还可以读另一方发送的数据。发送给 FIN 结束报文给对方对方收到后,回复 ACK 报文。当这方也已经写完了准备关闭,发送 FIN 报文,对方回复 ACK。两端都关闭,TCP 连接正常关闭。
6、DDOS 攻击
DDOS 攻击利用合理的服务请求占用过多的服务资源,使正常用户的请求无法得到相应。
常见的 DDOS 攻击有计算机网络带宽攻击和连通性攻击。
带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。
连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。
评论