云计算百科
云计算领域专业知识百科平台

【网络】【Linux】Linux内核中连接的组织形式与全连接队列

Linux内核中连接的组织形式与全连接队列

文章目录

  • 1.前言
  • 2.Linux内核中连接的组织形式
    • 2.1套接字和文件描述符
    • 2.2创建连接 & 获取连接
  • 3.全连接队列
    • 3.1为什么有全连接队列?
    • 3.2全连接队列的长度

1.前言

TCP是面向连接的,TCP的各种可靠性机制实际都不是从主机到主机的,而是基于连接的。

比如一台服务器启动后可能有多个客户端前来访问,如果TCP不是基于连接的,也就意味着服务器端只有一个接收缓冲区,此时各个客户端发来的数据都会拷贝到这个接收缓冲区当中,此时这些数据就可能会互相干扰。

而我们在进行TCP通信之前需要先建立连接,就是因为TCP的各种可靠性保证都是基于连接的,要保证传输数据的可靠性的前提就是先建立好连接。

而一台机器上可能会存在大量的连接,此时操作系统就不得不对这些连接进行管理。

  • 操作系统在管理这些连接时需要“先描述,再组织”,在操作系统中一定有一个描述连接的结构体,该结构体当中包含了连接的各种属性字段,所有定义出来的连接结构体最终都会以某种数据结构组织起来,此时操作系统对连接的管理就变成了对该数据结构的增删查改。
  • 建立连接,实际就是在操作系统中用该结构体定义一个结构体变量,然后填充连接的各种属性字段,最后将其插入到管理连接的数据结构当中即可。
  • 断开连接,实际就是将某个连接从管理连接的数据结构当中删除,释放该连接曾经占用的各种资源。

以上都是理论层次的理解,那我们今天就具体地探究Linux源码中连接是如何组织起来的:

2.Linux内核中连接的组织形式

2.1套接字和文件描述符

网络通信本质上也是IO的过程,而且之前我们也说过调用send、recv等函数本质上是向Tcp维护的发送缓冲区、接收缓冲区写入和读出数据,既然是IO操作,所以一个套接字的本质其实就是一个文件描述符对应的文件。Linux下一切皆文件。

一个服务器本质上就是一个进程,而进程到文件的关系我们早已经在系统部分学习过:

QQ_1722932338139

当我们创建套接字时,Linux系统还会为我们创建一个新的结构体对象struct socket:

image-20240806162708417

我们观察到这个结构体内部包含了一个struct file类型的指针,该指针指向的就是该套接字对应的文件对象,所以我们此时可以通过该套接字找到对应的文件了,但是更重要的是我们需要通过文件描述符找到对应的套接字呢呀,现在只有一个单向的指针,即我现在需要从文件找到对应的套接字对象。

<

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【网络】【Linux】Linux内核中连接的组织形式与全连接队列
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!