趣谈网络协议
刘超
网易研究院云计算技术部首席架构师
立即订阅
37978 人已学习
课程目录
已完结 51 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为技术牛人?先搞定网络协议!
免费
第一模块 通信协议综述 (4讲)
第1讲 | 为什么要学习网络协议?
第2讲 | 网络分层的真实含义是什么?
第3讲 | ifconfig:最熟悉又陌生的命令行
第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?
第二模块 底层网络知识详解:从二层到三层 (5讲)
第5讲 | 从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?
第6讲 | 交换机与VLAN:办公室太复杂,我要回学校
第7讲 | ICMP与ping:投石问路的侦察兵
第8讲 | 世界这么大,我想出网关:欧洲十国游与玄奘西行
第9讲 | 路由协议:西出网关无故人,敢问路在何方
第二模块 底层网络知识详解:最重要的传输层 (4讲)
第10讲 | UDP协议:因性善而简单,难免碰到“城会玩”
第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松
第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难
第13讲 | 套接字Socket:Talk is cheap, show me the code
第二模块 底层网络知识详解:最常用的应用层 (4讲)
第14讲 | HTTP协议:看个新闻原来这么麻烦
第15讲 | HTTPS协议:点外卖的过程原来这么复杂
第16讲 | 流媒体协议:如何在直播里看到美女帅哥?
第17讲 | P2P协议:我下小电影,99%急死你
第二模块 底层网络知识详解:陌生的数据中心 (6讲)
第18讲 | DNS协议:网络世界的地址簿
第19讲 | HTTPDNS:网络世界的地址簿也会指错路
第20讲 | CDN:你去小卖部取过快递么?
第21讲 | 数据中心:我是开发商,自己拿地盖别墅
第22讲 | VPN:朝中有人好做官
第23讲 | 移动网络:去巴塞罗那,手机也上不了脸书
第三模块 热门技术中的应用:云计算中的网络 (5讲)
第24讲 | 云中网络:自己拿地成本高,购买公寓更灵活
第25讲 | 软件定义网络:共享基础设施的小区物业管理办法
第26讲 | 云中的网络安全:虽然不是土豪,也需要基本安全和保障
第27讲 | 云中的网络QoS:邻居疯狂下电影,我该怎么办?
第28讲 | 云中网络的隔离GRE、VXLAN:虽然住一个小区,也要保护隐私
第三模块 热门技术中的应用:容器技术中的网络 (3讲)
第29讲 | 容器网络:来去自由的日子,不买公寓去合租
第30讲 | 容器网络之Flannel:每人一亩三分地
第31讲 | 容器网络之Calico:为高效说出善意的谎言
第三模块 热门技术中的应用:微服务相关协议 (5讲)
第32讲 | RPC协议综述:远在天边,近在眼前
第33讲 | 基于XML的SOAP协议:不要说NBA,请说美国职业篮球联赛
第34讲 | 基于JSON的RESTful接口协议:我不关心过程,请给我结果
第35讲 | 二进制类RPC协议:还是叫NBA吧,总说全称多费劲
第36讲 | 跨语言类RPC协议:交流之前,双方先来个专业术语表
第四模块 网络协议知识串讲 (4讲)
第37讲 | 知识串讲:用双十一的故事串起碎片的网络协议(上)
第38讲 | 知识串讲:用双十一的故事串起碎片的网络协议(中)
第39讲 | 知识串讲:用双十一的故事串起碎片的网络协议(下)
第40讲 | 搭建一个网络实验环境:授人以鱼不如授人以渔
答疑与加餐 (9讲)
协议专栏特别福利 | 答疑解惑第一期
协议专栏特别福利 | 答疑解惑第二期
协议专栏特别福利 | 答疑解惑第三期
协议专栏特别福利 | 答疑解惑第四期
协议专栏特别福利 | 答疑解惑第五期
加餐1 | 测一测:这些网络协议你都掌握了吗?
加餐2 | 创作故事:我是如何创作“趣谈网络协议”专栏的?
加餐3 | “趣谈网络协议”专栏食用指南
第2季回归 | 这次我们来“趣谈Linux操作系统”
结束语 (1讲)
结束语 | 放弃完美主义,执行力就是限时限量认真完成
趣谈网络协议
登录|注册

第29讲 | 容器网络:来去自由的日子,不买公寓去合租

刘超 2018-07-23

如果说虚拟机是买公寓,容器则相当于合租,有一定的隔离,但是隔离性没有那么好。云计算解决了基础资源层的弹性伸缩,却没有解决 PaaS 层应用随基础资源层弹性伸缩而带来的批量、快速部署问题。于是,容器应运而生。

