Docker橋接網絡分析

前言

《虛擬局域網(VLAN)》一文中描述了虛擬網卡、虛擬網橋的作用,以及通過iptables實現了vlan聯網,其實學習到這里自然就會聯想到目前主流的容器技術:Docker,因此接下來打算研究一下Docker的橋接網絡與此有何異同。

猜測

眾所周知,Docker有host、bridge、none三種網絡模式,這里我們僅分析橋接(bridge)模式。有了上一篇文章的基礎,bridge這個概念我們應該已經熟悉了,bridge網橋是一種基于mac地址數據鏈路層進行數據交換的一個虛擬交換機

所以我們現在可以大膽的進行猜測:Docker也是基于此模式實現了內部網絡通信。

  • 猜測一:Docker引擎在創建容器的時候會自動為容器創建一對虛擬網卡(veth)并為其分配私有ip,然后將veth一端連接在docker0網橋中,另一端連接在容器的內部網絡中
  • 猜測二:Docker同樣利用iptables的nat能力將容器內流量轉發至互聯網實現通信。

求證

檢查主機網卡列表

檢查docker容器及網卡列表,觀察是否存在docker網橋以及veth。

shell
# 查看本機正在運行的coekr容器(mysql、redis、halo、debian)
[root@VM-8-10-centos ~]# docker ps 
CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
56ffaf39316a   debian               "bash"                   23 hours ago    Up 7 minutes                                                          debian
c8a273ce122e   halohub/halo:1.5.3   "/bin/sh -c 'java -X…"   5 months ago    Up 47 hours    0.0.0.0:8090->8090/tcp, :::8090->8090/tcp              halo
d09fcfa7de0f   redis                "docker-entrypoint.s…"   12 months ago   Up 5 weeks     0.0.0.0:8805->6379/tcp, :::8805->6379/tcp              redis
87a2192f6db4   mysql:5.7            "docker-entrypoint.s…"   2 years ago     Up 5 weeks     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
# 檢查主機網卡列表(確認docker0、veth存在)
[root@VM-12-15-centos ~]# ip link 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000link/ether 52:54:00:b3:6f:20 brd ff:ff:ff:ff:ff:ffaltname enp0s5altname ens5
3: br-67cf5bfe7a5c: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether 02:42:c5:07:22:c7 brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 02:42:38:d6:1b:ea brd ff:ff:ff:ff:ff:ff
5: br-9fd151a807e7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether 02:42:35:7f:ed:76 brd ff:ff:ff:ff:ff:ff
315: vethf2afb37@if314: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-67cf5bfe7a5c state UP mode DEFAULT group default link/ether 3a:06:f0:8d:06:f6 brd ff:ff:ff:ff:ff:ff link-netnsid 12
317: veth1ec30f9@if316: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-9fd151a807e7 state UP mode DEFAULT group default link/ether 4a:ad:1a:b0:5a:5f brd ff:ff:ff:ff:ff:ff link-netnsid 0
319: vethc408286@if318: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-67cf5bfe7a5c state UP mode DEFAULT group default link/ether 26:b0:3c:f4:c5:5b brd ff:ff:ff:ff:ff:ff link-netnsid 1
321: veth68fb8c6@if320: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-67cf5bfe7a5c state UP mode DEFAULT group default link/ether 96:ca:a9:42:f8:a8 brd ff:ff:ff:ff:ff:ff link-netnsid 9
323: veth6dba394@if322: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-67cf5bfe7a5c state UP mode DEFAULT group default link/ether 92:1c:5e:9c:a2:b3 brd ff:ff:ff:ff:ff:ff link-netnsid 4
325: veth1509ed0@if324: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-67cf5bfe7a5c state UP mode DEFAULT group default link/ether fa:22:33:da:12:e0 brd ff:ff:ff:ff:ff:ff link-netnsid 11
329: vethef1dbac@if328: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-67cf5bfe7a5c state UP mode DEFAULT group default link/ether aa:db:d2:10:36:60 brd ff:ff:ff:ff:ff:ff link-netnsid 3
331: veth69d3e7d@if330: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-67cf5bfe7a5c state UP mode DEFAULT group default link/ether 86:45:d0:0e:6b:a7 brd ff:ff:ff:ff:ff:ff link-netnsid 5
335: veth98588ae@if334: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-67cf5bfe7a5c state UP mode DEFAULT group default link/ether 86:59:55:39:17:ad brd ff:ff:ff:ff:ff:ff link-netnsid 7
349: vetha84d717@if348: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-67cf5bfe7a5c state UP mode DEFAULT group default link/ether ee:7f:d2:27:15:83 brd ff:ff:ff:ff:ff:ff link-netnsid 6
354: veth1@if355: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-mybridge state UP mode DEFAULT group default qlen 1000link/ether 72:c8:9e:24:a6:a3 brd ff:ff:ff:ff:ff:ff link-netns n1
356: br-mybridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000link/ether 72:c8:9e:24:a6:a3 brd ff:ff:ff:ff:ff:ff

