什么是计算机网络?
主机之间通过交换网络互连,交换节点一般是路由器或者交换机。
什么是网络协议?
为进行网络中的数据交换而建立的规则、标准或约定。
协议的三要素是什么?
语法、语义、时序
计算机网络的结构?
网络边缘:主机(端系统)、网络应用
主机(端系统):运行网络应用程序 客户/服务器(C/S)应用模型:客户发送请求,接受服务器响应 对等(P2P)应用模型:不仅依赖专用服务器;对等实体之间直接进行通信
接入网络,物理介质:有线或无线通信链路,将网络边缘接入核心网络
带宽(bps):网络中指数据传输速率,Mb/s 共享/独占? 无线接入网络: 无线局域网(LANs):wifi 广域无线接入:通过电信运营商,3G、4G
网络核心:互联的路由器(或分组转发设备),将数据从源主机通过网络核心发送到目的主机
关键功能:路由+转发 路由:确定分组从源到目的传输路径 路由算法 转发:将分组从路由器的输入端口交换至正确的输出端口 本地转发表
数据交换?
构建:
最简单的就是任意两台主机之间建立一条链路:O(N^2)
然后一个交换设备,让每台主机都通过链路连接:如果主机规模很大,交换设备端口不够用;如果主机与交换设备过远,无法保证连通性
把交换设备连接到一起,构造成交换网络,让每台主机与交换网络中的某台设备连到一起
什么是交换?
动态转接: 数据通过交换设备从一个端口转到另一个端口,而且可以在多组端口之间并行
动态分配传输资源:数据从源主机穿越交换网络送达正确的目的主机
数据交换的类型?
电路交换—>典型的电话
实现选好链路占好资源
资源独占,不能被第三方共享
电路交换网络的链路共享:多路复用
报文交换
源(应用)发送信息整体,比如一个文件,完整的发到下一个站点
分组交换
分组:报文分拆出来的一系列相对较小的数据包 **头+数据**
需要报文的**拆分**和**重组**
产生**额外开销**:时间开销必不可少,通常在计算机网络中源主机和目的主机之间进行的,拆分重组开销不严重
报文交换与分组交换均采用存储–转发交换方式
路由器将数据分组完整的接收过来暂存一下,再决定怎么转发,转发的链路可用了,再发出去
丢包:队列缓存容量有限,分组到达已满队列,到达分组被丢弃--丢包(loss)
报文交换的效率高于分组交换
报文交换是串行,而分组交换很多分组之间是并行的,而且相比之下路由器需要的缓存更小
分组交换VS电路交换,可支持更多用户同时使用网络,网络资源充分共享
大家建立连接后,一般不一直传送数据,一段时间根本不用网络,平均活动时间较少
分组交换是统计多路复用
分组交换不是绝对优于电路交换
分组交换更适用于**突发**数据传输网络
资源充分共享;简单、无需呼叫建立,事先占好资源
缺点:
可能产生拥塞:分组延迟和丢失,需要协议处理可靠数据传输和拥塞控制
如何提供性能保障? 音/视频需要的带宽保障
网络性能的评价
速率:数据传输速率或比特率(单位时间传输比特量),最重要的一个性能指标
带宽:原指信号具有的频带宽度,单位是赫兹。在计算机网络中,指数字信道所能传送的“最高数据率”
延迟/时延:分组在路由器缓存中排队,分组到达速率大于输出链路容量时
结点处理延迟:差错检测、确定输出链路可用
排队延迟:等待输出链路可用、取决于路由器拥塞程度
传输延迟(发送一个分组需要的时间):分组长度L、链路带宽R, d=L/R
传播延迟:物理链路长度、信号传播速度
丢包率: 丢包数/已发分组总数
吞吐量/率:表示在发送端与接收端之间传送数据速率(b/s),取决与端到端路径之间的瓶颈链路(速率最小的链路)。
计算机网络体系结构?
从功能上描述,分层结构,每层完成本层功能,体系结构是抽象的。
为什么分层?
结构清晰;模块化的分层易于系统更新、维护;有利于标准化
因为每一层要完成的功能是不同的,解决的问题是不一样的,比如要传递可靠数据(传输层)、先要实现能传递数据(网络层)、传递之前要保证两台机器之间能发数据包(数据链路层),所以分层的方式是将功能划分给每一层去实现部分功能,下层协议为上层协议提供帮助,相互配合。
协议是控制两个对等实体进行通信的规则的集合,协议是“水平的”。
任一层实体使用下层服务,实现本层功能,向上层提供服务,服务是“垂直的”。
下层协议的实现对上层的服务用户是透明的。
网卡是什么?
网卡:网络适配器,插在(或者集成在)主板上的硬件设备,每个网卡都有一个全球唯一的标识,从一生产出来就确定了,48位,叫做MAC地址,如11:27:F5:8A:79:54。
网卡属于OSI模型中的物理层和数据链路层,网络层以上的部分则由操作系统中的协议栈实现,所以TCP/IP协议栈其实只包含了网络层和传输层。
网卡是怎么工作的?
首先需要一个IP地址,用到DHCP(动态主机配置协议,集中管理、分配IP地址)。网络里有DHCP服务器,动态的分配地址,CPU写好报文,内容如下:首先是一个应用层的DHCP报文,然后被DUP报文封装,之后再被IP数据报封装。
网卡是数据链路层的,需要知道MAC地址才能发送到指定对方,如果不知道就发广播。然后我又把数据报封装了一下,广播到同一子网内的所有电脑,目的地址就是FF:FF:FF:FF:FF:FF。
然后网卡通过网线把报文发到交换机,交换机将报文转发到所有连接到交换机的设备。过一会,交换机转来报文,就是DHCP服务器发来的。然后网卡广播发送一个报文确定要哪个IP,之后DHCP再回一个报文,包括网卡的IP、网关路由器的IP、DNS服务器IP。
如果系统重启之后,这个获取IP的步骤需要再走一遍,除非用户手动的配置IP地址、网关、DNS,但是这样很烦还容易出错,所以一般情况下都是自动的用DHCP搞定一个IP。
怎么访问百度?
要想互联,不仅自己要有IP地址,还要知道对方的IP地址,比如访问www.baidu.com,要先经过DNS查询,知道它的IP。
DNS服务器不在局域网内,我们将报文发送到网关路由器,由网关路由器想办法转给DNS服务器。那么网关路由器的MAC地址在哪呢?这时候需要用到ARP(地址解析协议),通过广播查询一个IP地址对应的MAC地址,得到网关路由器的MAC地址,网卡只需要将DNS查询发送给网关路由器即可。之后就没网卡的事情了,网卡只能管局域网的事情,出了局域网,就是路由器的事情了。
出了局域网之后的事情呢?
现在来看网关路由器,我还在想为什么叫网关呢?在网上看到的解释是大家想上网,一定得经过这一关,所有的对局域网之外的访问必须得经过网关。
网关直接和ISP(网络服务供应商,比如联通)的网络相连,得到一个外网地址。
NAT(网络地址转换)
网关路由器不仅是个路由器,还是个DHCP服务器,掌握着整个局域网的IP生杀大权。局域网内的主机拿着内网IP是无法直接上网的,这个地址只有局域网的网关才知道,像百度这样的网站根本就不知道;即使知道了也没用,世界上无数的路由器都会分配192.168.xxx.xxx这样的地址,也不知道到底要找哪一个。
那怎么通过网关路由器上网呢?下面看过程:
比如某个网卡想访问百度,它通过交换机给网关路由器发来一个数据帧,如下:
发过来之后,网关路由器这样处理:它把数据链路层去掉,发现IP数据包中的目标地址是115.239.211.112,可以知道这是要向外网发出请求了,网关路由器把源IP地址换成从ISP那里拿来的外网IP,再创建一个新的端口号将TCP数据包中的源端口也替换掉,之后数据包就换成了下面这样:
总之就是网关路由器将源IP地址和源端口都替换了,目的就是让外网认为这是路由器发出的,他们根本不知道什么某一块网卡。之后再给IP数据报封上数据链路层的头,将数据包发送给服务商的网络,剩下的事情就不用管了。
这个替换源地址和源端口的小把戏就叫做网络地址转换,简称为NAT。
当然不止一台电脑通过网关路由器上网,还有很多别的电脑,所以网关路由器将这些转换关系记录下来,形成了NAT转换表,如下:
PS:路由器上的WAN口是用来连接外网的,或者说连接宽带运营商的;LAN口(1、2、3、4)是用来连接内网中的设备的。
接着说,当百度那边的回复通过别的路由器转到网关路由器这里,需要反过来处理:首先去掉数据链路层的头,发现IP和TCP数据报中包含这样的信息:目的IP:61.52.247.112,端口:2001,这时候网关去查表,找到了192.168.1.2:3345,就知道这是给哪一块网卡的数据包了。就再次把数据报中的IP地址和端口号改了,让网卡认为这个数据包是网关发的。
就这样,网关用一个外网的IP支持了局域网内多个电脑的上网需求,并且他们根本不知道怎么回事!
NAT弊端
NAT使IP会话的保持时效变短。一个会话建立后会在NAT设备上建立一个关联表,因为IP和端口资源有限,通信的需求无限,所以必须在会话结束后回收资源。
NAT在实现将多个内部主机发出的连接复用到一个IP上,这样适使得依赖IP进行主机追踪的机制失效了。NAT隐蔽了通信的一端,把简单的事情复杂化了。
NAT工作机制依赖于修改IP头部信息,这会妨碍一些安全协议的工作。NAT篡改了IP地址、端口和校验和,这会导致认证协议彻底不能工作,因为认证的目的就是要保证这些信息在传输过程中没有发生变化。
NAT穿越
在P2P模式下,比如电驴,机器不仅仅是客户端,同时也是一个能够接受请求的服务器。但是其他人怎么能连上它呢?外网的人不知道它的IP地址呀。
解决方案是这样的,网卡可以主动的请求网关建立一个NAT映射,比如(192.168.1.2 : 4096) <-> (61.52.247.112: 3001),保存到NAT表中,当有外网连接到来时,网关负责把连接请求转发到指定主机。这其实是UPnP。
下一篇:计算机网络之层次结构