当前位置: 首页 > news >正文

高级java每日一道面试题-2024年8月07日-网络篇-你对TCP的三次握手了解多少?

如果有遗漏,评论区告诉我进行补充

面试官: 你对TCP的三次握手了解多少?

我回答:

TCP(Transmission Control Protocol)的三次握手是TCP建立连接的过程,它是TCP/IP协议族中一个关键的概念。三次握手确保了双方之间的连接是双向的,并且能够正常发送和接收数据。下面是详细的三次握手过程:

第一次握手(SYN=1, seq=x)

  1. 客户端发送SYN标志的数据包:客户端(主动发起连接的一方)首先发送一个SYN(Synchronize)标志位被设置的TCP数据包到服务器。这个数据包包含了客户端的初始序号(ISN, Initial Sequence Number),这个序号用于之后的数据包确认和排序。

第二次握手(SYN=1, ACK=1, seq=y, ack=x+1)

  1. 服务器响应SYN-ACK:服务器在接收到客户端的SYN数据包后,如果同意建立连接,就会发送一个SYN-ACK(Synchronize-Acknowledge)数据包作为响应。这个数据包包含了服务器的初始序号,并且确认了客户端的序号(ACK, Acknowledgment)。此时,服务器进入SYN_RECEIVED状态。

第三次握手(ACK=1, seq=x+1, ack=y+1)

  1. 客户端发送ACK:客户端接收到服务器的SYN-ACK数据包后,发送一个ACK数据包确认服务器的序号。这个数据包不包含数据,仅仅是一个确认,表明客户端已经接收到服务器的SYN-ACK,现在双方都可以开始发送数据了。此时,客户端和服务器都进入ESTABLISHED状态,连接建立完成。

为什么需要三次握手?

三次握手的主要目的是确保双方都能够正常接收和发送数据,以及同步序列号。如果省略了任何一步,可能会导致以下问题:

  • 确认丢失:如果第二次或第三次握手的ACK数据包丢失,连接一方可能认为连接没有建立成功,而另一方可能已经准备好接收数据,这会导致数据丢失或乱序。

  • 同步序列号:序列号的同步是为了保证数据包的正确排序和确认。如果序列号不同步,接收方可能无法正确地组装数据流。

关于三次握手的额外说明

  • 超时重传:如果在三次握手过程中任何一个数据包没有得到响应,发送方会重传这个数据包,直到收到响应或达到最大重传次数。

  • SYN Flood攻击:三次握手过程可能被恶意利用,如SYN Flood攻击,攻击者发送大量的SYN数据包给服务器,但不发送后续的ACK,导致服务器的半开放连接积压,消耗服务器资源,最终可能导致服务器无法响应合法的连接请求。

总结

TCP的三次握手是TCP/IP协议中建立可靠连接的重要机制。通过三次握手,可以确保客户端和服务器之间的通信能力正常,避免旧连接和重复连接的影响,同步双方的初始序列号,从而保证后续数据传输的可靠性和有序性。在Java高级面试中,对TCP三次握手的深入理解是展现面试者网络基础知识扎实程度的重要方面。

http://www.lryc.cn/news/416897.html

相关文章:

  • vite.config.ts中proxy的rewrite理解
  • 大数据环境下用户数据隐私安全防护系统的设计与实现(论文+源码)_kaic
  • 基于springboot+vue+uniapp的“口腔助手”小程序
  • 算法刷题之链表
  • C# 设计模式之适配器模式
  • BFS实现迷宫最短路径
  • Linux IPC解析:匿名命名管道与共享内存
  • Codeforces Round 964 (Div. 4) A~G
  • 单体应用提高性能和处理高并发-使用缓存
  • ollama教程——使用LangChain调用Ollama接口实现ReAct
  • 【Bug分析】Keil报错:error: #18:expected a “)“问题解决
  • MAC上设置快捷打开终端以及如何运用剪切快捷键
  • linux docker安装 gitlab后忘记root密码如何找回
  • C语言典型例题27
  • clion开发stm32f4系列(一)————移植rt-thread os系统
  • 计算机网络(网络层)
  • Python3 第六十六课 -- CGI编程
  • 【Unity23种设计模式】之状态模式
  • 二叉树刷题,bfs刷题
  • 为什么要用分布式锁
  • python游戏开发之五子棋游戏制作
  • 文件上传绕过最新版安全狗
  • 常用API_2:应用程序编程接口:ArrayList
  • 【Linux操作系统】进程的基本概念(PCB对象)详解
  • 曙光宁畅中科可控所有服务器机型出厂默认IPMI用户密码
  • mysql查线上数据注意数据库的隔离级别
  • 【专业解析】移动硬盘能识别却打不开:数据恢复实战指南
  • 系统 hap
  • 【Material-UI】按钮与第三方路由库的集成详解
  • Python获取Excel内容