华为 18 级工程师三年心血终成趣谈网络协议文档(附大牛讲解)
前言
虽然在大学的时候大家都学过网络协议 ,但是肯定感觉网络协议的知识点非常多 ,非常复杂。学的时候就浑浑噩噩,真正到了实践中更是糊里糊涂,一旦工作中遇到了网络问题,除了会简单地 ping 几下 ,基本没有什么解决问题的思路。 然而当拿起书来学习,或者看一些官方文档的时候,各种生僻的专业词汇马上扑面而来,每了解其中的一个词汇 ,都要看多 篇文章,读多本书,导致一篇即使很短的有关网络技术的文章也要几个星期才能看完。
这严重打击着大家的自信心,并且很容易让人在技术的海洋中迷失自我,从而产生“从人门到放弃”的冲动!
网络协议和变化万千的前沿技术不同,它的变化比较小,一旦掌握到一定程度,就会一直受益 技术变 很快,这 几年 OpenStack、docker、Mesos、kubernetes、微服务、serverless、AIops 等技术层出不穷,让大多数技术人员应接不暇,但是掌握了基础知识 后,反而发现很多技术看起来“轰轰烈烈”, 脱下外衣,其实本质还是操作系计算机网络、算法与数据结构、编译原理 、计算机组成与系统结构 。
如果基础打好了,最大的收益就是,在最新的技术出来以后,只要经过短时间的学习,就很容易上手,就能在新技术的滚滚浪潮中保持快速学习的能力。
既然网络协议既是基础,又绕不过去,还这么难,但是趟过去之后又不怎么变,收益越来越大,那为什么不写一文档,给大家一点可借鉴的经验,帮助大家尽快掌握网络协议呢?
那么,今天咱们就从目录、主要包括的内容和总结三部分给大家进行网络协议的拓展学习,希望大家能够喜欢!!
目录
主要内容
主要把本文内容分为九章来给大家介绍:
第 1 章通信协议概述.
1.1 为什么要学习网络协议
1.2 网络分层的真实含义,总结一下本节的内容,理解网络协议的工作模式,有以下两个小窍门。
始终想象自己是一个处理网络包的程序:如何拿到网络包,如何根据规则进行处理,如何发出去。
始终牢记一个原则:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。
1.3 ifconfig:熟悉又陌生的命令行,通过本节的学习希望你能记住以下的知识点,后面都能用得上:
I 地址有定位功能,MAC 地址类似身份证号,无定位功能。
CIDR 可以用来判断是不是本地地址。
IP 地址分公网 IP 地址和私网 IP 地址。后面的章节中会谈到“出国门”,就与此有关。
1.4 DHCP 与 PXE:IP 地址是怎么来的,又是怎么没的,本节内容总结如下:
DHCP 主要租给客户端 IP 地址,这个过程和租房很像,要商谈、签约、续租,广播还不能“抢单”。
DHCP 会给客户端推荐“装修队”PXE 来安装操作系统,这在云计算领域大有用处。
第 2 章从二层到三层.
2.1 从物理层到 MAC 层:如何在宿舍里自己组网玩联机游戏,本节有 3 个重点需要记住:
MAC 层是用来解决多路访问的“堵车”问题的。
ARP 是通过“吼”的方式来寻找目标 MAC 地址的,“吼”完之后会记住一段时间,这个叫作缓存。
交换机是有 MAC 地址学习能力的,学会了它就能知道谁在哪里,不用广播了。
2.2 交换机与 VLAN:办公室太复杂,我要回学校,本节总结如下:
·当交换机的数目越来越多时,会遭遇环路问题,让广播包迷路。这时就需要使用 STP 通过“比武论剑”的方式,将有环路的图变成没有环路的树,从而解决环路问题。
·交换机数目过多会导致隔离问题。可以通过 VLAN 形成虚拟局域网,从而解决广播问题和安全问题。
2.3ICMP 与 ping:投石问路的侦察兵,本节内容总结如下:
·ICMP 相当于网络世界的侦察兵。本节讲解了两种类型的 ICMP 报文,一种是主动探查的查询报文,一种异常报告的差错报文。
ping 使用查询报文,Traceroute 使用差错报文。
2.4 世界这么大,我想出网关:欧洲十国游与玄奘西行,本节总结如下:
·如果离开局域网,就需要经过网关。
·路由器是一个三层设备,里面有如何寻找下一跳的规则。
·经过路由器之后 MAC 头要变,如果 I 地址不变,相当于不换护照的“欧洲十国游”,如果 IP 地址改变,相当于换护照的“玄奘西行”。
2.5 路由协议:“西出网关无故人""敢问路在何方”,本节总结如下:
路由分静态路由和动态路由,静态路由可以配置复杂的策略路由,控制转发策略。
动态路由有两种主流协议,距离矢量路由协议和链路状态路由协议。分别对应 BGP 和 OSPF 这两个实现。
第 3 章重要的传输层.
3.1 UDP:虽然简单但是可以定制化,本节总结如下:
如果将 TCP 比作成熟的社会人,UDP 则是头脑简单的小朋友。TCP 复杂,UDP 简单。TCP 维护连接,UDP 谁都相信。TCP 知进退,UDP 愣头青一个,勇往直前。
·UDP 虽然简单,但它有简单的用法。它可以用在环境简单、需要多播、应用层自己控制传输的地方,例如 DHCP、VXLAN、QUIC 等。
3.2 TCP(上):虽然复杂,使用起来却轻松,本节总结如下:
· TCP 头很复杂,但是主要关注五个方面:顺序问题、丢包问题、连接维护、流量控制,以及拥塞控制。
连接的建立要经过三次握手,断开要经过四次挥手。
3.3 TCP (下):西行必定多妖孽,恒心智慧消磨难,总结如下:
顺序问题、丢包问题、流量控制都是通过滑动窗口来解决的,滑动窗口其实就相当于领导和下属的工作备忘录,布置过的工作要有编号,干完了有反馈,活儿不能派太多,也不能太少。
拥塞控制是通过拥塞窗口来解决的,相当于往管道里面倒水,快了容易溢出,慢了浪费带宽,要摸着石头过河,找到最优值。
3.4 socket: Talk is cheap, show me the code ,本节总结如下:
你需要记住在基于 TCP 和 UDP 的 socket 程序的函数调用过程中,客户端和服务端都需要调用哪些函数。
写一个能够支撑大量连接的高并发的服务端不容易,需要多进程、多线程,而 epoll 能解决 C10K 问题。
第 4 章常用的应用层.
4.1 HTTP:看个新闻原来这么麻烦,本节总结如下:
HTTP 很常用,也很复杂,重点记住 GET、POST、PUT、DELETE 这几个方法,以及重要的首部字段。
HTTP2.0 通过头压缩、分帧、二进制编码、多路复用等技术提升性能。
QUIC 协议通过基于 UDP 自定义的连接、重传、多路复用、流量控制等机制进一步提升性能。
4.2 HTTPS:点外卖的过程原来这么复杂,本节总结如下:
加密分对称加密和非对称加密。对称加密效率高,但是解决不了密钥传输问题;非对称加密可以解决这个问题,但是效率低。
非对称加密需要通过证书和权威机构来验证公钥的合法性。
HTTPS 是综合了对称加密和非对称加密的 HTTP。既保证传输安全,也保证传输效率。
4.3 流媒体协议:如何在直播里看到帅哥美女,本节总结如下:
编码两大流派达成了一致,都是通过关于时间、空间的各种算法来压缩数据的。
压缩好的数据,为了方便传输会组成一系列 NALU,按照帧和片依次排列。
排列好的 NALU 在网络传输时,要按照 RTMP 包的格式进行包装,RTMP 包会拆分成块进行传输。
推送到流媒体服务器的视频流经过转码和分发,可以被客户端通过 RTMP 拉取,然后组合为 NALU,解码成视频格式进行播放。
4.4 P2P 协议:下载电影,分布式协议速度快,本节总结如下:
下载一个文件可以使用 HTTP 或 FTP,这两种协议都使用集中下载的方式,而 P2P 则换了一种思路,采取去中心化下载的方式。
P2P 也有两种下载方式,一种是依赖于 tracker 服务器,即元数据集中,文件数据分散;另一种基于分布式哈希算法,元数据和文件数据全部分散。
第 5 章陌生的数据中心.
5.1 DNS:网络世界的地址簿,本节总结如下:
DNS 是网络世界的地址簿,可以通过域名查询地址,由于 DNS 服务器是按照树状结构组织的,因而域名查找使用的是递归的方法,并通过缓存的方式增强性能。
域名和 IP 地址相互映射的过程给了应用基于域名做负载均衡的机会,可以实现简单的负载均衡,也可以根据地址和运营商实现全局负载均衡。
5.2 HTTPDNS:网络世界的地址簿也会指错路,本节需要记住以下两个重点:
·传统的 DNS 服务器有很多问题,例如解析慢、更新不及时。因为缓存、转发 NAT 问题导致客户端误会自己所在的位置和所属的运营商,从而影响流量的调度。
·HTTPDNS 服务器通过客户端 SDK,服务端通过 HTTP 直接调用解析 DNS 服务器的方式,绕过了传统 DNS 服务器的缺点,实现了智能调度。
5.3 CDN:你去小卖部取过快递吗,本节需记住以下两个重点:
CDN 和电商系统的分布式仓储系统-样,分为中心节点、区域节点、边缘节点,将数据缓存在离用户最近的位置。
CDN 最擅长的是缓存静态数据,除此之外还可以缓存流媒体数据,这时要注意使用防盗链。CDN 也支持动态数据缓存,可用模式有两种:一种是边缘计算的生鲜超市模式,另一种 是链路优化的冷链运输模式。
5.4 数据中心:我是开发商,自己拿地盖别墅,本节需要记住以下 3 个重点:
数据中心分为三层。服务器连接到接入层,然后是汇聚层,接着是核心层,最外面是边界路由器和安全设备。
数据中心的所有链路都要高可用。服务器可以绑定网卡,交换机可以堆叠,三层设备可以通过等价路由,二层设备可以通过 TRILL 协议实现高可用。
随着云和大数据的发展,东西流量相较于南北流量更加重要,因而演进出叶脊网络结构。
5.5 VPN:朝中有人好做官,本节总结如下:
VPN 可以将一个机构的多个数据中心通过隧道连接起来,让机构感觉在一个数据中心里面一样,如同自驾游通过琼州海峡。
完全基于软件的 IPsec VPN 可以保证私密性、完整性、真实性,简单便宜,但是性能稍微差一些。
MPLS-VPN 综合了 I 转发模式和 ATM 标签转发模式的优势,性能较好,但是需要从运营商处购买。
5.6 移动网络:去巴塞罗那,手机也上不了“脸书”,本节总结如下:
移动网络的发展历程从 2G 到 3G,再到 4G,功能逐渐从以打电话为主转变为以上网为主。
请记住 4G 网络的结构,有 eNodeB、MME、SGW、PGW 等,分控制面协议和数据面协议,你可以对照这个结构,试着说出手机上网的流程。
即便你在国外运营商的范围内上网,也要由国内运营商控制,因而也上不了“脸书”。
第 6 章云计算中的网络.
6.1 云中网络:自己拿地成本高,购买公寓更灵活,本节总结如下:
云计算的关键技术是虚拟化,这里我们重点关注的是虚拟网卡通过打开 TUN/TAP 字符设备的方式,将虚拟机内外连接起来。
云中的网络重点关注四个方面:共享、隔离、互通、灵活。其中共享和互通有两种常用的方式,分别是桥接和 NAT,隔离可以通过 VLAN 的方式来进行。
6.2 软件定义网络:共享基础设施的小区物业管理办法,本节总结如下:
用 SDN 控制整个云里面的网络,就像小区保安从总控室管理整个物业是一样的,将控制面和数据面进行了分离。
Open vSwitch 是一种开源的虚拟交换机的实现,它能对经过自己的网络包做任意修改,从而使得云对网络的控制十分灵活。
将 Open vSwitch 引入云之后,可以使配置简单而灵活,并且可以解耦物理网络和虚拟网络。
6.3 云中网络之安全:虽然不是土豪,也需要基本保障,本节总结如下:
云中的安全策略的常用方式是使用 iptables 的规则,请记住它的 5 个链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。
iptables 的表分为 4 种: raw、mangle、nat、filter。其中安全策略主要在 filter 表中实现,而虚拟网络和物理网络地址的转换主要在 nat 表中实现。
6.4 云中网络之 QoS:室友疯狂下电影,我该怎么办,本节总结如下:
云中的流量控制主要是通过队列进行的,排队规则分为两大类:无类别排队规则和基于类别的排队规则。
在云中网络 Open vSwitch 中,主要使用 HTB 将总的带宽在一棵树上按照配置的比例进行分配,并且在一个分支不使用流量时,借给另外的分支,从而增强带宽利用率。
6.5 云中网络之隔离 GRE、VXLAN:虽然住一个小区,也要保护隐私,本节总结如下:
要对不同用户的网络进行隔离,解决 VLAN 数目有限的问题,需要通过 Overlay 的方式,常使用的是 GRE 和 VXLAN。
GRE 是一种点对点的隧道模式,VXLAN 是支撑组播的隧道模式,它们都要在某个隧道端口进行封装和解封装,实现跨物理机的互通。
Open vSwitch 可以作为隧道端口,通过设置流表规则在虚拟机网络和物理机网络之间进行转换。
第 7 章容器技术中的网络.
7.1 容器网络:来去自由的日子,不买公寓去合租,本节总结如下:
容器是一种比虚拟机更加轻量级的隔离方式,主要通过 namespace 和 cgroup 技术进行资源的隔离,namespace 负责“看起来”隔离,cgroup 负责“用起来”隔离。
容器网络连接到物理网络的方式和虚拟机很像,通过桥接的方式可以实现一台物理机上容器的相互访问,如果要访问外网,最简单的方式还是通过 NAT。
7.2 容器网络之 Flannel:每人一亩三分地.,本节总结如下:
基于 NAT 的容器网络模型在微服务架构下有两个问题,一个是 IP 地址重叠,另一个是端口冲突,需要通过 Overlay 网络保持跨节点的连通性。
Flannel 是跨节点容器网络方案之一,它提供的 Overlay 方案主要有两种方式,一种是 UDP 在用户态封装,另一种是 VXLAN 在内核态封装,而 VXLAN 的性能更好一些。
7.3 容器网络之 Calico:为了高效说出善意的谎言,本节总结如下:
Calico 推荐使用物理机作为路由器,这种模式没有虚拟化开销,性能比较高。
Calico 的主要组件包括路由、iptables 的配置组件 Felix、路由广播组件 BGP Speaker,以及大规模场景下的 BGP 路由反射器。
为解决跨网段的问题,Calico 还有一种 IPIP 模式,即在两台机器之间打一个隧道,两台机器分别位于隧道两端,这样本来不是邻居的两台机器,因为隧道变成了相邻的机器。
7.4 RPC 概述:远在天边,近在眼前,本节总结如下:
远程调用看起来用 socket 编程就可以了,其实是很复杂的,要解决协议约定问题、传输协议问题和服务发现问题。
Bruce Jay Nelson 的论文、早期 ONC RPC 框架,以及 NFS 的实现,给出了解决这三大问题的示范性实现,即协议约定要公用协议描述文件并通过这个文件生成 Stub 程序,RPC 的传输一般需要一个状态机,同时需要另外一个进程专门做服务发现。
第 8 章微服务相关协议.
8.1 基于 XML 的 SOAP:不要说 NBA,请说美国职业篮球联赛,本节总结如下:
原来的二进制 RPC 有很多缺点:格式要求严格、修改过于复杂、不面向对象。于是产生了基于文本的调用方式——基于 XML 的 SOAP。
SOAP 的三大要素:协议约定用 WSDL、传输协议用 HTTP、服务发现用 UDDL。
8.2 基于 JSON 的 RESTful 接口协议:我不关心过程,请给我结果,本节总结如下。
SOAP 过于复杂,而且设计是面向动作的,因而往往因为架构问题导致并发量上不去。
RESTful 不仅仅是一个 API,还是一种架构模式,主要面向资源提供无状态服务,有利于横向扩展应对高并发。
8.3 二进制类 RPC 协议:还是叫 NBA 吧,总说全称多费劲,本节总结如下:
RESTful API 对于接入层和 Controller 层之外的调用,已基本形成事实标准,但随着内部
服务之间的调用越来越多,性能也越来越重要,于是 Dubbo 的 RPC 框架有了用武之地。
Dubbo 通过注册中心解决服务发现问题,通过 Hessian2 序列化解决协议约定的问题,通过 Netty 解决网络传输的问题。
在更加复杂的微服务场景下,Spring Cloud 的 RESTful 方式在内部调用时也会被考虑,重要的是 JAR 包的依赖和管理问题。
8.4 跨语言类 RPC 协议:交流之前,双方先交换一下专业术语表,本节总结如下:
gRPC 是一种二进制、性能好、跨语言、更灵活,同时可以进行服务治理的多快好省的
gRPC 框架,唯一的不足就是要写协议文件。
gRPC 在序列化时使用 Protocol Buffers,网络传输时使用 HTTP 2.0,服务治理时可以使用基于 Envoy 的 Service Mesh。
第 9 章网络协议知识串讲.
9.1 知识串讲:用"双*"的故事串起网络协议的碎片知识(上),
9.2 知识串讲:用"双*"的故事串起网络协议的碎片知识(中),
9.3 知识串讲:用"双*“的故事串起网络协议的碎片知识(下),
9.4 搭建—个网络实验环境:授人以鱼不如授人以渔,
这份【趣谈网络协议】文档共有 435 页,需要完整版的朋友,可以转发此文关注小编,**点击这里,获得文档领取方式**
当然,单单有文档看是远远不够的,还有视频和相匹配的课件进行学习提升,努力把计算机网络这一块儿给搞明白,相信一定会有不凡的人生!!
TCP/IP/网络 IO 学习视频
TCP/IP 网络协议
网络 IO
还有课件分享
IO 课件
TCP/IP 课件
TCP/IP/IO 网络通信视频和课件获取,转发关注小编,
**点击这里,获得文档领取方式**
好了,今天就分享到这里了,希望大家能够好好学习,把计算机网络这一块儿给提升上来,也希望本文能够得到大家的喜欢!!
评论