大家好,我是Alex,今天分享计算机网络硬核系列的第一篇:计算机网络通信的理解
本篇主要是对计算机网络一些核心思想理解,属于内功心法,初学者适合入门,非初学者可以学习其设计思想,总之希望帮助大家提高对网络的理解;
深入浅出Linux网络硬核指南
本系列从网络通信理解到云计算网络等网络的不同应用角色(场景)入手,深入浅出讨论了网络设计的核心思想,网络TCP/IP协议栈的设计,网络编程核心技术,网络性能优化,云网络核心技术,网络问题排障等,计算机网络是程序员或者IT工程师必须要掌握的技能,本系列目的就是让不同读者都能加深对网络认识,打好坚实的网络基础,不管是面试中遇到的网络问题,还是工作中遇到的网络问题,都能得心应手。
计算机网络通信的理解
1 计算机网络通信的本质
1948年 香农 在 《通信的数学理论》中写道:
"通信的基本问题是在一点精确地或者近似的复现在另一个点所选取的信息"
网络通信的本质是信息的传播:
这里A与B之间的传播介质可以有很多不同层次的理解
我们可以看看计算机网络通信模型:
这张图揭示计算机网络通信中的核心元素和要解决的核心问题:
发送端:数据的生产者
怎么发送数据?
要发送数据,需要借助网卡这种硬件,OS会按照RFC标准格式来封装数据,然后把数据传给网卡,网卡把数据转化为电信号/电磁波传输出去;
数据:信息载体
怎么定义数据格式?
大家按照标准来封装报文,整个链路所有网络设备都讲相同的“语言”,这样大家才可以自由交流;
传输通道:数据传输中转站
怎么转发数据?
由于发送端和接收端:
这个时候数据需要中间节点来转发。中转节点一般是从一个网口进转到另外一个网口出,一般都是专有硬件处理,可以达到线速转发(像"直接连线一样速度");
接收端: 数据的消费者
怎么接收数据?
同样要接收数据,需要借助网卡这种硬件,把电信号/电磁波信号转化为数据传给OS,OS会按照RFC标准格式来解析,最后把真正的数据交给应用;
计算机网络通信原理本质上是比较“简单”的,好理解,如果让你去设计一个全球网络通信系统,类似当今的互联网,你会怎么设计呢?你会考虑下面的问题吗?
互联网获得的成功显而易见,它已经成为当今全球数字社会最重要的基础设施,改变我们生活方方面面,如今电脑,笔记本,电视,iPad,手机等都可以轻松上网,网络四通八达,信息随处可达,这背后到底是什么核心技术支撑这个世界最大网络通信系统。是不是你也很好奇,不妨让我们来看一看互联网是怎么解决这些问题的。
2 计算机网络通信的核心思想
网络的复杂性
那计算机网络是如何解决这些问题的呢?
在此之前,数据通信是基于电路交换的想法,就像在传统的电话网络一样,在通话前先建立专有线路,时延小,适合电话实时通信场景,电路交换体现了一种集中管理思想,所有通信资源都集中分配管理。但适合计算机网络通信吗?
数据通信的技术演进
电路交换虽然通信实时性高但不适合计算机网络通信:
报文交换提高了通信线路的利用率,不需要建立连接,但也不适合计算机网络通信:
最终计算机网络采用了分组交换技术:
计算机网络通信
理解分组交换这种设计对我们理解网络有什么好处?
网络协议要怎么设计?
理解了计算机网络的分层设计对我们理解网络有什么好处?
1. 每一层只关心自己逻辑执行,不会受到其他层的影响
2. 网络问题可以从上而下或者从下而上分层分析
报文分层封装处理:
应用层:需要用socket编程接口发送应用数据;
传输层(四层):四层采用TCP/UDP等传输协议进行数据传输;
网络层(三层):三层主要是实现路由转发;
路由表主要是存储路由条目,IP层采用最长匹配算法,查询路由再再转发:
链路层(二层):
根据接口对应的链路层协议(如以太网)组装报文:
邻居表主要是保存目的IP地址对应的mac地址,mac地址是2层以太网节点标识,一般通过ARP协议报文动态学习,也可以静态配置指定:
记录在ARP表里面:
ARP表主要是给报文添加mac头部:
二层转发报文:
主要二层设备(桥,交换机等)用来根据目的mac地址查找转发端口,实现二层转发;
物理层: 主要是网卡驱动,网卡芯片处理,把数据转化电或者光信息或者无线信号;
网络分层分析可以参考: 云网络丢包故障定位全景指南
随着互联网规模越来越大,计算机处理性能提高,大量数据包流向网络,必然会加剧网络拥塞,当网络发生拥塞时,一般会出现数据丢失,时延增加,吞吐量下降,严重时甚至会导致“拥塞崩溃“。
拥塞控制需要确保网络能够承载用户提交的通信量,是一个全局性问题,涉及主机、路由器等很多因素:互联网采用TCP拥塞控制算法来控制系统的容量,核心思想是主动退让机制,发现网络拥塞(丢包或者延时加大),就主动减少发包量,我为人人,人人为我,最终解除拥塞,达到共赢局面:
在终端系统上通常根据接受到的ACK(Acknowledge character)确认包中包含的信息来调整拥塞控制窗口的大小,进而控制TCP连接的发送速率,譬如:TCP Tahoe, TCP Reno, TCP Vegas, TCP NewReno, TCP BIC, TCP CBIC, BBR等算法;
在网络中间设备上(路由器、防火墙、交换机等)的拥塞控制算法(AQM-Active Queue Management-主动队列管理)通常根据设备中的缓存队列长度信息对网络拥塞控制程度进行判断,并将拥塞控制信息显示或隐式地告知端点,端点根据获得的拥塞控制信息对自身发送速率进行调整,譬如:FIFO, RED(Random Early Detection), ECN(Explicit Congestion Notification), FQ(Fair Queuing)等算法;
道路交通系统是一个典型的统计复用的分组交换系统,其实早在TCP/IP分组交换网络之前,道路交通系统就已经存在了好几千年了,我们可以用道路交通系统一些问题来类比分析TCP/IP网络中出现的问题,比如道路拥堵类比网络拥塞,可以帮助我们更容易理解网络。
这里主要提到了互联网通信的三种设计思想:
分布式思想--分组交换:提供足够简单且灵活的分组转发逻辑,实现数据报文在系统中稳定转发,网络节点转发行为不是集中控制的,没有上帝视角,但网络最终可以实现数据转发,反映出网络设计参考一些哲学思想,网络可以通过节点周围关系连接任何一个未知节点(六度理论),这或许就是分组交换能够成功的底层理论。
分层思想--网络协议分层设计:应用层高度可扩展,应用程序爆炸式增长,得益于网络的分层模型;
公平思想--传输控制:TCP的拥塞控制使网络更加公平和稳定,提高系统的容错率,让系统可以持续正常运转;
从技术上看,“无连接分组交换”这一“革命性的创造”为互联网带来了胜利。而TCP/IP分层模型的“系统化和完备化”使得互联网进入了蓬勃发展的商业化发展阶段。互联网的设计原理保证了TCP/IP的成功,使其成为了当今信息社会最重要的基础设施。
一些应对复杂性设计思想:
3 计算机网络技术演进
推动网络不断向前发展的核心诉求:
网络通信场景不断扩展
人们不断扩展网络通信场景:局域网,城域网,广域网,无线网络,互联网,移动互联网,工业互联网,云计算网络,物联网,车联网等;
网络容量和用户爆发式增长
从Web1.0、Web2.0、到移动互联网发展,社交,游戏,短视频,直播等应用流行,互联网流量暴涨几十倍,对网络的支撑能力带来巨大挑战,倒逼网络不断进行向前发展
计算机网络安全问题
计算机网络安全是当今世界的重要关注点。黑客一直在使用各种创新技术窃取重要信息。现在人们在利用网络空间进行日常活动,对网络空间的依赖性非常高。无论人们被窃取的是业务和技术机密,还是金融系统,威胁性都是致命的。
以上是我对网络的部分理解,主要是核心思想理解,希望能够帮助大家更好理解网络,也为该系列后续文章做一些铺垫,希望大家喜欢
参考:
《The design philosophy of the DARPA internet protocols》
https://wikipedia.org
《Congestion Avoidance and Control》
《网络是怎样连接的》
-END-
最近一直在梳理一下技术文章方向,期望分享的内容对大家更实用。
知识点系列:透彻分析一个知识点(主要是围绕一个知识点,全面深刻理解该知识点),每天进步一点点,说不一定哪天不小心就成了大神(大神都是从菜鸟一步一步走过来的),梦想还是要有的,让我们一起进步。
硬核系列:主要分享对一门技术的全面分析,包含深度和广度,让大家对该技术有比较全面理解和升华,如xxx全景指南之类,希望和大家一起"精通"一门技术;
实战系列: 精选各种常见的代表性实际问题,分享一步一步思考和解决方法,梳理整个问题脉络,可以学习到解决问题各种技巧和通用技能,锻炼解决问题思维能力,让大家成为解决问题的高手;
最后,希望大家从中受益。