网络基础

网络分层模型

公有IP和私有IP

Public IP:互联网上的唯一标识,可以访问internet

Private IP:不可在互联网上使用,仅供机构内部使用

A类10.0.0.0--10.255.255.255(10.0.0.0/8)

B类172.16.0.0--172.31.255.255(172.16.0.0/12)

C类192.168.0.0--192.168.255.255(192.168.0.0/16)

网络地址转换NAT

Ping和telnet

Ping(ICMP):验证IP的可达性

Linux 网络命名空间

Linux Network Namespace

查看当前网络命名空间
[root@docker-node1 vagrant]# ip netns list
添加网络命名空间
[root@docker-node1 vagrant]# ip netns add test1
[root@docker-node1 vagrant]# ip netns add test2
[root@docker-node1 vagrant]# ip netns list
test2
test1
[root@docker-node1 vagrant]# sudo ip netns exec test1 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULTlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
[root@docker-node1 vagrant]# sudo ip netns exec test1 ip link set dev lo up
[root@docker-node1 vagrant]# sudo ip netns exec test1 ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULTlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00[root@docker-node2 vagrant]# ip netns exec test1 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULTlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
[root@docker-node2 vagrant]# sudo ip link set veth-test1 netns test1
[root@docker-node2 vagrant]# ip netns exec test1 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULTlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: veth-test1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000link/ether 36:2d:2a:23:8e:af brd ff:ff:ff:ff:ff:ff

添加了一个test2的网络命名空间
[root@docker-node2 vagrant]# ip netns add test2
绑定到veth-test2的设备
[root@docker-node2 vagrant]# sudo ip link set veth-test2 netns test2
查看命名空间的ip link
[root@docker-node2 vagrant]# ip netns exec test2 ip link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULTlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
5: veth-test2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000link/ether 2e:00:77:8a:33:57 brd ff:ff:ff:ff:ff:ff给网络命名空间添加ip并绑定
sudo ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-testl
sudo ip netns exec test2 ip addr add 192.168.1.2/24 dev veth-test2将两个网络命名空间绑定的ip设备启动
sudo ip netns exec test1 ip link set dev veth-testl up
sudo ip netns exec test2 ip link set dev veth-test2 up查看完整的命名空间ip信息
[root@docker-node2 vagrant]# ip netns exec test1 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: veth-testl: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 36:2d:2a:23:8e:af brd ff:ff:ff:ff:ff:ffinet 192.168.1.1/24 scope global veth-testlvalid_lft forever preferred_lft foreverinet6 fe80::342d:2aff:fe23:8eaf/64 scope linkvalid_lft forever preferred_lft forever
[root@docker-node2 vagrant]# ip netns exec test2 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
5: veth-test2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 2e:00:77:8a:33:57 brd ff:ff:ff:ff:ff:ffinet 192.168.1.2/24 scope global veth-test2valid_lft forever preferred_lft foreverinet6 fe80::2c00:77ff:fe8a:3357/64 scope linkvalid_lft forever preferred_lft forever测试命名空间的 互通性 ping
[root@docker-node2 vagrant]# ip netns exec test2 ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.110 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.202 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.052 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.040 ms

Docker Network

单机网络Bridge Network
Host Network
None Network多机网络:overlay Network

Bridge 模式

每个容器之间有独立的命名空间(ip),相互之间可以ping 通,

Docker Bridge0 在宿主机上桥接出来的一块命名空间,通常为 172.17.0.2, 里面容器的ip一般在该网段随机分布。除非容器暴露了外面的,否则外面宿主机不能访问

[root@docker-node2 ~]# sudo docker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done"
8f7cbad560db6d4c604395f3ee16c15d6fc4073e3010134e2520aed780b6198d
​
[root@docker-node2 ~]# docker exec test1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueuelink/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
9: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueuelink/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
​
查看网桥
brctl show

新创建一个容器,新增了一个命名空间

Bridge Network 网桥

查看网桥

新创建一个容器后,会在网桥上有一个新的接口

通信

