Docker中的网络

news/2024/5/20 1:34:13

文章目录

  • 网络
    • 网桥(bridge)
    • 创建网桥接口
    • host
    • none
    • container
    • overlay
    • overlay底层原理

在这里插入图片描述

网络

在这里插入图片描述

网桥(bridge)

在Docker中,网桥(Bridge)是一种网络驱动,用于实现Docker容器之间和容器与宿主机之间的通信。Docker中的网桥工作原理可以简要概括如下:

  1. Docker0网桥

    • 当Docker引擎启动时,会自动创建一个名为docker0的虚拟网络接口,它是默认的Docker网桥。这个网桥的主要作用是连接所有Docker容器和宿主机的网络。
  2. 容器连接到网桥

    • 当用户启动一个新的Docker容器时,Docker会在docker0网桥上创建一个新的虚拟网络接口,并将容器连接到该网桥。每个容器都可以通过docker0网桥和其他容器以及宿主机进行通信。
  3. 容器之间的通信

    • 当多个容器连接到同一个docker0网桥时,它们可以直接相互通信。Docker通过使用Linux内核的veth设备对来自不同容器的数据流进行转发。这些数据流会通过docker0网桥进行桥接,从而实现容器之间的直接通信。
  4. 容器与宿主机的通信

    • 连接到docker0网桥的容器也可以与宿主机进行通信。Docker会在宿主机上创建一对虚拟网络接口:veth设备和veth-peer设备。这对虚拟网络接口的一个端口连接到docker0网桥,另一个端口连接到容器。这样,容器和宿主机可以通过这对虚拟网络接口进行通信。
  5. 端口映射

    • 为了使外部网络能够访问容器中运行的服务,Docker支持端口映射。通过端口映射,可以将容器内的服务端口映射到宿主机的端口上。这样,外部网络就可以通过宿主机的IP地址和映射的端口来访问容器中的服务。

总结来说,Docker中的网桥工作原理是通过创建虚拟网络接口并连接到docker0网桥来实现容器之间和容器与宿主机之间的通信。容器通过网桥实现相互通信,并通过端口映射使外部网络能够访问容器中的服务。这种网络配置使得Docker容器能够在同一个宿主机上创建独立的网络环境,并实现容器之间的隔离和互联。

宿主机的ip

[root@docker ~]# ip add
...
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:f3:a5:85:03 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:f3ff:fea5:8503/64 scope link valid_lft forever preferred_lft forever
29: veth774987e@if28: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 16:84:ce:26:90:d0 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::1484:ceff:fe26:90d0/64 scope link valid_lft forever preferred_lft forever
31: veth94d7539@if30: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 76:d6:a8:62:a7:32 brd ff:ff:ff:ff:ff:ff link-netnsid 1inet6 fe80::74d6:a8ff:fe62:a732/64 scope link valid_lft forever preferred_lft forever

容器ip

[root@docker ~]# docker exec box1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
28: eth0@if29: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
[root@docker ~]# docker exec box2 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
30: eth0@if31: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ffinet 172.17.0.3/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

查看bridge的信息

