蒋豆芽的面试题专栏(19/计算机网络之TCP挥手与握手)
-
TCP为什么要三次握手,能两次吗?⭐⭐⭐⭐⭐
-
TCP为什么要四次挥手,能三次吗?⭐⭐⭐⭐⭐
-
说说TCP三次握手的过程。⭐⭐⭐⭐⭐
-
说说TCP四次挥手的过程。⭐⭐⭐⭐⭐
-
为什么第四次挥手后,客户端需要等待2MSL? ⭐⭐⭐⭐⭐
-
什么是洪泛攻击?怎么避免?⭐⭐⭐⭐⭐
-
如何应对短连接、高并发的场景?⭐⭐⭐⭐⭐
-
说说TCP的可靠机制。⭐⭐⭐⭐⭐
-
请说说TCP的ACK机制,有什么好处?⭐⭐⭐⭐⭐
-
如何让UDP也变得可靠?⭐⭐⭐⭐⭐
-
什么是负载均衡?⭐⭐⭐⭐⭐
-
Session和cookie的区别?⭐⭐⭐⭐⭐
-
网络调试的工具?⭐⭐⭐⭐⭐
=========================================================================================================
- 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。
- 本专栏适合于互联网C++软件开发、嵌入式软件求职的学生或人士。
- 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
- 针对于非科班同学,建议学习本人专刊文章《蒋豆芽的秋招打怪之旅》,该专刊文章对每一个知识点进行了详细解析。
- 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
- 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。
=========================================================================================================
-
TCP为什么要三次握手,能两次吗?⭐⭐⭐⭐⭐
不能两次
假如只进行两次握手,客户端发送连接请求后,会等待服务器端的应答。但是会出现的问题是,假如客户端的SYN迟迟没有到达服务器端,此时客户端超时后,会重新发送一次连接,假如重发的这次服务器端收到了,且应答客户端了,连接建立了。
但是建立后,第一个SYN也到达服务端了,这时服务端会认为这是一个新连接,会再给客户端发送一个ACK,这个ACK当然会被客户端丢弃。但是此时服务器端已经为这个连接分配资源了,而且服务器端会一直维持着这个资源,会造成资源浪费。
两次握手的问题在于服务器端不知道SYN的有效性,所以如果是三次握手,服务器端会等待客户端的第三次握手,如果第三次握手迟迟不来,服务器端就会释放相关资源。
-
TCP为什么要四次挥手,能三次吗?⭐⭐⭐⭐⭐
不能三次。
第二次挥手和第三次挥手不能合并在一起,这是因为第二次挥手后,服务器端可能还在传输数据,需要等待数据传输完毕后再进行第三次挥手。
-
说说TCP三次握手的过程。⭐⭐⭐⭐⭐
三次握手:
- Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,等待Server确认。
- Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置1,ack=J+1,随机产生一个值seq=K,并将该数据包发给Client以确认连接请求。
- Client收到确认后,检测ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server。完成三次握手,随后Client与Server之间可以开始传输数据了。
-
说说TCP四次挥手的过程。⭐⭐⭐⭐⭐
四次挥手:
- 数据传输结束后,Client的应用进程发出连接释放报文段FIN,并停止发送数据,此时Client依然可以接收Server发送来的数据。
- Server接收到FIN后,发送一个ACK给Client,确认序号为收到的序号+1。
- 当Server没有数据要发送时,Server发送一个FIN报文,等待Client的确认。
- Client收到Server的FIN报文后,给Server发送一个ACK报文,确认序列号为收到的序号+1。此时Client进入TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。
-
为什么第四次挥手后,客户端需要等待2MSL? ⭐⭐⭐⭐⭐
这是为了保证客户端发送的最后一个ACK报文段能够到达服务器。如果客户端不等待2MSL,这个ACK报文段可能丢失,因而使得处在LAST-ACK状态的服务器收不到ACK报文段的确认,导致服务器无法正常关闭。而如果客户端等待2MSL,服务器就会超时重传FIN报文段,而客户端就能在2MSL时间内收到这个重传的FIN-ACK报文段。接着客户端重传一个确认,重新启动2MSL计时器。当服务器收到最后一个ACK后就可以正常关闭了。
2MSL的意义是,经过2MSL后,所有的报文都会消失,不会影响下一次连接。最后客户端和服务器端都能正常进入到CLOSED状态。
-
什么是洪泛攻击?怎么避免?⭐⭐⭐⭐⭐
A(攻击者)发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当这个服务器返回ACK以后,A不再进行确认,那这个连接就处在了一个挂起的状态,也就是半连接的意思,那么服务器收不到再确认的一个消息,还会重复发送ACK给A。
这样一来就会更加浪费服务器的资源。A就对服务器发送非法大量的这种TCP连接,由于每一个都没法完成握手的机制,所以它就会消耗服务器的内存最后可能导致服务器死机,就无法正常工作了。更进一步说,如果这些半连接的握手请求是恶意程序发出,并且持续不断,那么就会导致服务端较长时间内丧失服务功能——这样就形成了DoS攻击。这种攻击方式就称为SYN泛洪攻击。
避免方法:
最常用的一个手段就是优化主机系统设置。
(1)比如降低SYN timeout时间,使得主机尽快释放半连接的占用。
(2)或者采用SYN cookie设置,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃。Cookie是当浏览某网站时,由Web服务器置于硬盘上一个非常小的文本文件,用来记录用户ID,密码,浏览过的网页,停留时间等信息。当我们认为受到了攻击,合理的采用防huo墙(汉字竟然会被屏蔽,有点意思,只能打拼音了)设置等外部网络进行拦截。
(3)使用长连接。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
-
如何应对短连接、高并发的场景?⭐⭐⭐⭐⭐
-
针对于大量短连接同时高并发的情况: 最常用的一个手段就是优化主机系统设置。
(1)比如降低SYN timeout时间,使得主机尽快释放半连接的占用。
(2)或者采用,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃。Cookie是当浏览某网站时,由Web服务器置于硬盘上一个非常小的文本文件,用来记录用户ID,密码,浏览
-
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
- 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,总结出了高频面试考点(附有答案)共计309道,事半功倍,为大家春秋招助力。 - 本专栏内容分为七章:共计309道高频面试题(附有答案)