容器就是 Container,而 Container 的另一个意思是集装箱。其实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是标准。

在没有集装箱的时代,假设要将货物从 A 运到 B,中间要经过三个码头、换三次船。每次都要将货物卸下船来,弄的乱七八糟,然后还要再搬上船重新整齐摆好。因此在没有集装箱的时候,每次换船,船员们都要在岸上待几天才能干完活。

有了尺寸全部都一样的集装箱以后,可以把所有的货物都打包在一起,所以每次换船的时候,一个箱子整体搬过去就行了,小时级别就能完成,船员再也不用耗费很长时间了。这是集装箱的“打包”“标准”两大特点在生活中的应用。

那么容器如何对应用打包呢?

学习集装箱,首先要有个封闭的环境,将货物封装起来,让货物之间互不干扰,互相隔离,这样装货卸货才方便。

封闭的环境主要使用了两种技术,一种是看起来是隔离的技术,称为namespace,也即每个 namespace 中的应用看到的是不同的 IP 地址、用户空间、程号等。另一种是用起来是隔离的技术,称为cgroup,也即明明整台机器有很多的 CPU、内存,而一个应用只能用其中的一部分。

© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《趣谈网络协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(21)

  • 小文
    我怎么感觉干运维的才能理解这么深
    2018-08-14
    1
    15
  • 贾鹏
    问题1,由于nat导致网络性能有损耗,而且物理机端口被占用,当容器多的时候对于物理机端口的占用更加明显
    问题2,跨物理机间的容器通信,主要的思路是构造扁平化网络模型,主要有cnm和cni模型,支持很多网络插件实现集群内的容器只有唯一的IP。这些插件很多,比如flannel macvlan
    另外求网络梳理图
    不分享还不能留言吗?
    2018-07-25
    12
  • _CountingStars
    突然想起来一个问题 nat网络 虽然能通信 但是别人看到的ip是你被nat之后的ip 例如服务注册这样的功能 会导致 服务注册获取的ip 是你nat之后的ip 而不是你真实的ip
    2018-07-23
    4
  • spdia
    这章比较难,主要是我对ip netns 不熟悉,还要多看几遍,再上虚拟机上操作几遍才行。

    作者回复: 鼓励操作

    2018-09-08
    2
  • 贾鹏
    问题1,nat会导致性能损耗
    问题2,主要是通过构造扁平网络,k8s主要是cni和cnm网络模型,支持很多网络插件来实现,比如flannel,macvlan等,从而让不同物理机上的容器有不同的IP
    2018-07-25
    2
  • 蜉蝣
    老师,您这句“路由表中的默认路由是去物理外网的,去 192.168.1.0/24 也即虚拟机私网,走下面的网卡,去 16.158.1.0/24 也即物理外网,走上面的网卡。” 我不太懂哪个是上面网卡,哪个是下面网卡。

    作者回复: 就是图中,路由器连着两个网卡,一个在上,一个在下

    2019-08-13
    1
  • 天然
    安全设备,例如waf,能拿到各容器的私有IP吗?还是只能拿到物理机ip?怎么判断一个攻击是针对哪个容器业务的?

    作者回复: 如果是calico而且是路由的方式,应该可以的

    2019-07-31
    1
  • 王芳
    没操作,感觉看懂了--
    等课程看完一遍,看是否实践操作 --

    作者回复: 实践好

    2019-04-10
    1
  • _CountingStars
    1.使用nat部署服务 可能会有网络性能问题
    2.容器跨节点通信 可以使用 bgp 主机路由 vxlan 等方式
    2018-07-23
    1
  • 竹林清风
    发现虚拟网络和容器这块看不懂,好多不理解

    作者回复: 上手实验一下,会好一些

    2019-08-01
  • 天王
    1 容器的定义和特性 云计算虚拟机解决的是基础医院层的弹性伸缩,容器解决的是基础资源层弹性伸缩带来的批量,快速部署问题。容器,英文是container,有另外一个意思是集装箱,可以交付的集装箱两大特性,一是打包,二是标准。2 容器如何对应用打包 2.1 首先要有个封闭环境 把东西封装起来,能互不干扰,封闭技术主要用了2种,一种是namespace,命名空间技术,看起来隔离的技术,每个namespace下面看到的是不同的ip,用户空间,一种是cgroup技术,用起来隔离的技术,一台机器有很多cpu和内存,只能用其中的一部分,集装箱的标准就是镜像,将打包那一刻的状态保存下来, 将那一刻的状态保存成文件,无论何时,都能还原成那个状态。3 namespace 网络命名空间 linux进程可以配置自己的路由规则,多个进程可能会有冲突,为了防止冲突,可以把不同的进程放到不同的命名空间下,可以独立配置网络,可以用namespace技术实现类似路由器的功能,先构建一个独立的网络空间,创建一个网卡,连接到网桥br0上,给网卡配置一个ip地址,这个地址是虚拟机网络的网关地址,为了访问外网,还需要另一个网卡连接到网桥br-ex上,这个网卡配置的ip要和物理外网网络在一个网段,可以在namespace下建立路由表,基于namespace的路由器实现完毕。4 cgroup controll group,是linux提供的一种可以限制,隔离进程使用的资源机制。cgroup能控制的资源,包括多个子系统4.1 CPU子系统使用调度程序为进程控制CPU的访问,4.2 CPU set 如果是多核CPU,可以分配单独的CPU和内存 4.3 memory 子系统设置进程内存的限制以及产生内存资源报告 4.4 blkio子系统 设置限制每个块设备的输入输出限制 4.5net_cls 这个子系统使用等级标识符来标记网络数据包,可允许流量控制程序tc识别从具体cgroup生成的数据包 cgroup提供了虚拟文件系统,作为进程分组管理和各子系统设置的用户接口,使用cgroup,一般挂载在sys/fs/cgroup目录下, 配置TC,先根据cgroup配置路由规则,比如有2个用户,建立2个net_cls,有2个进程,进程id放在各自的net_cls文件,还有flowid,这样a进程发的包和b进程发的包,有各自的flowid,根据flowid做不同的处理。5 容器网络如何融入物理网络 5.1 docker run运行容器,容器内有张网卡,容器外有张网卡连到网桥上,通过网桥实现互相访问,容器下可以创建veth pair的网卡,一边发包,另一边就能收到 5.2 docker网络如何访问外网 访问外网使用NAT模式,NAT模式分为SNAT模式和DNAT模式。容器内访问外部,需要SNAT模式。多个容器共享一个物理ip,
    发送包的时候,会将私ip转换成物理ip,并记录到conntrack表,将连接记下来,服务端返回,会根据conntrack表,将不同的连接,找到不同的私ip,对应到不同的容器
    。如果容器内的应用,跟外部交互,用不同的端口,映射到容器的80端口,访问。Docker有2种方式,做端口的映射转换,一种是通过单独的进程docker-proxy的方式,
    将进程10080转换成80端口,另一种是通过DNAT的方式,在-A PREROUTING阶段,添加一条规则。这样就实现容器和物理网络之间的互通
    2019-07-25
  • heliang
    关于问题一,跨用户空间和内核空间的性能消耗较大
    2019-04-10
  • 超超
    同一物理机上的多台虚拟机没有IP分配管理机制吗?是否存在容器之间IP冲突的问题?

    作者回复: IP分配需要IPAM

    2019-04-08
  • Leon📷
    [root@master SOURCES]# brctl show
    bridge name bridge id STP enabled interfaces
    br0 8000.000000000000 no
    docker0 8000.02422c960d0f no
    virbr0 8000.525400ad2143 yes virbr0-nic
    [root@master SOURCES]# ovs-vsctl -- add-port br0 taprouter -- set Interface taprouter type=internal -- set Interface taprouter external-ids:iface-status=active -- set Interface taprouter external-ids:attached-mac=fa:16:3e:84:6e:cc
    ovs-vsctl: no bridge named br0
    老师,这是什么情况,我不是已经创建了网桥了吗

    作者回复: 拿ovs-vsctl add-br创建试试看

    2019-02-01
  • 小宇宙
    部署应用要考虑服务发现问题,就是外部的client怎么找到这个应用并访问,还有就是一般应用都是集群化部署,还涉及到负载的均衡问题,通过NAT的方式,要暴露宿主机的ip和端口,进行端口映射和ip地址转换,一方面消耗很多宝贵的主机的网络资源,另一方面服务注册和服务发现也会变复杂。
    2018-08-27
  • Jay
    请问下docker()是什么意思?分享才能留言?
    2018-08-03
  • 夜风
    看了一遍,没看明白,我多去看几遍
    2018-07-30
  • Hurt
    老师我又来签到了 你还记得我吗😀
    2018-07-23
  • 颇忒妥
    第二个问题docker用的是macvlan
    2018-07-23
  • _CountingStars
    1.使用nat部署服务 可能会有网络性能问题
    2.容器跨节点通信 可以使用 bgp 主机路由 vxlan 等方式
    2018-07-23
收起评论
21
返回
顶部