[root@docker ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242f3a58503	no		veth774987eveth94d7539
docker network inspect bridge

在这里插入图片描述

创建网桥接口

创建网桥

docker network create -d bride ydh

查看信息

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
555b043af3ec   bridge    bridge    local
ebf78f0dd27f   host      host      local
3b7c9e498144   none      null      local
baa150161000   ydh       bridge    local

在宿主机上查看

8: br-baa150161000: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:b0:17:de:a1 brd ff:ff:ff:ff:ff:ffinet 172.18.0.1/16 brd 172.18.255.255 scope global br-baa150161000valid_lft forever preferred_lft forever

查看详细信息

[root@localhost ~]# docker network inspect ydh
[{"Name": "ydh","Id": "baa15016100019f40011d2602d18a19a4fae7fedf73e0dbb32c5ffec229db0a2","Created": "2023-07-25T19:44:06.91098922+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.18.0.0/16","Gateway": "172.18.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]

创建运行容器指定网桥

[root@localhost ~]# docker run -d --name ynginx -p 8808:80 --network ydh nginx:latest 
2d605d921cac009de338dd45df255dfc0e9552aa264c8bfecd583dd78b723132

host

在Docker中,Host网络模式是一种网络配置选项,它允许Docker容器与宿主机共享同一个网络栈,即它们使用宿主机的网络命名空间和IP地址。这意味着容器与宿主机之间没有网络隔离,它们可以直接使用宿主机的网络接口进行通信,无需进行NAT(Network Address Translation)。

以下是Host网络模式的详细介绍:

  1. 网络共享: 在Host网络模式下,Docker容器和宿主机共享同一个网络栈,它们使用相同的网络接口和IP地址。这使得容器可以直接访问宿主机的网络接口,并且无需进行网络地址转换(NAT)或端口映射。

  2. IP地址和端口: 由于容器与宿主机共享网络栈,所以它们使用宿主机的IP地址和端口。在Host网络模式下,容器无需绑定或映射端口,因为它们直接使用宿主机的端口。

  3. 网络隔离: Host网络模式下的容器与宿主机之间没有网络隔离。这意味着容器可以访问宿主机上的所有网络服务,并且宿主机上的其他网络资源也可以直接访问容器。

  4. 性能: Host网络模式可以提高容器的网络性能,因为容器直接使用宿主机的网络接口,无需经过额外的网络地址转换。

  5. 适用场景: Host网络模式适用于一些特定的应用场景,例如:

    • 当容器需要与宿主机上的其他服务进行高性能的网络通信时。
    • 当容器需要绑定宿主机的特定网络接口,例如某个物理网卡。
    • 当容器需要访问宿主机上的网络服务,而不需要进行端口映射。
  6. 注意事项: 使用Host网络模式会导致容器与宿主机之间没有网络隔离,这可能会增加安全风险。容器与宿主机共享网络栈,所以容器的网络配置会影响到宿主机的网络配置,需要注意避免网络冲突和端口占用问题。

在这里插入图片描述

使用Host网络模式时,您需要明确了解容器与宿主机共享网络栈的特点,以及可能带来的安全风险和性能影响。Host网络模式适用于特定的使用场景,例如高性能网络通信或特定网络绑定需求。对于一般应用,通常建议使用桥接网络模式,以保持容器之间的网络隔离。

none

在Docker中,"none"网络模式是一种特殊的网络模式,容器在该模式下没有网络连接。这意味着容器内的进程无法与外部网络或其他容器通信。在"none"网络模式中,Docker容器不分配任何网络接口,也没有默认的网络配置。以下是"none"网络模式的详细介绍:

1. 没有网络接口: 在"none"网络模式下,Docker容器不会分配任何网络接口,这意味着容器内部没有网络可用。因此,容器内的进程无法访问外部网络,也无法通过网络与其他容器进行通信。

2. 与宿主机隔离: 在"none"网络模式下,容器与宿主机之间是隔离的,容器内的进程无法直接访问宿主机的网络接口和资源。这种隔离保护了宿主机的网络安全,确保容器内部的进程不能直接访问宿主机上的网络和服务。

3. 适用场景: "none"网络模式适用于一些特殊场景,例如在安全敏感的环境中运行容器时,您可能希望容器完全隔离网络,从而防止容器内的应用程序与外部网络进行通信。

4. 容器内部通信: 在"none"网络模式下,容器内部的进程仍然可以通过进程间通信(IPC)机制与其他容器或宿主机进行通信。IPC机制允许容器内的进程使用管道、共享内存等方式进行通信,而无需经过网络。

5. 自定义网络配置: 虽然容器在"none"网络模式下没有网络连接,但是您仍然可以手动配置容器内部的网络,例如通过添加虚拟网络接口或设置本地环回地址。这种情况下,您需要手动设置容器的网络配置,容器才能在"none"网络模式下进行一些局域网的通信。

总结来说,"none"网络模式在Docker中用于将容器完全隔离网络,容器内的进程无法与外部网络通信。这种模式适用于一些特殊场景,例如在需要完全隔离网络的安全环境下运行容器。然而,要注意在"none"网络模式下,容器内的进程之间仍然可以通过IPC机制进行通信,因此局域网内的一些进程间通信仍然是可行的。

container

在Docker中,网络容器(Network Container)是一种特殊的容器,它专门用于管理和提供网络功能,而不运行应用程序。网络容器不是运行应用程序的容器,而是通过Docker的网络驱动程序创建的专门用于网络隔离和连接的容器。以下是网络容器的详细介绍:

1. 网络功能提供: 网络容器的主要目的是提供网络功能,例如实现网络隔离、网络连接、路由和防火墙等。它们可以用于创建自定义网络环境,或者实现特定网络配置,以满足复杂的网络需求。

2. 不运行应用程序: 不同于普通的应用程序容器,网络容器不运行任何应用程序。它们的唯一任务是处理网络功能,并为其他应用程序容器提供网络连接。

3. 容器之间通信: 网络容器可以与其他应用程序容器或其他网络容器进行通信。它们可以在不同的网络环境中运行,提供不同的网络服务,但能够通过Docker的网络功能实现彼此之间的通信。

4. 自定义网络环境: 通过使用网络容器,您可以创建自定义的网络环境,实现更高级的网络配置。例如,您可以创建一个网络容器来实现虚拟私有网络(VPN)功能,将不同的应用程序容器连接到该VPN网络中,从而实现安全的网络通信。

5. 网络隔离: 网络容器通过Docker网络功能提供了网络隔离。这意味着网络容器与其他容器和宿主机之间具有独立的网络命名空间,它们之间的网络不会相互干扰。

6. 网络驱动程序: 网络容器使用Docker的网络驱动程序来实现网络功能。这些网络驱动程序可以是桥接网络、覆盖网络、Macvlan网络等,通过选择不同的网络驱动程序,您可以实现不同的网络配置。

7. 轻量级: 网络容器通常是轻量级的,因为它们不需要运行应用程序,只需专注于网络功能。这使得它们更高效,不会占用过多的系统资源。
在这里插入图片描述

总体来说,网络容器是一种专门用于管理和提供网络功能的容器。它们不运行应用程序,而是专注于网络隔离、连接和配置。通过使用网络容器,您可以实现复杂的网络环境和定制化的网络配置,从而满足不同的网络需求。

overlay

Docker中的Overlay网络是一种用于跨多个Docker主机创建共享虚拟网络的网络驱动程序。它是Docker Swarm集群的核心组件之一,允许容器在不同的主机上透明地通信,实现容器之间的透明网络连接。以下是Overlay网络的详细信息:

1. 跨主机通信: Overlay网络允许在Docker Swarm集群中的多个主机上创建一个共享的虚拟网络。这使得在不同主机上运行的容器可以直接通信,而无需进行额外的配置。

2. 网络隔离: 每个Overlay网络都有独立的命名空间,使得不同的Overlay网络之间具有网络隔离。这意味着在不同的Overlay网络中的容器无法直接通信,除非通过相应的网络配置。

3. 路由和覆盖: Overlay网络使用覆盖(Overlay)技术,通过在底层网络之上构建虚拟网络,实现容器之间的透明通信。每个容器都被分配一个虚拟IP地址,它们之间的通信通过Overlay网络驱动程序进行路由。

4. 透明性: 对于应用程序容器而言,Overlay网络是透明的,它们感知不到跨主机的网络连接。容器可以使用标准的网络配置(IP地址、端口等),就像在单个主机上运行一样。

5. 网络驱动程序: Overlay网络是Docker的一种网络驱动程序。要启用Overlay网络,您需要在Docker Swarm模式下创建一个Overlay网络,然后将需要在Overlay网络中通信的服务或容器加入到该网络中。

6. 安全性: Overlay网络使用加密和安全机制来保护跨主机的通信,确保数据在传输过程中是安全的。这为容器之间的安全通信提供了保障。

7. 负载均衡: Overlay网络集成了内置的负载均衡机制,可以自动在多个容器之间分配请求,实现负载均衡,提高应用程序的可用性和性能。

8. 多主机部署: Overlay网络特别适用于在多个Docker主机上部署应用程序。通过将容器分布在不同的主机上,Overlay网络可以实现高可用性和横向扩展。

总结来说,Overlay网络是一种在Docker Swarm集群中创建共享虚拟网络的网络驱动程序。它允许在不同主机上的容器透明地通信,实现容器之间的透明网络连接。通过Overlay网络,您可以在多主机环境中构建高可用性、横向扩展的应用程序。

overlay底层原理

Docker中的Overlay网络是一种非常强大的网络驱动程序,它允许在多个Docker主机上创建一个共享的虚拟网络。通过Overlay网络,您可以在不同的主机上运行容器,并使这些容器能够直接通信,而无需进行端口映射。下面是Overlay网络的底层原理的详细信息:

  1. VXLAN技术: Overlay网络的底层原理使用了VXLAN(Virtual Extensible LAN)技术。VXLAN是一种网络虚拟化技术,它通过在现有网络上创建逻辑隧道,将数据包封装在UDP数据包中,从而在不同网络之间传输数据。

  2. 虚拟网络隧道: 在Overlay网络中,每个Docker主机上的容器都属于一个虚拟网络,这些虚拟网络之间通过虚拟网络隧道进行通信。每个虚拟网络都有一个唯一的VXLAN网络标识(VNI,VXLAN Network Identifier),用于在底层区分不同的虚拟网络。

  3. VXLAN头: 在Overlay网络中,VXLAN头是在传输数据包时添加到原始数据包之前的一部分。VXLAN头包含了虚拟网络标识(VNI),用于识别数据包所属的虚拟网络。这样,当数据包在Overlay网络中传输时,Docker主机可以根据VNI将数据包正确地路由到目标虚拟网络。

  4. 网络广播: 在Overlay网络中,Docker主机使用广播机制来发现其他主机上的容器和虚拟网络。当新的容器加入或离开虚拟网络时,主机之间会进行广播通信,以更新虚拟网络中的拓扑结构。

  5. 数据包转发: 在Overlay网络中,Docker主机会根据VXLAN头中的VNI信息,将数据包转发到相应的虚拟网络。这样,即使容器位于不同的Docker主机上,它们也可以直接通信,就像它们在同一主机上一样。

  6. 控制平面和数据平面: Overlay网络通常由控制平面和数据平面组成。控制平面用于管理虚拟网络的拓扑结构和路由信息,而数据平面负责实际的数据包转发和通信。

在这里插入图片描述

总结来说,Overlay网络通过VXLAN技术创建虚拟网络隧道,使得分布在不同Docker主机上的容器能够直接通信。VXLAN头中的VNI标识用于将数据包正确路由到目标虚拟网络。Overlay网络的底层原理允许容器在不同主机之间建立透明的网络连接,从而实现高效的分布式应用部署。


http://www.mrgr.cn/p/85456775

相关文章

[Java] 单例设计模式详解

模式定义&#xff1a;保证一个类只有一个实例&#xff0c;并且提供一个全局访问点&#xff0c;时一种创建型模式 使用场景&#xff1a;重量级的对象&#xff0c;不需要多个实例&#xff0c;如线程池&#xff0c;数据库连接池 单例设计模式的实现 1.懒汉模式&#xff1a;延迟…

基于Docker-compose创建LNMP环境并运行Wordpress网站平台

基于Docker-compose创建LNMP环境并运行Wordpress网站平台 1.Docker-Compose概述2.YAML文件格式及编写注意事项3.Docker-Compose配置常用字段4.Docker Compose常用命令5.使用Docker-compose创建LNMP环境&#xff0c;并运行Wordpress网站平台1. Docker Compose 环境安装下载安装查…

React井字棋游戏官方示例

在本篇技术博客中&#xff0c;我们将介绍一个React官方示例&#xff1a;井字棋游戏。我们将逐步讲解代码实现&#xff0c;包括游戏的组件结构、状态管理、胜者判定以及历史记录功能。让我们一起开始吧&#xff01; 项目概览 在这个井字棋游戏中&#xff0c;我们有以下组件&am…

三十三章 uboot使用(universal boot loader)

Linux 系统要启动就必须需要一个 bootloader 程序&#xff0c;也就说芯片上电以后先运行一段bootloader 程序。这段bootloader程序会先初始化DDR等外设&#xff0c;然后将Linux内核从flash(NAND&#xff0c;NORFLASH&#xff0c;SD&#xff0c; MMC 等)拷贝到 DDR 中&#xff0…

【蓝图】p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统

p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统 p40对象引用、变量有效性p41实现键盘控制物体自转创建bool值控制旋转实现通过键盘控制自转 p42p43简单点名系统Get All Actors Of Class&#xff08;获得场景中所有该类的actor演员&#xff09;getFor Each L…

linux网络编程--select多路IO转接模型

学习目录 熟练掌握TCP状态转换图熟练掌握端口复用的方法了解半关闭的概念和实现方式了解多路IO转接模型熟练掌握select函数的使用熟练使用fd_set相关函数的使用能够编写select多路IO转接模型的代码 1.TCP状态转换图 了解TCP状态转换图可以帮助开发人员查找问题. 说明: 上图中…

接口自动化测试平台

下载了大神的EasyTest项目demo修改了下<https://testerhome.com/topics/12648 原地址>。也有看另一位大神的HttpRunnerManager<https://github.com/HttpRunner/HttpRunnerManager 原地址>&#xff0c;由于水平有限&#xff0c;感觉有点复杂~~~ 【整整200集】超超超…

opencv-27 阈值处理 cv2.threshold()

怎么理解阈值处理? 阈值处理&#xff08;Thresholding&#xff09;是一种常用的图像处理技术&#xff0c;在机器学习和计算机视觉中经常被用于二值化图像或二分类任务。它基于设定一个阈值来将像素值进行分类&#xff0c;将像素值大于或小于阈值的部分分为两个不同的类别&…

做了5年软件测试决定离职,跳槽历经40场面试, 面的基本都是大厂

前言 沉寂了好一段日子&#xff0c;连我们公司自己人都问我为什么最近都不写文章了。 那么当看到本篇的标题的时候&#xff0c;大家应该可以猜到这是为什么了。 我最终还是决定要离开服务了 5 年多的公司。 而这次跳槽历经 3 个月&#xff0c;前后聊了 10 家公司&#xff0c;进…

性能优化问题

提升首屏的加载速度&#xff0c;是前端性能优化中「最重要」的环节&#xff0c;这里笔者梳理出一些 常规且有效 的首屏优化建议 1、路由懒加载 SPA 项目&#xff0c;一个路由对应一个页面&#xff0c;如果不做处理&#xff0c;项目打包后&#xff0c;会把所有页面打包成一个文…

【消息中间件】原生PHP对接Uni H5、APP、微信小程序实时通讯消息服务

文章目录 视频演示效果前言一、分析二、全局注入MQTT连接1.引入库2.写入全局连接代码 二、PHP环境建立总结 视频演示效果 【uniapp】实现买定离手小游戏 前言 Mqtt不同环境问题太多&#xff0c;新手可以看下 《【MQTT】Esp32数据上传采集&#xff1a;最新mqtt插件&#xff08;支…

微服务契约测试框架-Pact

契约测试 契约测试的思想就是将原本的 Consumer 与 Provider 间同步的集成测试&#xff0c;通过契约进行解耦&#xff0c;变成 Consumer 与 Provider 端两个各自独立的、异步的单元测试。 契约测试的优点&#xff1a; 契约测试与单元测试以及其它测试之间没有重复&#xff0c…

重要通知|关于JumpServer开源堡垒机V2版本产品生命周期的相关说明

JumpServer&#xff08;https://github.com/jumpserver&#xff09;开源项目创立于2014年6月&#xff0c;已经走过了九年的发展历程。经过长期的产品迭代&#xff0c;JumpServer已经成为广受欢迎的开源堡垒机。 JumpServer堡垒机遵循GPL v3开源许可协议&#xff0c;是符合4A&a…

浅谈大数据软件的功能性分析

在当今时代的潮流中&#xff0c;工作中遇到大数据处理的时候非常多&#xff0c;因此需要一些大数据分析软件帮助人们进行工作。由于这些软件针对的对象不同&#xff0c;因此使用方法也不同&#xff0c;那么为了帮助更多的人了解大数据分析软件&#xff0c;我们就对这些软件的功…

网络:TCP/IP协议

1. OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 2. TCP/IP模型 应用层 传输层 网络层 数据链路层 物理层 3. 各链路层对应的名称 应用层对应的是协议数据单元 传输层对应的是数据段 网络层对应的是数据包 链路层对应的是数据帧 物理层对应的是比特…

Spring Cloud Alibaba - Nacos源码分析(三)

目录 一、Nacos客户端服务订阅的事件机制 1、监听事件的注册 2、ServiceInfo处理 serviceInfoHolder.processServiceInfo 一、Nacos客户端服务订阅的事件机制 Nacos客户端订阅的核心流程&#xff1a;Nacos客户端通过一个定时任务&#xff0c;每6秒从注册中心获取实例列表&…

13.Netty源码之Netty中的类与API

highlight: arduino-light ServerBootstrap Bootstrap 意思是引导&#xff0c;一个 Netty 应用通常由一个 Bootstrap 开始&#xff0c;主要作用是配置整个 Netty 程序&#xff0c;串联各个组件&#xff0c;Netty 中ServerBootstrap 是服务端启动引导类。 java //泛型 AbstractB…

使用Pytest生成HTML测试报告

背景 最近开发有关业务场景的功能时&#xff0c;涉及的API接口比较多&#xff0c;需要自己模拟多个业务场景的自动化测试&#xff08;暂时不涉及性能测试&#xff09;&#xff0c;并且在每次测试完后能够生成一份测试报告。 考虑到日常使用Python自带的UnitTest&#xff0c;所…

TDesign 中后台系统搭建

目录 1 模板安装2 启动项目3 添加页面总结 一般如果希望开发小程序&#xff0c;是要给使用的用户提供一套中后台系统来管理数据的。现在中后台系统开源项目也比较多&#xff0c;本篇我们介绍一个腾讯开源的TDesign模板。 1 模板安装 先要在电脑里安装好nodejs&#xff0c;搜索…

基于linux下的高并发服务器开发(第四章)- 多线程实现并发服务器

>>了解文件描述符 文件描述符分为两类&#xff0c;一类是用于监听的&#xff0c;一类是用于通信的&#xff0c;在服务器端既有监听的&#xff0c;又有通信的。而且在服务器端只有一个用于监听的文件描述符&#xff0c;用于通信的文件描述符是有n个。和多少个客户端建立了…