蒋豆芽的面试题专栏(19/计算机网络之TCP挥手与握手)

  1. TCP为什么要三次握手,能两次吗?⭐⭐⭐⭐⭐

  2. TCP为什么要四次挥手,能三次吗?⭐⭐⭐⭐⭐

  3. 说说TCP三次握手的过程。⭐⭐⭐⭐⭐

  4. 说说TCP四次挥手的过程。⭐⭐⭐⭐⭐

  5. 为什么第四次挥手后,客户端需要等待2MSL? ⭐⭐⭐⭐⭐

  6. 什么是洪泛攻击?怎么避免?⭐⭐⭐⭐⭐

  7. 如何应对短连接、高并发的场景?⭐⭐⭐⭐⭐

  8. 说说TCP的可靠机制。⭐⭐⭐⭐⭐

  9. 请说说TCP的ACK机制,有什么好处?⭐⭐⭐⭐⭐

  10. 如何让UDP也变得可靠?⭐⭐⭐⭐⭐

  11. 什么是负载均衡?⭐⭐⭐⭐⭐

  12. Session和cookie的区别?⭐⭐⭐⭐⭐

  13. 网络调试的工具?⭐⭐⭐⭐⭐

=========================================================================================================

  • 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。
  • 本专栏适合于互联网C++软件开发、嵌入式软件求职的学生或人士。
  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
  • 针对于非科班同学,建议学习本人专刊文章《蒋豆芽的秋招打怪之旅》,该专刊文章对每一个知识点进行了详细解析。
  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。

=========================================================================================================

  1. TCP为什么要三次握手,能两次吗?⭐⭐⭐⭐⭐

    不能两次

    假如只进行两次握手,客户端发送连接请求后,会等待服务器端的应答。但是会出现的问题是,假如客户端的SYN迟迟没有到达服务器端,此时客户端超时后,会重新发送一次连接,假如重发的这次服务器端收到了,且应答客户端了,连接建立了。

    但是建立后,第一个SYN也到达服务端了,这时服务端会认为这是一个新连接,会再给客户端发送一个ACK,这个ACK当然会被客户端丢弃。但是此时服务器端已经为这个连接分配资源了,而且服务器端会一直维持着这个资源,会造成资源浪费。

    两次握手的问题在于服务器端不知道SYN的有效性,所以如果是三次握手,服务器端会等待客户端的第三次握手,如果第三次握手迟迟不来,服务器端就会释放相关资源

  2. TCP为什么要四次挥手,能三次吗?⭐⭐⭐⭐⭐

    不能三次。

    第二次挥手和第三次挥手不能合并在一起,这是因为第二次挥手后,服务器端可能还在传输数据,需要等待数据传输完毕后再进行第三次挥手。

  3. 说说TCP三次握手的过程。⭐⭐⭐⭐⭐

    三次握手

    1. Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,等待Server确认。
    2. Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置1,ack=J+1,随机产生一个值seq=K,并将该数据包发给Client以确认连接请求。
    3. Client收到确认后,检测ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server。完成三次握手,随后Client与Server之间可以开始传输数据了。 图片说明
  4. 说说TCP四次挥手的过程。⭐⭐⭐⭐⭐

    四次挥手

    1. 数据传输结束后,Client的应用进程发出连接释放报文段FIN,并停止发送数据,此时Client依然可以接收Server发送来的数据。
    2. Server接收到FIN后,发送一个ACK给Client,确认序号为收到的序号+1。
    3. 当Server没有数据要发送时,Server发送一个FIN报文,等待Client的确认。
    4. Client收到Server的FIN报文后,给Server发送一个ACK报文,确认序列号为收到的序号+1。此时Client进入TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。
  5. 为什么第四次挥手后,客户端需要等待2MSL? ⭐⭐⭐⭐⭐

    这是为了保证客户端发送的最后一个ACK报文段能够到达服务器。如果客户端不等待2MSL,这个ACK报文段可能丢失,因而使得处在LAST-ACK状态的服务器收不到ACK报文段的确认,导致服务器无法正常关闭。而如果客户端等待2MSL,服务器就会超时重传FIN报文段,而客户端就能在2MSL时间内收到这个重传的FIN-ACK报文段。接着客户端重传一个确认,重新启动2MSL计时器。当服务器收到最后一个ACK后就可以正常关闭了。

    2MSL的意义是,经过2MSL后,所有的报文都会消失,不会影响下一次连接。最后客户端和服务器端都能正常进入到CLOSED状态。

  6. 什么是洪泛攻击?怎么避免?⭐⭐⭐⭐⭐

    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连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

  7. 如何应对短连接、高并发的场景?⭐⭐⭐⭐⭐

    1. 针对于大量短连接同时高并发的情况: 最常用的一个手段就是优化主机系统设置。

      (1)比如降低SYN timeout时间,使得主机尽快释放半连接的占用。

      (2)或者采用,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃。Cookie是当浏览某网站时,由Web服务器置于硬盘上一个非常小的文本文件,用来记录用户ID,密码,浏览

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

- 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,总结出了高频面试考点(附有答案)共计309道,事半功倍,为大家春秋招助力。 - 本专栏内容分为七章:共计309道高频面试题(附有答案)

全部评论
如何应对短连接、高并发的场景? 老哥,这个问题解析内容写成了避免dos攻击的了,望解答!!
1 回复 分享
发布于 2021-03-12 09:46
TCP可靠性:(1)序号、确认号、超时重传(快重传)机制:1. 序号:保证数据有序的交付给应用层,TCP为每一个字节都会添加一个序号,而TCP首部中序号字段填入报文的首序号。2. 确认号:期望接收到下一个报文的首序号,只要报文未接受就会疯狂提示 3. 重传:TCP每发一个报文段,就会重置一次计时器,超时未接收就会重传。快重传:只要接收到的报文比期望的大,就会发送冗余ACK,连续三次,就会重传不会再等超时。(2)流量控制(局部性):速度匹配--限制发送方的发送速度,只要窗口值大于0,就可以继续发送,无需等待,若窗口值为0,必须先解决之前丢失问题。(3)拥塞控制(全局性):防止过多的流量注入到网络中,相关算法:慢开始、拥塞避免、拥塞处理、快重传快恢复,上文已经提到了,但是写错一个东西:快恢复
1 回复 分享
发布于 2021-05-08 11:22
SYN cookie那里说的不对吧。
点赞 回复 分享
发布于 2021-03-16 23:26
多多点赞,会变好看,多多留言,会变有钱,大家一起来讨论
点赞 回复 分享
发布于 2021-03-10 12:45

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务