k8s关于metadata、spec.containers、spec.volumes的属性介绍(yaml格式)
目录
一.metadata常用属性
二.spec.containers子属性介绍
explain pod.spec.containers给出的参考
1.command示例演示
2.env和envFrom示例演示
3.ports部分详解
4.resources部分详解
5.startupProbe格式演示
6.terminationMessagePath和terminationMessagePolicy格式演示
7.volumeDevices格式演示
8.volumeMounts格式演示
三.spec.volumes子属性介绍
一.metadata常用属性
[root@k8s-master pod]# kubectl explain pod.metadata
KIND: Pod
VERSION: v1
FIELD: metadata <ObjectMeta>
FIELDS:
labels <map[string]string>#指定资源的label列表
name <string>#自定义名称namespace <string>#指定名称空间
二.spec.containers子属性介绍
explain pod.spec.containers给出的参考
[root@k8s-master pod]# kubectl explain pod.spec.containers
KIND: Pod
VERSION: v1
FIELD: containers <[]Container>
DESCRIPTION:List of containers belonging to the pod. Containers cannot currently beadded or removed. There must be at least one container in a Pod. Cannot beupdated.A single application container that you want to run within a pod.FIELDS:args <[]string>#容器的启动命令需要的参数列表,主要用于和docker和Dockerfile相关的配置
command <[]string>#启动容器后执行的命令,不指定时使用打包时使用的启动命令
env <[]EnvVar>#容器环境变量的配置列表
envFrom <[]EnvFromSource>#使用了ConfigMap来指定变量文件时,用envFrom来指定
image <string>#镜像名称
imagePullPolicy <string>#镜像拉取策略,指定tag为latest默认always,tag为具体版本号,默认IfNotPresent。#always表示每次都尝试重新拉取镜像;#ifNotPresent表示如果本地有那个镜像就使用本地的,不存在时才拉取;#Nerver表示仅使用本地有的镜像,绝不拉取,本地没有时报错
lifecycle <Lifecycle>#定义容器的生命周期,使得容器在启动和终止时执行特定的任务#可选portStart(在容器创建后立即执行的操作。这可以用于执行一些初始化任务,比如检查容器依赖的服务是否可用,或者向外部系统注册当前容器的信息等)#和preStop(在容器终止之前执行的操作。这可以用于执行一些清理任务,比如保存数据、发送信号给其他服务表明当前容器即将停止等)两个配置
livenessProbe <Probe>#指定对容器进行存活性检测,检测失败会执行重启容器等操作。#HTTP(通过向容器提供的 HTTP 端点发送请求,并根据返回的状态码来判断容器的存活状态)#TCP(通过尝试建立 TCP 连接来判断容器的存活状态)#Exec(通过在容器内执行特定的命令,并根据命令的返回状态来判断容器的存活状态)三种探测方式
name <string> -required-#容器名称
ports <[]ContainerPort>#容器需要暴露的端口列表
readinessProbe <Probe>#对容器实行就绪检测,确定容器是否已经准备好接受流量,检测失败则会剔除该服务直至再次检测成功#和livenessProbe具有同样含义的三种方式
resources <ResourceRequirements>#资源限制和资源请求的配置
restartPolicy <string>#指定容器的重新启动策略#Always(无论什么原因导致容器退出,将始终尝试重新启动容器,以确保容器一直处于运行状态)#OnFailture(只有在容器以非零状态退出时才会尝试重新启动容器。换句话说,如果容器正常退出(状态码为 0),则不会重新启动它)#Never(永远不会尝试重新启动容器。这意味着一旦容器退出,它将保持停止状态,直到人为干预为止)
startupProbe <Probe>#后文有格式演示,与livenessProbe和readinessProbe类似,仅在容器启动时运行一次,用于确定容器是否已经准备好接收流量stdin <boolean>#true/false,是否可以通过 kubectl attach 命令将本地标准输入连接到容器的标准输入,从而与容器进行交互
stdinOnce <boolean>#同stdin,但只接受第一个进程的标准输入,后即关闭
terminationMessagePath <string>#指定容器终止时记录终止消息的文件路径
terminationMessagePolicy <string>#指定容器终止时记录终止消息的策略#File,使用terminationMessagePath所设置的值来记录#FallbackToLogsOnError,如果无法将终止消息写入文件,则将使用容器的日志作为终止消息的内容#后文有格式演示tty <boolean>#是否分配一个交互终端环境
volumeDevices <[]VolumeDevice>#设置将主机上的块设备映射到容器内部#name指定名称,devicePath指定设备路径#后文有格式演示volumeMounts <[]VolumeMount>#后文有格式演示,用于将卷挂载到容器内部特定的位置,mountPath指定目标路径,readOnly可以设置是否只读
workingDir <string>#用于指定容器启动时的进程所在目录,对于需要在特定目录下执行命令或者读取特定路径的应用程序非常有用
1.command示例演示
(1)运行一个pod,其中有httpd和busybox两个容器,启动busybox后执行以下操作:每隔60s向/hello.txt中追加一次hello。
使用/bin/sh来执行命令,-c后面指定要执行的命令,sleep可以减少循环过多导致的资源浪费
[root@k8s-master pod]# cat mybusybox.yaml
apiVersion: v1
kind: Pod
metadata:name: mybusyboxnamespace: myns
spec:containers:- name: httpdimage: httpd- name: busybox #busybox比较特殊,它相当于一个工具而不是一个软件程序,直接运行时会报错的image: busyboxcommand: ["/bin/sh","-c","touch /hello.txt;while true;do /bin/echo hello >> /hello.txt; sleep 60; done;"][root@k8s-master pod]# kubectl exec -it mybusybox -c busybox -n myns -- /bin/sh -c "cat /hello.txt"
hello
hello
hello
hello
#在对运行的容器进行操作时也可以使用-c去指定要执行的命令,而不需要页面进入容器
(2)注意:当你的k8s是docker部署,还存在Dockerfile的情况,args选项的配置显得比较重要,command和args要实现去覆盖Dockerfile中的ENTRYPOINT功能
- command和args都没有写时,会使用Dockerfile的配置
- command写,args没有写,Dockerfile默认的配置不会生效,执行command部分
- command没写,args写,Dockerfile中配置的ENTRYPOINT的命令会生效,并使用当前args的参数
- command和args都写,Dockerfile的配置被忽略,执行command和args指定的参数
2.env和envFrom示例演示
(1)运行一个pod,pod内运行busybox容器,容器运行后为在其中创建一个用户,通过引用设置的环境变量来为该用户设置名称和密码
[root@k8s-master pod]# cat user.yaml
apiVersion: v1
kind: Pod
metadata:name: myusernamespace: myns
spec:containers:- name: my-userimage: busyboxcommand: ["/bin/sh","-c","while true;do /bin/adduser -D $username; echo $username:$password | /bin/chpasswd; sleep 3600; done;"]env:- name: "username"value: "SLB"- name: "password"value: "hello123"
[root@k8s-master pod]# kubectl exec -it myuser -c my-user -n myns -- /bin/sh -c "cat /etc/passwd | grep SLB"
SLB:x:1000:1000:Linux User,,,:/home/SLB:/bin/sh
注意:env设置的变量在容器内都可以引用[root@k8s-master pod]# kubectl exec -it myuser -c my-user -n myns -- /bin/sh
/ # echo $username
SLB
/ # echo $password
hello123
(2)常用方式是使用ConfigMap来将env变量存放在单独的配置文件中,再在配置中通过configMapRef进行引用,如下所示
#create去在同一个命名空间内创建一个user-config来存放用户的两个变量数据
[root@k8s-master pod]# kubectl create configmap user-config --from-literal=username=SLB1 --from-literal=password=hello123 -n myns
configmap/user-config created
[root@k8s-master pod]# kubectl get configMap user-config -n myns -o yaml
apiVersion: v1
data:password: hello123username: SLB1
kind: ConfigMap
metadata:creationTimestamp: "2023-11-11T14:14:51Z"name: user-confignamespace: mynsresourceVersion: "45414"uid: 86c13358-0a38-4120-84eb-e15c01aa91f3
[root@k8s-master pod]# cat user.yaml
apiVersion: v1
kind: Pod
metadata:name: myusernamespace: myns
spec:containers:- name: my-userimage: busyboxcommand: ["/bin/sh","-c","while true;do /bin/adduser -D $username; echo $username:$password | /bin/chpasswd; sleep 3600; done;"]envFrom:- configMapRef: name: user-config
[root@k8s-master pod]# kubectl exec -it myuser -c my-user -n myns -- /bin/sh -c "cat /etc/passwd | grep SLB1"
SLB1:x:1000:1000:Linux User,,,:/home/SLB1:/bin/sh
3.ports部分详解
(1)kubectl explain pod.spec.containers.ports
[root@k8s-master pod]# kubectl explain pod.spec.containers.ports
KIND: Pod
VERSION: v1
hostIP <string>#要将外部端口绑定到的主机的IP
hostPort <integer>#容器在主机上公开的端口,如果设置了这个选项,主机上只能是运行容器副本name <string>#端口的名称,需要具有唯一性
protocol <string>#端口协议,UDP/TCP/STCP,默认TCPcontainerPort <integer> -required-#容器要监听的端口(0~65535)
(2)示例
创建一个nginx容器,暴露80端口
[root@k8s-master pod]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:name: mynginxnamespace: mynslabels:run: nginxuser: sulibao
spec:containers:- name: mynginximage: nginxports:- name: mynginx-portcontainerPort: 80
[root@k8s-master pod]# kubectl describe pod mynginx -n myns | grep -A 10 "Containers:" | tail -n +2mynginx:Container ID: containerd://727e31321598fc3065f38d9ecb50b601f81a7723d916c2d550951c6510dcfc06Image: nginxImage ID: docker.io/library/nginx@sha256:86e53c4c16a6a276b204b0fd3a8143d86547c967dc8258b3d47c3a21bb68d3c6Port: 80/TCPHost Port: 0/TCPState: RunningStarted: Sat, 11 Nov 2023 22:30:08 +0800Ready: TrueRestart Count: 0
4.resources部分详解
(1)容器运行时的资源配额可以通过resources部分来指定,若该容器资源配置过少自己启动不了,配置过多又会影响其他容器的正常运行
(2)参数解析
limits是用于限制容器的上限资源占用情况,一旦容器真正启动后占用资源超过limits处配置,则会被终止并重启
requests是用于规定容器的下限资源占用情况,若环境资源不足,容器无法启动
cpu是用于指定core数
memory是用于指定内存大小,单位可以是M(10^6字节)、Mi(二进制兆节,为1024^2字节)、G(10^9字节、Gi(二进制千兆字节,为1024^3字节)等
(3)示例
运行一个nginx的pod,资源上限为2cpu、1G内存,资源下为2cpu、2M内存
[root@k8s-master pod]# cat nginx.yaml
apiiVersion: v1
kind: Pod
metadata:name: mynginxnamespace: mynslabels:run: nginxuser: sulibao
spec:containers:- name: mynginximage: nginxports:- name: mynginx-portcontainerPort: 80resources:limits:cpu: "2"memory: "1G"requests:cpu: "2"memory: "2M"
5.startupProbe格式演示
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxstartupProbe:httpGet:path: /myport: 8080
6.terminationMessagePath和terminationMessagePolicy格式演示
terminationMessagePolicy 设置为 File,且通过 terminationMessagePath 指定了记录终止消息的文件路径
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxterminationMessagePath: /var/log/termination.logterminationMessagePolicy: File
7.volumeDevices格式演示
volumeDevices 将 /dev/sdb 设备映射到 mydevice 的卷中,并将其挂载到 mycontainer 容器内部
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxvolumeDevices:- name: mydevicedevicePath: /dev/sdbvolumes:- name: mydevicehostPath:path: /dev/sdb
8.volumeMounts格式演示
volumeMounts 将 myvolume 的卷挂载到了 /data 路径上,且设置为只读模式
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxvolumeMounts:- name: myvolumemountPath: /datareadOnly: truevolumes:- name: myvolumehostPath:path: /mnt/data
三.spec.volumes子属性介绍
[root@k8s-master pod]# kubectl explain pod.spec.volumes
KIND: Pod
VERSION: v1
FIELD: volumes <[]Volume>
azureDisk <AzureDiskVolumeSource>#azureDisk挂载到容器内部
azureFile <AzureFileVolumeSource>#azureDisk挂载到容器内部,容器可以访问Azure存储中的文件
cephfs <CephFSVolumeSource>#Ceph 文件系统挂载到 Pod 内部,使得容器可以访问 Ceph 集群中的文件系统
cinder <CinderVolumeSource>#将 OpenStack Cinder 卷挂载到 Pod 内部,使得容器可以访问 OpenStack 中的块存储卷
configMap <ConfigMapVolumeSource>#将ConfigMap中的配置数据挂载到Pod内部,可以自己创建ConfigMap使得容器可以访问这些配置数据
csi <CSIVolumeSource>#将外部存储系统通过 CSI 插件挂载到 Pod 内部,使得容器可以访问这些外部存储
emptyDir <EmptyDirVolumeSource>#在 Pod 启动时创建一个空目录,并将其挂载到 Pod 内部,使得容器可以在该目录中进行读写操作。这个空目录的生命周期与 Pod 相关联,当 Pod 被删除时,这个空目录也会被清除,不应该用于持久化存储配置hostPath <HostPathVolumeSource>#将主机上的特定文件或目录挂载到Pod内部,使得容器可以访问主机上的文件系统内容。这种方式可以用于访问主机上的特定配置文件、日志目录或其他主机文件系统中的内容。#hostPath中的路径path是Pod创建节点的绝对路径,Pod删除后该路径下的数据不会被删除
name <string> -required-#指定卷的名称,该名称将在容器的 volumeMounts 中使用,以将卷挂载到容器中nfs <NFSVolumeSource>#将远程的 NFS 存储挂载到 Pod 内部,使得容器可以访问远程存储中的文件。这种方式可以用于实现多个 Pod 之间共享文件或数据,同时也可以将持久化的存储挂载到 Pod 中,而且这些存储可以跨节点访问#通过server指定nfs服务器地址
persistentVolumeClaim <PersistentVolumeClaimVolumeSource>#将持久化存储声明(Persistent Volume Claim)挂载为卷,用于访问持久化存储(如 PersistentVolumes)
secret <SecretVolumeSource>#将 Secret 对象中的数据挂载为卷,使得容器可以访问其中的敏感数据,如密码、CA证书等
相关文章:
k8s关于metadata、spec.containers、spec.volumes的属性介绍(yaml格式)
目录 一.metadata常用属性 二.spec.containers子属性介绍 explain pod.spec.containers给出的参考 1.command示例演示 2.env和envFrom示例演示 3.ports部分详解 4.resources部分详解 5.startupProbe格式演示 6.terminationMessagePath和terminationMessagePolicy格式演…...

腾讯域名优惠卷领取
腾讯域名到到期了,听说申请此计划,可获得优惠卷,看到网上5年域名只需要10元,姑且试试看。 我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?in…...

elastic-job 完结篇
一 elastic-job 1.1 案例场景分析 1.设置4个分片,10秒执行一次。 分片弹性扩容缩容机制测试: 测试1:测试窗口1不关闭,再次运行main方法查看控制台日志,注意修改application.properties中的 server.port…...

基于 Gin 的 HTTP 代理 demo
上次用 TCP 模拟了一个 HTTP 代理之后,感觉那样还是太简陋了,想着是不是可以用框架来做一个有点实际用处的东西。所以,就思索如何用 golang 的 Gin 框架来实现一个?嗯,对的你没有听错,是 gin 框架。你可能会…...

【ATTCK】MITRE Caldera - 测试数据泄露技巧
CALDERA是一个由python语言编写的红蓝对抗工具(攻击模拟工具)。它是MITRE公司发起的一个研究项目,该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的,能够较真实地APT攻击行为模式。 通过CALDERA工具,安全…...

【数据结构】树与二叉树(十二):二叉树的递归创建(算法CBT)
文章目录 5.2.1 二叉树二叉树性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点,其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…...
Qt绘制网格和曲线
绘制网格: void Widget::drawGrid(QPainter &p, QRect &windRect) {QRect rect(windRect.left()m_margins.left(),windRect.top()m_margins.top(),windRect.width()-m_margins.left()-m_margins.right(),windRect.height()-m_margins.top()-m_margins.bo…...
2023-11-12
今日比较摆烂, 但是把自写管道的原理搞懂了, 主要是把 exp 完完全全看懂了, 还不错. 然后就没干啥了. 明日计划: 学校的作业. AFL 源码. 我真是服了我自己了, AFL 源码搁多久了, 操操操 然后把 seccomp 重新学习下...

[工业自动化-16]:西门子S7-15xxx编程 - 软件编程 - 西门子仿真软件PLCSIM
目录 前言: 一、PLCSIM仿真软件 1.1 PLCSIM仿真软件基础版(内嵌) 1.2 PLCSIM仿真软件与PLCSIM仿真软件高级版的区别? 1.3 PLCSIM使用 前言: PLC集成开发环境是运行在Host主机上,Host主机与PLC可以通过…...

运行npm install卡住不动的几种解决方案
在前端开发经常会遇到运行npm install 来安装工具包一直卡住不动,为此这里提供几种解决方案,供大家参考学习,不足之处还请指正。 第一种方案、首先检查npm代理,是否已经使用国内镜像 // 执行以下命令查看是否为国内镜像 npm con…...

[Android]_[初级]_[配置gradle的环境变量设置安装位置]
场景 在开发Android项目的时候, gradle是官方指定的构建工具。不同项目通过wrapper指定不同版本的gradle。随着项目越来越多,使用的gradle版本也增多,导致它以来的各种库也增加,系统盘空间不足,怎么解决? 说明 grad…...

docker更改存储目录原因及方案
为什么一定要将docker的存储目录挂载到其他目录 docker在安装时默认存储目录在/var/lib/docker,而该目录是在系统盘下的。docker安装后,会使用各种各样的镜像,动辄几个G,那么如此多的镜像文件,装着装着系统盘就撑爆了…...

HTTPS的工作流程
. HTTPS是什么? https是应用层中的一个协议,是在http协议的基础上引入的一个加密层。 为什么需要HTTPS 由于http协议内容都是按照文本的方式明文传输的,这就导致传输过程中会出现一些被篡改的情况。运营商劫持事件最开始百度,…...

C++语言的广泛应用领域
目录 1. 系统级编程 2. 游戏开发 3. 嵌入式系统 4. 大数据处理 5. 金融和量化分析 6. 人工智能和机器学习 7. 网络和通信 结语 C是一种多范式编程语言,具有高性能、中级抽象能力和面向对象的特性。由Bjarne Stroustrup于1979年首次设计并实现,C在…...

Lambertian模型(完美漫反射)
这里使用相乘的方式组合光照色和纹理色。根据这个模型,面朝光源的区域光照强度高,纹理色也相应增强。面背光源的区域光照弱,纹理色也被抑制。这样通过光照和纹理的结合,可以合成出具有照明效果的面部颜色,而不仅仅是固定的纹理本身的颜色。相乘方式可以近似实现不同光照方向下面…...

MATLAB的编程与应用,匿名函数、嵌套函数、蒙特卡洛法的掌握与使用
目录 1.匿名函数 1.1.匿名函数的定义与分类 1.2.匿名函数在积分和优化中应用 2.嵌套函数 2.1.嵌套函数的定义与分类 2.2.嵌套函数彼此调用关系 2.3.嵌套函数在积分和微分中应用 3.微分和积分 4.蒙特卡洛法 4.1.圆周率的模拟 4.2.计算N重积分(均匀分布&am…...

NFS服务器的搭建
架设一台NFS服务器,并按照以下要求配置 准备阶段:准备两台虚拟机,一台作为服务端,一台作为客户端 服务端(Server):192.168.75.139 客户端(Client):192.168.75.160 两…...
安卓Frida 常用脚本
打印调用堆栈, hook 某个方法,想看下调用堆栈,代码如下: function showStacks() {Java.perform(function () {send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));});} 二,需要hook okhttp3 HttpUrl …...

机器学习数据预处理——Word2Vec的使用
引言: Word2Vec 是一种强大的词向量表示方法,通常通过训练神经网络来学习词汇中的词语嵌入。它可以捕捉词语之间的语义关系,对于许多自然语言处理任务,包括情感分析,都表现出色。 代码: 重点代码&#…...

面试算法常考题之-------逆波兰式合集
逆波兰式背景介绍 逆波兰式是一种特殊的数学表达式表示法,它的诞生背景可以追溯到20世纪30年代。当时,波兰数学家Jan Wjtowicz和Wacław Sierpiński提出了一种新的数学表达式表示法,这种表示法将运算符放在操作数之后,而不是传统…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...