写点什么

网络编程六 - 网络编程相关面试题汇总,nginx 运行原理

用户头像
极客good
关注
发布于: 刚刚

9、如果要你来设计一个QQ,在网络协议上你会考虑如何设计?



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


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


_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 攻击有计算机网络带宽攻击和连通性攻击。


带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。


连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。

7、SYN 洪水攻击

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
网络编程六-网络编程相关面试题汇总,nginx运行原理