在docker0网桥上面创建的容器关联
​
[vagrantedocker-node1~]# sudo docker run -d --name test2 --link test1 busybox /bin/sh -c "while true;do sleep 3600;done"
test2 link test1  容器test2 link 容器test1
2 --> 1 ping 通
1 --> 2 ping 不通创建网桥
[root@docker-node2 ~]# docker network create -d bridge my-bridge
d7b1a39ddd6cd0fff8a7f2ff57a3391e9ac68f8bf09b05460f7d1200c712bc78
[root@docker-node2 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-d7b1a39ddd6c         8000.0242ed73f4fa       no
docker0         8000.02420e28dc52       no              veth8bb0084vethced44cb
​
​
[root@docker-node2 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
0e7556320fdd        bridge              bridge              local
0b32df326904        host                host                local
d7b1a39ddd6c        my-bridge           bridge              local
e2db49527111        none                null                local
​重新创建test2
​
[root@docker-node2 ~]#  sudo docker run -d --name test2 --network my-bridge busybox /bin/sh -c "while true;do sleep 3600;done"
7eb76c6ca9f6123811fc75cae03e571f669b308c2b6bad0cfbdd598508629f0d
[root@docker-node2 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-d7b1a39ddd6c  8000.0242ed73f4fa       no              vethee72a47
docker0         8000.02420e28dc52       no              veth8bb0084vethced44cb

docker network inspect my-bridge

sudo docker run -d --name test3 --network my-bridge busybox /bin/sh -c "while true;do sleep 3600;done"test2 和 test 3 在同一个网桥my-bridge (自己创建的),可以通过名称ping

在test 2测试ping test3

docker inspect my-bridge

总结

  • docker network connect my-bridge test1

    • tes2和test 1在docker 默认创建的bridge上
    • 但是互相只能通过ip来ping通、不能通过名字
  • 自己创建的bridge 能够解决互相ip,名字都ping通

容器的端口映射

docker run --name web -d -p 80:80 nginx
Container Port Map 端口映射 

host & none 模式

1. none 没有ip,只有宿主可以访问

[vagrant@docker-node1~]$ sudo docker run -d --name test1 --network none busybox /bin/sh -c "while true;do sleep 3600;done"
da2143722efb01827070a4aa5ce52857f9269f5ed20f65f4cb39977d39141913

谁都不能访问,只能 sudo docker exec -it test1 /bin/sh

2. host 共享主机的网络

[vagrant@docker-node1 ~]$ sudo docker run -d --name test1 --network host busybox /bin/sh -c "while true;do sleep 3600;done"
18e175e07b5e15c941f848fa5d4105357d70dd0f03f8bdb55791c0997875074b

容器内部网络跟宿主机一样

Docker 网络基础原理相关推荐

  1. Sniff网络基础原理和软件实现技巧详解

    Sniff网络基础原理和软件实现技巧详解 前言 SNIFF真是一个古老的话题,关于在网络上采用SNIFF来获取敏感信息已经不是什么新鲜事,也不乏很多成功的案例,那么,SNIFF究竟是什么呢? SNIF ...

  2. 【狂神说】Docker网络基础笔记整理+重点详解

    目录 前言 容器互联(Docker网络) 1.1 Docker的网卡--docker0 1.2 容器互联的方法 1.2.1 使用 --link命令: 1.2.2 自定义docker网络解决 --lin ...

  3. linux协议栈网桥部分之cam表操作,Docker网络基础 - Linux网桥工作原理与实现

    本文转载自微信公众号「Linux内核那些事」,作者songsong001 .转载本文请联系Linux内核那些事公众号. Linux 的 网桥 是一种虚拟设备(使用软件实现),可以将 Linux 内部多 ...

  4. docker网络基础配置

    一.端口映射实现访问容器 1.1.-P参数(大写),会随机映射一个端口至容器内部开放的端口 [root@CentOS702 ~]# docker run -d -P training/webapp p ...

  5. Docker网络和服务发现

    [编者的话] 本文是<Docker网络和服务发现>一书的全文,作者是Michael Hausenblas.本文介绍了Docker世界中的网络和服务发现的工作原理,并提供了一系列解决方案. ...

  6. Docker 内部 DNS 原理

    本篇是第七部分"网络篇"的第六篇.在这个部分,我会为你由浅入深的介绍 Docker 网络相关的内容.包括 Docker 网络基础及其实现和内部原理等.上篇,我为你介绍了 Docke ...

  7. 02@Docker网络介绍及网络模式的使用

    文章目录 Docker网络的介绍 一.Docker网络原理 1.docker网络介绍 2.Docker网络原理 二.docker网络基础 [网络命名空间] 1.Veth 设备对 2.网络原理实验的实现 ...

  8. 【k8s】docker网络模式(必知)

    docker网络部分的视频我看了很多,讲解最透彻的还是https://www.bilibili.com/video/BV123411y7TB?p=8 获取本文方式:见谷粒商城文尾,备注[docker网 ...

  9. Docker的基础知识详解(镜像,容器,网络)

    文章目录 Docker 一. Docker的概述 1. Docker为什么会出现 2. Docker能干什么 3. Docker的组成 4. Docker的运行流程 5. Docker的底层原理 二. ...

最新文章

  1. 柏林噪声产生火焰等纹理
  2. 备忘录:CISCO router ENABLE crack
  3. .NET Remoting Basic(6)-配置文件
  4. 【STM32 .Net MF开发板学习-21】蓝牙遥控智能小车(PC模式)
  5. buu [HDCTF2019]bbbbbbrsa
  6. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(六)完美移动
  7. 如何向妻子解释OOD(转)
  8. godaddy ssl_免费在线Linux培训,GoDaddy切换到OpenStack等
  9. vue seo关键词设置_网站文章中如何设置关键词才更有利于SEO优化?
  10. 【转】格雷斯特(Glest)Glest(开源RTS游戏)编译备忘
  11. 2021-09-13 QCC3003 回连
  12. 小程序开发工具命令行启动配置
  13. Web实时语音/视频聊天/文件传输
  14. 【SIGIR2017满分论文】IRGAN:大一统信息检索模型的博弈竞争
  15. 【MOTRIX】使用motrix下载百度云文件
  16. 网站备案其实是服务器备案,国内服务器为什么需要备案?国外服务器备案吗?
  17. 终于学完了阿里P8架构师7年心血整理总结的微服务实战文档
  18. C++之详解coredump
  19. 医学知识---之T1,T2,flair,stir
  20. java毕业生设计信管专业毕业生就业管理信息系统计算机源码+系统+mysql+调试部署+lw

热门文章

  1. 商品审核网页界面_商品模块数据库表解析(二)
  2. python 切换环境_python 使用 pyenv 多环境切换
  3. 深入理解javascript原型和闭包(12)——简介【作用域】
  4. 三十五、数据仓库的设计和应用
  5. Python-csvkit:强大的CSV文件命令行工具
  6. matplotlib可视化必知必会富文本绘制方法
  7. 初学者 | 10个例子带你了解机器学习中的线性代数
  8. 这100道Python面试题,你会几道?
  9. 十分钟用 Python 绘制了近十年编程语言趋势图
  10. 我用Python分析了“青你2”漂亮小姐姐的颜值,结果真香了!