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

大厂面试题之计算机网络:对于socket编程,accept方法是干什么的,在三次握手中属于第几次?

在套接字(socket)编程中,accept 方法是一个服务器端的函数,用于接收客户端的连接请求。当一个服务器通过 bind 函数将一个套接字与一个特定的IP地址和端口号绑定后,接着调用 listen 函数开始监听该套接字上的连接请求。一旦有客户端尝试建立连接,服务器端就会调用 accept 函数来接受这个连接请求,并为这个新的连接创建一个新的套接字,这个新套接字专门用于与该客户端通信。这意味着服务器可以同时处理多个客户端的连接,每个连接都对应一个独立的套接字。

至于三次握手(Three-Way Handshake),这是TCP协议中建立连接的过程,发生在客户端与服务器之间,确保双方都准备好进行可靠的数据传输。accept 函数并不直接对应三次握手的某一步,而是发生在握手过程之后。具体来说:

  1. 第一次握手:客户端发送一个带有SYN(同步序列编号,Synchronize Sequence Numbers)标志的TCP报文到服务器,请求建立连接。

  2. 第二次握手:服务器收到SYN报文后,回应一个SYN-ACK(SYN + 确认ACKnowledge)报文,表示确认客户端的请求,并且自己也准备好开始发送数据。

  1. 第三次握手:客户端收到服务器的SYN-ACK报文后,再发送一个ACK报文给服务器,确认收到了服务器的SYN-ACK报文,至此,连接建立完成。

在TCP三次握手成功完成后,服务器端的 accept 调用才会返回,此时服务器得到了一个新的套接字,这个套接字就用于与刚刚完成握手的客户端进行数据传输。因此,accept 可以视为服务器端对已完成三次握手的连接请求的一种响应和接纳,但其本身并不直接参与三次握手的任何一个步骤。

accept 做了什么内容,这里就要提到半连接队列和全连接队列了

半连接队列(Syn Queue)

  1. 定义:半连接队列用于存放那些已经完成了TCP三次握手的前两个步骤(客户端发送SYN包,服务器回复SYN+ACK包)的连接请求。此时,连接处于SYN_RECEIVED状态,但尚未完成第三次握手(客户端发送ACK确认)。

  2. 作用:服务器通过维护这样一个队列来跟踪等待完成握手的连接,确保不会因为短时间内大量连接请求而丢失或混淆。

  3. 配置:Linux系统中,可以通过调整/proc/sys/net/ipv4/tcp_max_syn_backlog参数来设置半连接队列的最大长度。如果队列满,后续的连接请求可能会被丢弃或收到RST(Reset)响应。

全连接队列(Accept Queue)

  1. 定义:全连接队列是指那些已经完成了TCP三次握手,即客户端发出了最后一个ACK包确认,但服务器还未通过accept()系统调用将其取出并分配给进程处理的连接。这些连接的状态为ESTABLISHED。

  2. 作用:这个队列保证了即便服务器端的进程暂时没有调用accept()来处理新连接,客户端与服务器之间的连接也能保持,直到被应用程序处理。

  3. 配置:Linux系统中,可以通过listen()函数的backlog参数来指定全连接队列的大小,但实际上能设置的最大值还会受到/proc/sys/net/core/somaxconn/proc/sys/net/core/netdev_max_backlog等系统变量的限制。

全连接队列就叫做 accept queue, 这个队列内容就等着调用accept()函数把内容拿走,所以accept() 是在三次握手之后就行的。

相关文章:

  • 如何避免测试用例未覆盖核心场景
  • CSS 尺寸 (Dimension)
  • 保姆级教程搭建企业级智能体+私有知识库,Dify+ollama,Linux版
  • Go的并发模型?其和线程区别?
  • 大模型—— 走进Langchain:全面解析
  • 接口组成URL、Request(入参)、Response(返回)
  • 晶晨/全志/联发科芯片系列电视盒子改固件包教程
  • 如何理解 Apache Iceberg 与湖仓一体(Lakehouse)?
  • JS—ES5与ES6:2分钟掌握ES5与ES6的区别
  • ServiceNow vs Jira:哪个更适合中国式ITIL落地?
  • VO、DTO、POJO、PO和DO 的区别
  • 如何在Windows上下载并配置GO语言环境变量
  • C#重写treeView控件
  • 新版 eslintrc 文件弃用 .eslintignore已弃用 替代方案
  • 如何实现POE交换机串联?
  • 【蓝桥杯】每日练习 Day11 逆序对问题和多路归并
  • 美亚科技业绩波动明显:现金流为负,四起未决诉讼涉金额1700万
  • Flask(三)路由与视图函数
  • JavaScript流程控制精讲(二)运算符与循环实战
  • HTML应用指南:利用POST请求获取全国小龙坎门店位置信息
  • 如何投诉网站制作公司/网站建设选亿企网络
  • 做一家购物网站要多少钱/新闻株洲最新
  • 网站首页做几个关键词/营销网页
  • 网站建设专家收费标准/百度指数专业版价格
  • 邢台做移动网站费用/做百度推广销售怎么找客户
  • 昆山设计网站的公司/mac蜜桃923色号