使用ip link查看本機網卡列表,可以發現宿主機存在一個名為docker0的虛擬網橋,且虛擬網橋下有四對虛擬網卡分別對應 debian、halo、redis、mysql四個docker容器

檢查網橋ip及Docker內部容器的網絡通信

shell
# docker0默認網橋的IP地址為172.17.0.1/16
[root@VM-8-10-centos ~]# ip addr show docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:6f:d7:19:7e brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:6fff:fed7:197e/64 scope link valid_lft forever preferred_lft forever
# 檢查橋接網絡內部容器的ip地址(分別為172.17.0.2/16、172.17.0.3/16、172.17.0.4/16、172.17.0.5/16)       
[root@VM-8-10-centos ~]# docker network inspect bridge
[{"Name": "bridge","Id": "2dc75e446719be8cad37e1ea9ae7d1385fcc728b8177646a3c62929c2b289e94","Created": "2024-04-24T09:46:14.399901891+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.17.0.0/16","Gateway": "172.17.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"56ffaf39316ac9f776c6b3e2a8a79e9f42dfab42aa1f7de7525bd26c686defaa": {"Name": "debian","EndpointID": "47dd9441d4a4c8b09afea3bca23652b80ba35e6baa13d44ec21ec89522e722a6","MacAddress": "02:42:ac:11:00:05","IPv4Address": "172.17.0.5/16","IPv6Address": ""},"87a2192f6db48c9bf2996bf25c79d4c18c3ae2975cac9d55e7fdfdcec03f896b": {"Name": "mysql","EndpointID": "00b93de23c5abf2ed1349bac1c2ec93bf7ed516370dabf23348b980f19cfaa9c","MacAddress": "02:42:ac:11:00:02","IPv4Address": "172.17.0.2/16","IPv6Address": ""},"c8a273ce122ef5479583908f40898141a90933a3c41c8028dc7966b9af4c465d": {"Name": "halo","EndpointID": "ba8ef83c80f3edb6e7987c95ae6d56816a1fc00d07e8bb2bfbb0f19ef543badf","MacAddress": "02:42:ac:11:00:04","IPv4Address": "172.17.0.4/16","IPv6Address": ""},"d09fcfa7de0f2a7b3ef7927a7e53a8a53fb93021b119b1376fe4616381c5a57c": {"Name": "redis","EndpointID": "afbc9128f7d27becfbf64e843a92d36ce23800cd42c131e550abea7afb6a131e","MacAddress": "02:42:ac:11:00:03","IPv4Address": "172.17.0.3/16","IPv6Address": ""}},"Options": {"com.docker.network.bridge.default_bridge": "true","com.docker.network.bridge.enable_icc": "true","com.docker.network.bridge.enable_ip_masquerade": "true","com.docker.network.bridge.host_binding_ipv4": "0.0.0.0","com.docker.network.bridge.name": "docker0","com.docker.network.driver.mtu": "1500"},"Labels": {}}
] 
# 進入debian容器測試內部網絡通信和互聯網通信
[root@VM-8-10-centos ~]# docker exec -it debian /bin/bash
root@56ffaf39316a:/# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.036 ms
--- 172.17.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.036/0.053/0.071/0.017 ms
root@56ffaf39316a:/# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.067 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.047 ms
--- 172.17.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.047/0.057/0.067/0.010 ms
root@56ffaf39316a:/# ping baidu.com
PING baidu.com (39.156.66.10) 56(84) bytes of data.
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=247 time=59.0 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=247 time=55.4 ms
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 55.400/57.221/59.043/1.821 ms
小結

通過shell的結果分析:docker0網橋的ip為172.17.0.1/16,docker0各子網通信正常,并且通過ping baidu.com檢查了互聯網通信也正常。因此可以得出docker橋接模式與前一章中vlan模式是一致的,都是通過一個虛擬網橋實現了內部網絡的通信

docker內部通信脈絡圖

Docker容器與互聯網進行通信

在上一章節中不小心留了個坑,因為firewalld在iptables中內置了很多的規則,所以對于流量的分析很不友好,所以我索性直接關閉了firewalld,但是緊接著就發現這樣做有一個副作用:firewalld關閉后,iptables也會被清空。當時不覺得有什么影響,現在仔細回想了一下vlan之所以能夠連接互聯網,很大一部分原因是利用了iptables的nat功能,iptables被清空,意味著nat功能被關閉了,所以利用此功能的應用會失去網絡連接。下面使用shell命令來模擬并分析此現象。

shell
# 關閉firewalld
[root@VM-8-10-centos ~]# systemctl stop firewalld
# 檢查iptables
[root@VM-8-10-centos ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination
[root@VM-8-10-centos ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination 
# 檢查debian容器互聯網連接情況 
[root@VM-8-10-centos ~]# docker exec -it debian /bin/bash
root@56ffaf39316a:/# ping baidu.com
PING baidu.com (110.242.68.66) 56(84) bytes of data.
--- baidu.com ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4000ms
# 檢查內部網絡連接情況
root@56ffaf39316a:/# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.046 ms
--- 172.17.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.041/0.043/0.046/0.002 ms
root@56ffaf39316a:/# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.055 ms
--- 172.17.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.055/0.068/0.081/0.013 ms

通過清空iptables發現docker容器內部確實丟失了互聯網連接,但是沒有影響內部網絡的通信。

手動添加nat記錄恢復Docker容器與互聯網的通信
# 添加snat記錄
[root@VM-8-10-centos ~]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 檢查debian容器互聯網連接情況 
[root@VM-8-10-centos ~]# docker exec -it debian /bin/bash
root@56ffaf39316a:/# ping baidu.com
PING baidu.com (39.156.66.10) 56(84) bytes of data.
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=247 time=55.8 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=247 time=55.4 ms
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 55.386/55.610/55.834/0.224 ms

個人總結: docker容器與互聯網進行通信時確實依賴iptables,且行為上與vlan幾乎一致,因此我認為Docker其實是vlan+iptables一種高級應用。
docker容器互聯網通信脈絡圖

思考

docker容器內的網絡通信是否也基于二層協議進行數據交換?

基于之前對vlan的了解,明白了bridge是一種工作在"數據鏈路層",根據mac地址交換數據幀的虛擬交換機,既然工作在二層,那么意味著它在進行數據交換時是沒有ip概念的,僅僅是按照mac地址轉發數據幀。既然如此,那么即使刪除了它的ip地址和路由表,應該也可以完成數據交換。

[root@VM-8-10-centos ~]# ip addr del 172.17.0.1/16 dev docker0
[root@VM-8-10-centos ~]# ip addr show docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:6f:d7:19:7e brd ff:ff:ff:ff:ff:ffinet6 fe80::42:6fff:fed7:197e/64 scope link valid_lft forever preferred_lft forever
[root@VM-8-10-centos ~]# docker exec -it debian /bin/bash
root@56ffaf39316a:/# ping 172.17.0.3 
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.049 ms
--- 172.17.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.049/0.057/0.066/0.008 ms

iptables與路由表有何聯系和區別?誰決定了流量的出口網卡?

學習vlan的時候就存在一個疑惑:**虛擬網橋進行互聯網通信時,將流入網橋的流量轉發到出口網卡是由誰決定的?**當時做vlan的nat通信時,因為需要在iptables中配置FORWARD及NAT規則,自然而然的會認為是iptables實現的。如此的話,那么路由表存在的意義又是什么呢?**所以到底是iptables實現了流量轉發,還是路由表(ip route)實現了流量轉發?**或者具體點講:是誰將流量從docker0網卡轉發到eth0網卡?

具體過程需要深入分析iptables的工作原理,這里就不再贅述了,直接給出個人結論僅供參考。

個人結論:路由表不對流量做任何更改,僅僅用來確定數據包的出口網卡,iptables可以對ip數據包進行過濾、修改、轉發,但最終還是由路由表確定出口網卡。

即使沒有snat,數據包是不是應該也可以到達對方網絡?

在互聯網中基于ip協議進行通信的流量都會被標注源地址目的地址,目的地址決定了流量應該如何發送給對方主機,源地址決定了其他主機如何區分數據包是由誰發送的。而SNAT的核心概念是通過轉換源地址的方式進行工作的,這是否意味著即使不配置snat,數據包依然可以到達對方網絡,只是對方網絡無法回復。

# 假設我有兩臺具有公網ipv4地址的云服務器xxx.xxx.xxx.xx1和xxx.xxx.xxx.xx2。xx1局域網內有另一臺主機x10# xx1主機
# 使用snat將源ip由xx1轉換為xx2
[root@VM-8-10-centos ~]# iptables -t nat -A POSTROUTING -s xx1 -o eth0 -j SNAT --to-source xxx.xxx.xxx.x10
# 監聽eth0網卡的icmp數據包
[root@VM-8-10-centos ~]# tcpdump -i eth0 -p icmp -nv | grep x10# xx2主機
# 監聽eth0網卡的icmp數據包
[root@VM-8-10-centos ~]# tcpdump -i eth0 -p icmp -nv 	

根據tcpdump抓包分析xx1確實發送了源地址為x10的數據包,但是從xx2主機的監聽結果看并沒有收到來自xx1或來自x10發送的數據包。或許是數據包在中途路由的過程中被丟棄了,又或者是我理解錯了??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/22371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22371.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/22371.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第十一屆藍橋杯C++青少年組中/高級組選拔賽2019年真題解析

一、單選題 第1題 一個C語言的源程序中&#xff0c;有關主函數的說法正確的是&#xff08; &#xff09;. A:可以有多個主函數 B:必須有一個主函數 C:必須有主函數和其他函數 D:可以沒有主函數 答案&#xff1a; 第2題 在下面的條件語句中&#xff08;其中s1和s2代表C語言…

計算機基礎(8)——音頻數字化(模電與數電)

&#x1f497;計算機基礎系列文章&#x1f497; &#x1f449;&#x1f340;計算機基礎&#xff08;1&#xff09;——計算機的發展史&#x1f340;&#x1f449;&#x1f340;計算機基礎&#xff08;2&#xff09;——馮諾依曼體系結構&#x1f340;&#x1f449;&#x1f34…

如何在GlobalMapper中加載高清衛星影像?

GlobalMapper在GIS行業幾乎無人不知&#xff0c;無人不曉&#xff0c;但它可以直接加載衛星影像也許就不是每個人都知道的了。 這里就來分享一下如何在GlobalMapper中加載高清衛星影像&#xff0c;并可以在文末查看領取軟件安裝包和圖源的方法。 如何加載高清圖源 首先&…

45-1 waf繞過 - 文件上傳繞過WAF方法

環境準備: 43-5 waf繞過 - 安全狗簡介及安裝-CSDN博客然后安裝dvwa靶場:構建完善的安全滲透測試環境:推薦工具、資源和下載鏈接_滲透測試靶機下載-CSDN博客打開dvwa靶場,先將靶場的安全等級調低,然后切換到文件上傳 一、符號變異 在PHP中,由于其弱類型特性,有時候僅有一…

4月份新出!外網爆火的大模型黑書!內行人都在學~

今天給大家推薦一本4月份才新出的大型語言模型&#xff08;LLM&#xff09;的權威教程《基于GPT-3、ChatGPT、GPT-4等Transformer架構的自然語言處理》&#xff01;Google工程總監Antonio Gulli作序&#xff0c;一堆大佬推薦&#xff01;這含金量不用多說&#xff0c;在這里給大…

Docker容器搭建ELK日志分析系統

Docker容器搭建ELK日志分析系統 文章目錄 Docker容器搭建ELK日志分析系統資源列表基礎環境一、創建容器網絡二、創建容器掛載目錄三、構建systemctl鏡像三、構建Elasticsearch鏡像3.1、構建Elasticsearch3.2、構建鏡像3.3、啟動容器3.4、進入容器3.5、查看節點信息 四、構建Log…

NLP基礎——語言模型(動手學深度學習)

語言模型 聯合概率 給定文本序列 x 1 , ? , x t x_1,\cdots,x_t x1?,?,xt?&#xff0c;語言模型的目標是估計聯合概率 P ( x 1 , ? , x t ) P(x_1,\cdots,x_t) P(x1?,?,xt?). 這里的 x t x_t xt? 可以認為是文本序列在時間步 t t t 處的觀測或標簽&#xff0c;而…

亞信安慧AntDB:卓越的拓展性和靈活性

在當今這個信息爆炸的時代&#xff0c;企業對數據處理的需求不斷增長&#xff0c;傳統的數據庫系統往往難以應對海量數據的存儲和處理挑戰。然而&#xff0c;隨著亞信安慧AntDB的出現&#xff0c;解決這一難題的曙光終于出現在眼前。AntDB不僅僅具備了高吞吐、高并發、高性能的…

Linux系統之mv命令的基本使用

Linux系統之mv命令的基本使用 一、mv命令介紹1. mv命令簡介2. mv命令的使用結果 二、mv命令的使用幫助1. 在命令行的幫助信息2. mv常用選項 三、mv命令的基本使用1. 創建源目錄和目標目錄2. 新建測試文件3. 將源目錄文件復制到目標目錄4. 將文件進行改名5. 將目錄的所有文件轉移…

前端面試寶典總結4-手搓代碼JavaScript(數據處理)

前端面試寶典總結4之手寫代碼JavaScript&#xff08;數據處理&#xff09; 本文章 對各大學習技術論壇知識點&#xff0c;進行總結、歸納自用學習&#xff0c;共勉&#x1f64f; 上一篇&#x1f449;: 前端面試寶典總結3-JavaScript&#xff08;2&#xff09; 文章目錄 前端…

python長方形周長面積 2024年3月青少年編程電子學會python編程等級考試二級真題解析

目錄 python長方形周長面積 一、題目要求 1、編程實現 2、輸入輸出 二、算法分析 三、程序代碼 四、程序說明 五、運行結果 六、考點分析 七、 推薦資料 1、藍橋杯比賽 2、考級資料 3、其它資料 python長方形周長面積 2024年3月 python編程等級考試級編程題 一、…

matlab模擬太陽耀斑噴發

代碼 function simulate_solar_flare% 參數設置gridSize 100; % 網格大小timeSteps 200; % 時間步數dt 0.1; % 時間步長% 初始化網格[X, Y] meshgrid(linspace(-5, 5, gridSize));Z zeros(size(X));% 設置耀斑初始位置和強度flareCenter [0, 0]; % 耀斑中心位置flareRad…

【實用技巧】Unity中的Image組件

Unity中的Image組件是UI系統的核心部分&#xff0c;用于顯示圖像和紋理。以下是一些關于Unity Image組件的實用技巧&#xff1a; 使用Sprite作為Image源&#xff1a; 將Sprite直接拖拽到Image組件的Source Image字段中&#xff0c;可以快速設置顯示的圖像。 調整顏色和透明度&a…

9 -力扣高頻 SQL 50 題(基礎版)

9 - 上升的溫度 -- 找出與之前&#xff08;昨天的&#xff09;日期相比溫度更高的所有日期的 id -- DATEDIFF(2007-12-31,2007-12-30); # 1 -- DATEDIFF(2010-12-30,2010-12-31); # -1select w1.id from Weather w1, Weather w2 wheredatediff(w1.recordDate,w2.recordDat…

SolidWorks功能強大的三維設計軟件下載安裝,SolidWorks最新資源獲取!

SolidWorks&#xff0c;它憑借出色的三維建模能力&#xff0c;使得設計師們能夠輕松構建出復雜且精細的機械模型&#xff0c;大大提升了設計效率和質量。 在機械設計領域&#xff0c;SolidWorks憑借其豐富的工具和特性&#xff0c;讓設計師們能夠隨心所欲地揮灑創意。無論是零…

Flutter 中的 LayoutBuilder 小部件:全面指南

Flutter 中的 LayoutBuilder 小部件&#xff1a;全面指南 Flutter 是一個功能豐富的 UI 框架&#xff0c;它允許開發者使用 Dart 語言來構建高性能、美觀的跨平臺應用。在 Flutter 的布局系統中&#xff0c;LayoutBuilder 是一個強大的組件&#xff0c;它可以根據父容器的約束…

家政預約小程序12用戶登錄

目錄 1 創建全局變量2 創建頁面3 搭建頁面4 實現登錄邏輯總結 在小程序中&#xff0c;登錄是一個常見的場景。比如我們在小程序預約或者購買時&#xff0c;通常要求用戶先登錄后購買。如果使用傳統方案&#xff0c;登錄這個動作其實最終的目的是為了獲取用戶的openid。而使用低…

Python學習圣經:從0到1,精通Python使用

尼恩&#xff1a;LLM大模型學習圣經PDF的起源 在40歲老架構師 尼恩的讀者交流群(50)中&#xff0c;經常性的指導小伙伴們改造簡歷。 經過尼恩的改造之后&#xff0c;很多小伙伴拿到了一線互聯網企業如得物、阿里、滴滴、極兔、有贊、希音、百度、網易、美團的面試機會&#x…

【智能體】文心智能體大賽第二季持續進行中,一起在智能體的海洋里發揮你的創意吧

目錄 背景作文小助手AI迅哥問答程序員黃歷助手比賽時間第二期賽題豐厚獎品評選說明獲獎智能體推薦文章 背景 AI應用&#xff08;智能體&#xff09;&#xff0c;持續火熱&#xff0c;一句話就能創建一個有趣、好玩的應用。 可以說一分鐘內就能創建一個有創意的智能體。 看大多…

Linux網絡-自定義協議、序列化和反序列化、網絡計算服務器的實現和Windows端客戶端

文章目錄 前言一、自定義協議傳結構體對象 序列化和反序列化什么是序列化&#xff1f;反序列化 二、計算器服務端&#xff08;線程池版本&#xff09;1.main.cc2.Socket.hpp3.protocol.hpp4.Calculator.hpp5.serverCal.hpp6.threadPool.hpp7.Task.hpp8. log.hpp 客戶端Windows客…