湖科大计网[完结]
第一章
1.2因特网概述
1.网络、互联网和因特网
-
网络由若干结点和连接这些结点的链路组成
-
多个网络还可以通过路由器互联起来,这样就构成了一个覆盖范围更大的网络,即互联网。因此互联网是网络的网络
2.因特网发展的三个阶段
-
因特网服务提供者ISP
4.因特网的组成
- 边缘部分
- 核心部分
什么是计算机网络
1.3三种交换方式
-
电路交换
-
电话交换机接通电话线的方式称为电路交换
-
从通信资源的分配角度来看,交换(Switching)就是按照某种方式动态地分配传输线路的资源
-
电路交换的三个步骤
-
建立连接
-
通话
-
释放连接
-
传输效率低
-
-
-
分组交换
- 发送方:构造分组,发送分组
- 路由器:缓存分组,转发分组
- 接受方:接收分组,还原分组
1.4计算机网络的定义和分类
- 计算机网络的最简单定义是:一些互相连接的,自治的计算机的集合
- 互连:计算机之间通过有线或无线的方式进行数据通信
- 自治:独立的计算机,有自己的硬件和软件,可以单独运行使用
- 计算机网络较好的定义是:计算机网络主要是由一些通用的,可编程的硬件互连而成,而这些硬件并非专门用来实现某一特定目的。这些可编程的硬件可用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。
- 包括智能手机等硬件
- 并非专门用来传输数据,而是能够支持很多种的应用
- 按覆盖范围分类:
- 广域网WAN
- 几十公里到几千公里,可以覆盖国家,地区甚至横跨几个洲
- 其任务是为核心路由器提供远距离高速连接,互连分布在不同区域的城域网和局域网
- 城域网MAN
- 一个城市,可跨越街区,甚至整个城市,5-50公里
- 作为城市主干网
- 互联大量企业,机构和校园局域网
- 局域网LAN
- 微型计算机或工作站通过高速通信线路连接
- 一个实验室,一幢楼,一个校园内,距离一般在一公里左右
- 某单位单独拥有使用维护
- 个域网PAN
- 个人区域网络的简称
- 不是用来连接普通计算机的
- 10米
- 广域网WAN
1.5计算机网络的性能指标
常用指标
- 吞吐量
- 单位时间内通过某个网络的数据量
- 带宽:
- 网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到零一点所能通过“的最高数据率”
- 时延
- 发送时延:源主机将分组发往传输线路
- 传播时延:电磁波在信道中传播一定的距离需要花费的时间,即一个比特从链路的一端传播到另一端所需的时间。表分组的电信号在链路上传输
- 处理时延:路由器收到分组后,对其进行存储转发
-
丢包率
-
在一定时间范围内,传输过程中丢失的分组数量与总分组数量的比率
-
接口丢包率,结点丢包率,链路丢包率,路径丢包率,网络丢包率
-
分组丢失:
- 分组在传输过程中出现误码,被结点丢弃
- 分组到达一台队列已满的分组交换机时被丢弃;在通信量较大时就可能造成网络拥塞
- 丢包率反映了网络的拥塞情况
- 无拥塞时路径丢包率为0
-
-
利用率:
- 信道利用率
- 来用表示信道有百分之几的时间时被利用的。(有数据通过)
- 网络利用率
- 全网络的信道利用率加权平均
- 根据排队论,当某信道的利用率越大时,该信道引起的时延也会迅速增加
- 因此,信道利用率并非越高越好
- 拥有较大主干网的ISP通常会控制他们的信道利用率不超过50%,如果超过了,就要扩容,增大线路的带宽
- 信道利用率
1.6计算机网络体系结构
1.常见的计算机网络体系结构
2.计算机网络结构分层的必要性
第二章
2.1物理层的基本概念
- 物理层考虑的是怎样才能在连接各种计算机的传输每日上传输数据比特流
- 物理层就是要解决各种传输媒体上传输比特0和1的问题,进而给数据链路层提供透明的传输比特流的服务。“透明”:数据链路层看不见也无需看见,物理层究竟用什么方法来传输比特0和1 的,它只管享受物理层提供的比特流传输服务即可
- 物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么
2.2物理层下面的传输媒体
- 传输媒体不属于计算机网络体系结构中的任何一层
2.3传输方式
串行传输和并行传输
- 并行传输速度是串行传输的n倍
- 数据在传输线路上的传输通常采用的是串行传输
- 计算机内部数据的传输,常次啊用并行传输方式
- CPU和内存之间,通过总线进行数据传输
- 常见的数据总线宽度有8位,16位,32位,64位
同步传输和异步传输
单工通信,双向交替通信,双向同步通信
2.4编码与调制
第三章
3.1数据链路层概述
- 链路:就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点
- 数据链路:实现通信协议的硬件和软件加到链路上,就构成了数据链路
- 在数据链路层上传输的数据包又称为帧→数据链路层以帧为单位传输和处理数据
- 主机应具有体系结构中的各个层次
- 路由器只需具有体系结构的下面三层
- 各设备通过物理层下面的传输媒体进行互连
数据链路层的三个重要问题
-
封装成帧
两台主机都会对所发送或接受的数据包进行五个层次的封装或解封,发送方将待发送的数据通过应用层封装称为应用层协议数据单元然后交付给运输层,运输层为其添加运输层协议首部使之称为运输层协议数据单元,然后交付给网络层,网络层为其添加网络层协议首部,使之成为物理层协议数据单元,然后交付给数据链路层,数据链路层给网络协议数据单元添加一个数据链路层首部简称为帧头,还要给他添加一个帧尾
- 添加帧头和帧尾的目的:
- 为了在链路上以帧为单元来传送数据
- 添加帧头和帧尾的目的:
-
透明传输是指数据链路层对上次交付的传输数据没有任何限制,就好像数据链路层不存在一样
-
差错检测
发送方将封装号的帧通过物理层发送到传输媒体,帧在传输过程中遭受干扰后可能会出现误码,也就是比特0变成了比特1。
-
那么接收方主机如何判断帧在传输过程中是否出现了误码呢?
- 发送方在发送帧之前,基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾
- 接收方主机收到帧后,通过检错码和检错算法就可以判断出帧在传输过程中是否出现了误码
-
-
可靠传输
- 收到有误码的帧→丢弃
- 尽管误码是不能完全比避免的,但若能实现发送方发送什么,接收方就你能收到什么,就称为可靠传输
以上为点对点信道的数据链路层来举例的
-
使用广播信道的数据链路层
-
那么各个主机如何知道这个帧是发送给自己或者不是发送给自己的呢?
- 将帧的目的地址添加到帧中一起传输
-
当总线上的多台主机同时使用总线来传输帧时,传输信号产生碰撞
- 以太网的媒体接入控制协议CSMA/CD也就是载波监听多点接入/碰撞检测
3.2封装成帧
-
封装成帧:是指给数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
- 帧头和帧尾中包含有重要的控制信息
- 发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层将构成帧的各比特转换成电信号发送到传输媒体
-
那么接受方的数据链路层如何从物理层交付的比特流中提取出一个个帧呢?
- 帧头和帧尾的作用之一就是帧定界
-
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路不存在一样
- 接收方第一个认为是帧开始,第二个误认为是帧结束
- 数据链路层对上层交付的协议数据单元有限制,其内容不能包含帧定界符,这样的数据链路层没有什么使用价值
- 解决方法:在这些帧定界符前插入一个转义字符,遇到第一个帧定界符认为是开始,当遇到转义字符时就知道,其后面1字节内容虽然与帧定界符相同,但它是数据,而不是帧定界符,剔除转义字符后将其后面的内容作为数据继续提取,直到再次提取到帧定界符表示帧的结束
- 那么如果既包含帧定界符又包含转移字符呢?
- 仍然是在发送帧之前对帧的数据部分进行扫描,每出现一次帧定界符或转义字符就在其前面插入一个转移字符
- 转义字符是一种特殊控制字符,其长度为一个字节,十进制数字为27
-
面对比特的物理链路使用比特填充的方法实现透明传输
-
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)
3.3差错检测
- 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错,1可能会变成0,而0可能变成1。这称比特差错
- 比特流在传输过程中由于受到各种干扰,就可能会出现比特差错,或称误码
-
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)
-
接收方的数据链路层又要通过什么方法才能知道呢?
- 使用差错检测码来检测数据在传输过程中是否产生了比特差错,使数据链路层所要解决的重要问题之一
- 接收方用来检测是否产生了误码
奇偶校验
- 在待发送的数据后面添加一位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)
-
如果比特1的奇性不改变是无法检查出错误的
-
偶校验中如果比特1的偶像不改变也是无法检查出错误的
-
如果有奇数个数发生误码,则奇偶性发送改变,可以检查出误码
-
如果有偶数个数发生误码,则奇偶性不发生改变,不能检查出误码(漏检)
-
→理解为每一个误码的影响相互抵消了
-
奇偶校验的漏检率比较高
-
一般数据链路层不会采用这种检测方法
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否产生了误码
- 检错码只能检测帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误
- 要想纠正传输中的差错,可以使用冗余更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
- 循环冗余检验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
- 在计算机网络中通常采用检错重传方式来纠正传输中的差错,或者仅仅丢弃检测到的差错的帧,这取决于数据链路层向上层提供的是可靠传输还是不可靠传输服务
3.4.1可靠传输的概念
- 如果接受方收到了有误码的帧该如何处理呢?(取决于见下)
- 数据链路层向上层提供的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
- 可靠传输服务:想办法实现发送端发送什么,接受端就受到什么,例如接收方可以给发送方发送一个通知帧,告诉他之前发送的帧产生了误码请重发。发送方收到通知,重发之前产生误码的帧即可,但是可靠传输的实现并没有这么简单,如果这个通知帧也出现了误码会怎么样呢?
- 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务,即使出现了误码,可靠传输的问题由上层处理。
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上提供可靠传输服务
-
比特差错只是传输差错中的一种
-
从整个计算机网络体系结构来看,传输差错还包括分组丢失,分组失序以及分组重复
-
分组丢失
- 主机H6给主机H2发送的分组到达了路由R5,由于此时R5的输入队列满了,R5根根据自己的分组丢弃策略将该分组丢弃
-
分组失序
- 主机H6依次给主机H2发送了三个分组,但他们并没按发送顺序到达H2,最先发送的分组未必最先到达
-
分组重复
- 主机H6给主机H2发送分组,由于某些原因在网络中滞留了,没有及时到达H2,可能造成H6对该分组的超时重发,重发的分组到达H2,一段时间后滞留在网络中的那个分组又到达了H2
-
分组丢失,分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层
-
可靠传输服务并不仅限于数据链路层,其他各层均可选择实现可靠传输
-
可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求
3.4.2可靠传输的实现机制-停止等待协议SW(Stop-and-Wait)
- 可靠传输的实现机制
- 停止等待协议SW
- 回退N帧协议GBN
- 选择重选协议SR
- 这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中
- ACK确认分组,发送方收到对所发送数据分组的确认分组后,才能发送下一个数据分组
- 否分分组NAK
- 发送方每发送完一个数据分组后,并不能立即将该分组从缓存中删除,只有收到针对该数据分组的确认分组后才能将其从缓存中删除
- 看来发送方每发送完一个数据分组后,就停止发送下一个数据分组,等待来自接收方确认分组或否定分组,若收到确认分组则可发送下一条分组,若收到否认分组,则重发之前发送的那个数据分组,这样就实现了发送方发送什么接收方就收到什么
- 接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态
- 为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而接收方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫超时重传
- 一般将重传时间选为略大于“从发送方到接收方的平均往返时间”
- 假如发送方发送了一个数据分组,接收方正确接受该数据分组后,给发送方发送确认分组,但该确认分组在传输过程中丢失了,这必然会造成发送方对之前所发送数据分组的超时重传,假设这个重传的数据分组也正确到达了接收方,那么接收方如何判断该数据分组是否是一个重复的分组呢?
- 为了避免分组重复这种传输错误,必须给每个分组带上序号。每发送一个新的数据分组,只要保证其发送序号与删除给发送的数据分组序号不同即可,因此用一个比特编号就够了,即0和1
- 接收方丢弃重复的数据分组
- 停止-等待协议的通信利用率
- 当往返时延RTT远大于数据帧发送时延Td时(例如使用卫星链路),信道利用率非常低
- 若出现重传,则对于发送有用的数据信息来说,信道利用率还要降低
- 为了克服停止-等待协议信道利用率低的缺点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR
3.4.3可靠传输的实现机制—回退N帧协议GBN(Go-Back-N)
- 如果发送方在收到接收方的确认分组之前,可以连续发送多个数据分组,则可大大提高信道利用率
- 采用流水线传输可提高信道利用率
- 同等条件下,在相同的时间内,使用停止等待协议只能发送一个数据分组,而采用流水线传输的发送方可以发送5个数据分组
- 假设采用采用3个比特给分组编序号,因此序号的取值范围是0~7
- 发送方要维持一个发送窗口,序号落在发送窗口内的数据分组可被连续发送,而不必等收到接收方的相应确认分组后再发送,发送窗口的尺寸记为WT本例子中1<WT≤7,如果WT=1则就是停止等待协议。
- 本例取WT=5,如果WT的值超过取值范围的上限,则会造成严重的错误
- 对于回退N帧协议,接收窗口的尺寸WR=1与停止等待协议相同
- 发送方将落在发送窗口内的04号数据分组依次连续发送出去,经过互联网的传输正确到达接收方,没有出现乱序和误码,接收方按序接收他们,每接收一个,接受窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组,04号确认分组经过互联网的传输正确到达了发送方,发送方每接收一个,发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付给上层处理
- 累计确认
- 接收方不一定要对接收到的数据分组逐个发送确认,而是可以在收到几个数据分组后,对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收了
- 假设ACK1在传输过程中丢失了,而ACK4正确到达了发送方,发送方接收ACK4后就知道了,序号为4及之前的数据分组已被接收方正确接收了,然后发送方将发送窗口向前移动5个位置,发送方可以将收到确认后的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付给上层处理
- 使用累计确认
- 优点:
- 即使确认分组丢失,发送方也可以不必重传
- 减小接收方开销,减少对网络资源的占用
- 缺点:
- 不能向发送方及时反映出接收方已经正确接收的数据分组信息
- 优点:
- 本例中ACK1丢失但并没有造成1号数据分组的超时重传
出现差错的情况
- 接收方通过检错码发现了错误,于是丢弃该数据分组,而后续到达的着4个数据分组的序号与接收窗口中的序号不匹配,接收方同样也不能接受它们,并将其丢弃并对之前按序接收的最一个数据分组进行确认,也就是发送ACK4,每丢弃一个数据分组就发送一个ACK4,这4个ACK4经过互联网的传输到达了接收方,发送方之前就接收过了ACK4,当收到这些重复的ACK4时就知道了所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传,至于收到几个重复确认就立刻开始重传由具体实现来决定。在本例中假设收到这4个重复的确认并不会触发发送方立刻重传,一段时间后超时计时器出现超时,发送方将发送窗口内已发送过的这些数据分组立刻全部重传,尽管序号为6,7,0,1的数据分组之前已经正确地到达接收方,但由于5号数据分组误码不被接受,它们也“受到牵连”而不被接受,发送方还要重传这些数据分组这就是所谓地Go-back-N,也就是回退N帧
- 可见当通信线路质量不好时,回退N帧协议的信道利用率不比停止-等待协议高
如果Wt超过其取值范围的上限
- 会出现分组重复的情况
3.4.4可靠传输的实现机制—选择重选协议SR(Selective Request)
- 回退N帧协议的接受窗口尺寸Wr只能等于1,因此接收方只能按序接收正确到达的数据分组
- 一个数据分组的误码就会导致其后续多个数据分组不能被按序接受而丢弃(尽管他们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费
- 为了进一步提高性能,可设法重传出现误码的数据分组。因此,接收窗口的尺寸Wr不应再等于1(而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收起后再一并送交上层这就是选择重传协议
3.5点对点协议PPP(Point-to-Point Protocol)
-
点对点协议是目前使用最广泛的点对点数据链路层协议
-
一般的因特网用户是如何接入到因特网的呢?
- 通常都是要通过连接到某个因特网服务提供者ISP,例如用中国电信,中国联通,中国移动这三大运营商才能接入因特网
- 这些ISP已经从因特网管理机构申请到了一批地址
- 用户计算机只有获取到ISP所分配的合法IP地址后,才能成为因特网上的主机
- 用户计算机与ISP进行通信时,所使用的数据链路层协议通常就是PPP协议
-
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三个部分构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP 用于建立、配置以及测试数据链路的连接
- 一套网络控制协议NCPs 其中的每一个协议支持不同的网络层协议
- PPP协议能够在多种类型的点对点链路上运行
-
PPP协议的帧格式
-
PPP协议如何解决透明传输问题
-
当PPP的数据帧部分出现帧首和帧尾中的标志字段时,如果不采取措施,则会造成接收方对PPP帧是否结束的误判
-
实现透明传输的方法取决于所使用的链路类型
- 面向字节的异步链路则采用字节填充法→插入“转义字符”
- 面向比特的同步链路则采用比特填充法→插入“比特0”
-
-
字节填充法
-
发送方的处理:
- 出现的每一个7E(PPP帧的定界符)字节转变成2字节序列(7D,5E)
- 出现的每一个7D(转义字符)字节转变成2字节序列(7D,5D)
- 出现的每一个ASCII码控控制字符(数值小于0x20的字符),则在该字符前面插入一个7D字节,同时将该字节的编码加上0x20
-
-
比特填充法
-
发送方的处理
- 对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立刻填充比特0
-
接收方的处理:
- 对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除
-
PPP协议瑞和进行差错检测
- PPP帧的尾部包含有1个两字节的帧检验序列FCS字段,使用循环冗余检验CRC来计算该字段的取值
- 接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务
3.6.1媒体接入控制的基本概念
- 共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)
复
3.6.2媒体接入控制-静态划
3.7MAC地址复用复
- 使用点对点信道的数据链路层不需要使用地址
-
使用共享信道的总线型局域网
- 使用广播信道的数据链路层必须使用地址来区分各主机
- 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址
- 在每个主机发送的帧中必须携带表示发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC,因此此类地址被称为MAC地址
- MAC地址一般被固化在网卡的可电擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址。
- MAC地址有时也被称为物理地址。这并不意味着MAC地址属于网络体系结构中物理层
- 一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无限局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会用拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
3.7IP地址
-
IP地址时因特网上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以万计的网络
- 主机编号:标识同一网络上不同主机(或路由器接口)
- 前三位的十进制数是相同的,也就是网络N8的编号
- 最后一位的十进制数不同,是网络N8上各主机路由器接口的编号
- 换句话说,同一个网络上的各主机和路由器的各接口的IP地址的网络号部分应该是相同的,主机号部分互不相同
-
MAC地址不具备区分不同网络的功能
- 如果只是一个单独的网络,不接入因特网,可以只使用MAC地址(这不是一般用户的应用方式)
- 如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用
第四章
4.1网络层概述
-
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
-
要实现网络层任务,需要解决以下主要问题:
- 网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
- 网络层寻址问题
- 路由选择问题
-
因特网(Internet)是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈。
-
由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。
-
综上所述,我们通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术。
4.2网络层提供的两种服务
面向连接的虚链路服务
-
可靠通信应由网络自身来保证
-
必须首先建立网络层连接——虚电路(Virtual Circuit)
-
通信双方沿着已建立的虚电路发送分组(虚电路表示这是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送)
-
目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需携带一条虚电路的编号
-
这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终到达接收方
无连接的数据报服务
- 可靠通信应当由用户主机来保证
- 不需要建立网络层连接
- 每个分组可走不同的路径
- 每个分组的首部必须携带目的主机的完整地址
- 这种通信方式所传送的分组可能误码、丢失、重复和失序。
- 由于网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
- 因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心。
4.3.1 IPv4地址概述
-
在TCP/IP体系中,IP地址是一个最基本的概念,我们必须把它弄清楚
-
IPv4地址就是给因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符
-
IP地址由因特网名字和数字分配机构ICANN进行分配
- 我国用户可向亚太网络信息中心APNIC(Asia Pacific Network Information Center)申请IP地址,需要缴费。
- 2011年2月3日,互联网号码分配管理局IANA(由ICANN行使职能)宣布,IPv4地址已经分配完毕。
- 我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址。同时全面开展商用部署IPv6。
-
IPv4地址的编址方法经历了如下三个历史阶段:
- 1981分类编址
- 1985划分子网
- 1993无分类编址
-
32比特的IPv4地址不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用
4.3.2分类编制的IPv4地址
A类地址
B类地址
C类地址
4.3.3划分子网的IPv4地址
假设某单位有一个大型的局域网需要连接到因特网,如果申请一个C类地址,其可分配的IP地址数量只有254个,不够使用,因此该单位申请了一个B类网络地址,其可分配的IP地址数量达到了65534个,给每台计算机和路由器的接口分配一个IP地址后,还有大量的IP地址剩余,这些剩余的IP地址只能由该单位的同一个网络使用,而其他单位的网络不能使用。随着该单位计算机网络的发展和建设,该单位又新增了一些计算机,并且需要将原来的网络划分成三个独立的网络。我们称其为子网1,子网2,子网3
- 为新增网络申请新的网络号会带来以下弊端:
- 需要等待时间和花费更多的费用
- 会增加其他路由器中路由表记录的数量
- 浪费原有网络中剩余的大量IP地址
- 从主机号部分借用一部分作为子网号
- 如果我们未在途中标记子网号部分,那么我们和计算机又如何知道分类地址中主机号有多少比特被用作子网号呢?
那么就引出了划分子网的工具
- 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
4.3.4无分类编制的IPv4地址
就是说没有分ABCD这种类别了,就直接由斜线后面的数字决定
-
划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其他地址空间太小并没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽威胁
-
为此,因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立了IPv6工作组负责研究新版本IP以彻底解决IP地址耗尽问题
-
CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念
-
CIDR可以更加有效地分配IPv4地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长
-
CIDR使用“斜线技法”,或称CIDR记法。即在IPv4地址后面加上斜线“/”,在斜线后面写上网络前缀所占的比特数量
- 路由聚合(构造超网)
4.3.5IPv4地址的应用规划
-
定长的子网掩码FLSM(Fixed Length Subnet Mask)
- 使用同一个子网掩码来划分子网
- 每个子网所分配的IP地址数量相同,造成IP地址的浪费
-
变成的子网掩码VLSM(Variable Length Subnet Mask)、
- 使用不同的子网掩码来划分子网
- 每个子网所分配的IP地址数量可以不相同,尽可能减少了对IP地址的浪费
4.4IP数据报的发送和转发过程
- IP数据报的发送和转发过程包含一下两个部分:
- 主机发送IP数据报
- 路由转发IP数据报
-
同一个网络中的主机之间可以直接通信,这属于直接交互
-
不同网络中的主机之间的通信,需要通过路由器中转,这属于间接交付
-
那么源主机如何知道目的的主机是否与自己在同一个网络中?
-
假设主机C要给主机F发送IP数据报,主机C将自己的IP地址与子网掩码相与,就可以得到主机C所在网络的网络地址。既然主机C要给主机F发送IP数据报,那么主机C肯定知道主机F的IP地址,主机C将主机F的IP地址与自己的子网掩码相与,就可得到目的网络地址,该地址与主机C的网络地址不相等,因此主机C知道主机F与自己不在同一个网络,它们之间的通信属于间接交付。主机C需要将IP数据报传输给路由器,由路由器将IP数据报转发给主机F。
-
那么主机C又是如何知道应该把IP数据报交给哪个路由器进行转发呢?
- 用户为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其他指定本网络的一个路由器,由该路由器帮忙进行转发,所指定的路由器,也被称为默认网关。
-
路由器收到IP数据报后如何转发?
- 检查IP数据报首部是否出错,若出错,则直接丢弃该IP数据报并通告源主机,若没有出错,则进行转发
- 根据IP数据报的目的地址在路由表中查找匹配的条目,若找到匹配的条目,则转发给指示的下一跳,若找不到,则丢弃该IP数据报并通告源主机
-
第五章 运输层
5.1 运输层概述
- 之前课程所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,异实现了主机到主机的通信
- 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程(AP是应用进程的缩写)
- 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。
在运输层使用不同的端口,来对应不同的应用进程,然后通过网络层及其下层来传输应用层报文
这里的端口并不是指看得见,摸得着的物理端口,而是指用来区分不同应用进程的标识符
运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就好像使在两个运输实体之间有一条端到端的逻辑通信信道。
根据应用需求不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP,这两种协议就是本章要讨论的主要内容
5.2运输层端口号、 复用与分用的概念
- 运输层使用端口号来区分不同的应用进程
- 我们知道运行在计算机上的进程使用进程标识符PID来标志
- 但是我们因特网上的计算机使用的不是同一的操作系统,不同的操作系统又使用不同格式的进程标识符
- 对此我们为了运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用同一的方法对TCP/IP体系的应用进程进行标识
- TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程
- 端口号使用16比特标识,取值范围0~65535
- 熟知端口号:0~1023,IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如:FTP使用21/20,HTTP使用80,DNS使用53
- 登记端口号:1024~49151,为没有熟知端口号的应用程序使用。使这类端口号必须在IANA按照规定的手续登记,以防止重复
- 短暂端口号:49152~65535,留给客户进程选择暂时使用。当服务器进程受到客户进程的报文时,就知道客户进程使用的动态端口号。通信结束后,这个端口号可供其他客户进程使用
- 端口号只具有本地意义,即端口号只是为了标识计算机应用层中的各个进程,在因特网中,不同计算机中的相同端口号是没有联系的
- 端口号使用16比特标识,取值范围0~65535
5.3 UDP和TCP的对比
- UDP支持单播、多播以及广播(也就是说支持一对一、一对多以及一对全的通信)
- TCP仅支持单播(也就是一对一的通信)
5.4TCP的流量控制
- 一般来说,我们总是希望数据传输的更快一点
- 但如果发送方把数据发送得过快,接受方就可能来不及接收,这就会造成数据的丢失
- 所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收
- 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制
5.5TCP的拥塞控制
- 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞(congestion)。
- 在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源
- 若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
- “慢开始”是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢
- “拥塞避免”并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞
慢开始
- 发送方要维护一个叫拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化
- 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些,但只要网络出现拥塞,拥塞窗口就减少一些
- 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)
- 发送方将拥塞窗口作为发送窗口swnd,即swnd=cwnd
- 维护一个慢开始门限ssthresh状态变量:
- 当cwnd<ssthresh时,使用开始算法;
- 当cwnd >ssthresh时,停止使用慢开始算法而改用拥塞避免算法:
- 当cwnd =ssthresh时,既可使用慢开始算法,也可使用拥塞避免算法
拥塞避免
快重传
-
所谓快重传,就是使发送方尽快进行重传,而不是等待超时重传计时器超时再重传
- 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认
- 即使收到了失序的报文段也要理解发出对已收到的报文段的重复确认
- 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传
- 对于个别丢失的报文段,发送发不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可用使整个网络的吞吐量提高约20%
快恢复
- 发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而是执行快恢复算法
- 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一般,开始执行拥塞避免算法
- 也有的快恢复算法是把快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh+3
- 既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络
- 这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中
- 可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可用适当把拥塞窗口调大些
5.8.1TCP的运输连接管理--TCP的连接建立
-
TCP是面向连接的协议,它基于运输连接来传送TCP报文段
-
TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程
-
TCP运输连接有以下三个阶段:
- 建立TCP连接
- 数据传送
- 释放TCP连接
-
TCP的运输连接管理就是使运输连接的建立和释放都可以正常地进行
-
TCP的连接建立要解决以下三个问题:
- 使TCP双方能够确知对方的存在
- 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)
- 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配
-
TCP使用“三报文握手”建立连接
- TCP客户:某个应用进程主动发起TCP连接建立
- TCP服务器:被动等待TCP连接建立的应用进程
- 握手需要在TCP客户和服务器之间交换三次TCP报文段
- 最初,两端的TCP进程都处于关闭状态,一开始,TCP服务器进程首先创建传输控制块。之后,就准备接收TCP客户的连接请求。此时TCP服务器进程就进入监听状态。等待TCP客户进程的连接请求。TCP服务器是被动等待来自TCP客户进程的连接请求,而不是主动发起,因此称为被动打开连接
- TCP客户进程也是首先创建传输控制块,然后在打算建立TCP连接时,向TCP服务器发送TCP连接请求报文段,并进入同步已发送状态(SYN=1表示这是一个TCP连接请求报文段,序号字段seq被设置了一个初始值x,作为TCP客户进程所选择的初始序号)注:TCP规定SYN被设置为1的报文段不能携带数据,但要消耗掉一个序号。由于TCP连接建立是由TCP客户主动发起的,因此称为主动打开连接
- TCP服务进程收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态。该报文段首部的同步位SYN和确认位ACK都设置为1,表明这是一个TCP连接请求确认报文段,序号字段seq被设置了一个初始值y,作为TCP服务器进程所选择的初始序号,确认号字段ack的值被设置成x+1,这是对TCP客户进程所选择的初始序号的确认。注:这个报文段也不能携带数据,因为它是SYN被设置为1的报文段,但同样要消耗掉一个序号
- TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已建立状态。该报文段首部中的确认位ACK被设置为1,表明这是一个普通的TCP确认报文段,序号seq被设置为x+1
- TCP服务器进程收到改确认报文段后也进入连接已建立状态。现在,TCP双方都进入了连接已建立状态,它们可以基于已建立好的TCP连接,进行可靠的数据传输了
-
思考:为什么TCP客户进程最后还要发送一个普通的TCP确认报文段呢?这是否多余?为什么不能使用两报文握手建立连接呢?
- 考虑这样一种情况,TCP客户进程发送一个TCP连接请求报文段,但该报文段在某些网络结点长时间滞留了,这必然会造成该报文段的超时重传,假设重传的报文段被TCP服务器进程正常接收,TCP服务进程给TCP客户进程发送一个TCP连接请求确认报文段,并进入连接已建立状态。TCP客户进程收到TCP连接请求确认报文段后,进入TCP连接已建立状态。但不会给TCP服务器进程发送针对该报文段的普通确认报文段。现在TCP双方都处于连接已建立状态。它们可以相互传输数据,之后可以通过“四报文挥手”来释放连接。TCP双方都进入了关闭状态。一段时间后之前滞留在网络中的那个失效的TCP连接请求报文段,到达了TCP服务器进程,TCP服务器进程会误认为这是TCP客户进程又发起了一个新的TCP连接请求,于是给TCP客户进程发送TCP连接确认报文段,(TCP服务器)并进入连接已建立状态,该报文段到达TCP客户进程,由于TCP客户进程并没有发起新的TCP连接请求,并且处于关闭状态,因此不会理会该报文段。但TCP服务器进程已进入了连接已建立状态,它认为新的TCP连接已经建立好了,并一直等待TCP客户进程发来数据,这将白白浪费TCP服务器进程所在主机的很多资源。
5.8.2TCP的运输连接管理--TCP的连接释放
- TCP通过“四报文挥手”来释放连接
- 数据传输结束后,TCP通信双方都可以释放连接
- 现在TCP客户进程和TCP服务器进程都处于连接已建立状态
- 假设使用TCP客户进程的应用通知其主动关闭TCP连接,TCP客户进程会发送TCP连接释放报文段,并进入终止等待1状态。该报文段首部中的终止位FIN和确认位ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认,序号seq字段的值被设置为u,它等于TCP客户进程之前已传送过的数据的最后一个字节的序号+1,TCP规定终止位FIN等于1的报文段即使不携带数据,也要消耗掉一个序号。确认号ack字段的值设置为v
- TCP服务器进程收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并进入关闭等待状态。该报文段首部中的确认位ACK的值被设置为1,表明这是一个普通的TCP确认报文段,序号seq字段的值设置为v,它等于TCP服务器进程之前已传送过的数据的最后一个字节的序号+1,这也与之前收到的TCP连接释放报文段中的确认号匹配,确认号ack字段的值设置为u+1,这是对TCP连接释放报文段的确认,TCP服务器进程这时应通知高层应用进程:TCP客户进程要断开与自己的TCP连接,此时从TCP客户进程到TCP服务器进程这个方向的连接就释放了。
- 这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了,但TCP服务器进程如果还有数据要发送,TCP客户进程仍要接收。也就是说,从TCP服务器进程到TCP客户仅这个方向的连接未关闭,这个状态可能会持续一段时间。
- TCP客户进程收到TCP确认报文段后就进入终止等待2状态。等代TCP服务器进程发出的TCP连接释放报文段,若使用TCP服务器进程的应用进程已经没有数据要发送了,应用进程就通知其TCP服务器进程释放连接。
- TCP连接释放是由TCP客户进程主动发起的,因此TCP服务器进程对TCP连接的释放被称为被动关闭连接。
- TCP服务器进程发送TCP连接释放报文段并进入确认状态,该报文段首部中的终止位FIN和确认位ACK的值都被设置为1
5.9TCP报文段的首部格式
- 为了实现可靠传输,TCP采用面向字节流的方式
- TCP将应用进程交付下来的应用报文看做是字节流,传入TCP缓存中
- 但TCP在发送数据时,是从发送缓存中取出一部分或全部字节并给其添加一个首部使其称为TCP报文段后进行发送
- 一个TCP报文段由首部和数据载荷两部分构成
- TCP的全部功能都体现在它首部中各字段的作用
TCP报文段的首部格式
源端口:占16比特,写入源端口号,用来表示发送该TCP报文段的应用进程
目的端口:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程
当我们在浏览器地址栏中输入了Web服务器的域名后,浏览器进程会构建一个封装有HTTP请求报文的TCP报文段,该报文段首部中的源端口字段会填写一个短暂端口号,用来标识发送该报文段的浏览器进程,目的端口字段会填写熟知端口号80,因为使用HTTP协议的Web服务器进程默认监听该端口,Web服务器收到该TCP报文段后,从中解封出HTTP请求报文,并根据TCP报文段首部中目的端口字段的值80,将HTTP请求报文上交给Web服务器进程,Web服务器进程根据HTTP请求报文的内容进行相应处理,并构建一个HTTP响应报文,HTTP响应报文需要封装成TCP报文段进行发送。该报文段首部中的源端口字段会填写熟知端口号80,用来标识发送该TCP报文段的Web服务器进程。而目的端口字段会填写49152,这是主机中需要接收该TCP报文段的浏览器进程所对应的端口号。主机收到该TCP报文段后,从中解封出HTTP响应报文,并根据TCP报文段首部中目的端口字段的49152,将HTTP响应报文上交给浏览器进程,浏览器进程对HTTP响应报文的内容进行解析并显示
序号:占32比特,取值范围[0, \(2^{32}-1\)],序号增加到最后一个后,下一个序号就又回到了0。作用:用来指出本TCP报文段数据载荷的第一个字节的序号
确认号:占32比特,取值范围[0, \(2^{32}-1\)],序号增加到最后一个后,下一个序号就又回到了0。指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。(可以这么理解:如果确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据)
确认标志位ACK:取值为1时确认号字段才有效;取值为0时确认号字段无效
TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1
同步标志位SYN:在TCP连接建立时用来同步序号
终止标志位FIN:用来释放TCP连接
复位标志位RST:用来复位TCP连接,当RST=1表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接
推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付
紧急标志位URG:取值为1紧急指针字段有效;取值为0时紧急指针字段无效。紧急指针占16比特,以字节为单位,用来表明紧急数据的长度。(当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是一个普通数据)
TCP报文段的组成
第六章 应用层
6.1应用层概述
6.2客户/服务方式(C/S方式)和对等方式(P2P方式)
-
客户/服务器 (Client/Server,C/S)方式
- 客户和服务器是指通信中所涉及的两个应用进程
- 客户/服务器方式所描述的是进程之间服务和被服务的关系
- 客户是服务请求方,服务器是服务提供方
- 服务器总是处于运行状态,并等待客户的服务请求。服务器具有固定端口号 (例如HTTP服务器的默认端口号为80),而运行服务器的主机也具有固定的IP地址。
-
C/S方式是因特网上传统的、同时也是最成熟的方式,很多我们熟悉的网络应用采用的都是C/S方式包括万维网WWW、电子邮件、文件传输FTP等。
-
基于C/S方式的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。
- 由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常会出现服务器计算机跟不上众多客户机请求的情况
- 为此,在C/S应用中,常用计算机群集 (或服务器场)构建一个强大的虚拟服务器
-
对等(Peer-to-Peer,P2P) 方式
- 在P2P方式中,没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者。
-
目前,在因特网上流行的P2P应用主要包括P2P文件共享、即时通信、P2P流媒体、分布式存储等
-
基于P2P的应用是服务分散型的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而是为个人控制的桌面计算机和笔记本电脑,它们通常位于住宅、校园和办公室中。
-
P2P方式的最突出特性之一就是它的可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低。
-
P2P方式具有成本上的优势,因为它通常不需要庞大的服务器设施和服务器带宽。为了降低成本,服务提供商对于将P2P方式用于应用的兴趣越来越大。
6.3动态主机配置协议DHCP
6.4域名系统DNS
-
域名系统DNS的作用
- 当我们在浏览器地址栏中输入某个Web服务器的域名时,用户主机会首先在自己的DNS高速缓存中查找该域名所对应的IP地址。如果没有找到则会向网络中的某台DNS服务器查询。DNS服务器中有域名和IP地址映射关系的数据库。当DNS服务器收到DNS查询报文后,在其数据库中进行查询,之后将查询结果发送给用户主机。现在,用户主机中的浏览器可以通过Web服务器的IP地址对其进行访问了
-
因特网是否可以只使用一台DNS服务器?
- 这种做法是不可取的。因为因特网的规模很大, 这样的域名服务肯定会因为超负荷而无法正常工作,而且一旦域名服务器出现故障,整个因特网就会瘫痪。早在1983年,因特网就开始采用层次结构的命名树作为主机的名字 (即域名),并使用分布式的域名系统DNS.
DNS使大多数域名都在本地解析,仅少量解析需要在因特网上通信,因此系统效率很高。
由于DNS是分布式系统,即使单个计算机出了故障,也不会妨碍整个系统的正常运行。
- 这种做法是不可取的。因为因特网的规模很大, 这样的域名服务肯定会因为超负荷而无法正常工作,而且一旦域名服务器出现故障,整个因特网就会瘫痪。早在1983年,因特网就开始采用层次结构的命名树作为主机的名字 (即域名),并使用分布式的域名系统DNS.
-
因特网采用层次树状结构的域名结构
-
域名的结构由若干个分量组成,各分量之间用“点”隔开,分别代表不同级别的域名。
- 每一级的域名都由英文字母和数字组成,不超过63个字符,不区分大小写字母。
- 级别最低的域名写在最左边,而级别最高的顶级域名写在最右边。
- 完整的域名不超过255个字符。
-
域名系统既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思
-
各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由因特网名称与数字地址分配机构ICANN进行管理
-
-
顶级域名TLD(Top Level Domain)分为一下三类:
- 国家顶级域名nTLD:采用ISO3166的规定。如cn表示中国,us表示美国,uk表示英国、等等。
- 通用顶级域名gTLD:最常见的通用顶级域名有七个,即: com (公司企业)、net (网络服务机构)、org (非营利性组织)、int (国际组织)、edu (美国教育结构)、gov (美国政府部门)、mil (美国军事部门)
- 反向域arpa:用于反向域名解析,即IP地址反向解析为域名。
-
在国家顶级域名下注册的二级域名均由该国家自行确定。例如,顶级域名为jp的日本,将其教育和企业机构的二级域名定为ac和co,而不用edu和com。
-
我国则将二级域名划分为以下两类
- 类别域名:共七个:ac (科研机构)、com (工、商、金融等企业)、edu (教育机构)、gov (政府部门)、net (提供网络服务的机构)、mil (军事机构)和org (非营利性组织)
- 行政区域名共34个,适用于我国的各省、自治区、直辖市。例如: bj为北京市、sh为上海市.
is为江苏省,等等。
- 域名和IP地址的映射关系必须保存在域名服务器中,供所有其他应用查询。显然不能将所有信息都储存在一台域名服务器中。DNS使用分布在各地的域名服务器来实现域名到IP地址的转换。
- 域名服务器可以划分为以下四种不同的类型:
- 根域名服务器
根域名服务器是最高层次的域名服务器。每个根域名服务器都知道所有的顶级域名服务器的域名及其1P地址,因特网上共有13个不同1P地址的根域名服务器。尽管我们将这13个根域名服务器中的每一个都视为单个的服务器,但“每台服务器”实际上是由许多分布在世界各地的计尊机构成的服务器群集。当本地域名服务器向根域名服务器发出查询请求时,路由器就把查询请求报文转发到离这个DNS客户最近的一个根域名服务器。这就加快了DNS的查询过程,同时也更合理地利用了因特网的资源。根域名服务器通常并不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的IP地址 - 顶级域名服务器
这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时就给出相应的回答(可能是是最后的结果,也可能是下一级权限域名服务器的IP地址)。 - 权限域名服务器
这些域名服务器负责管理某个区的域名。每一个主机的域名都必须在某个权限域名服务器处注册登记。因此权限域名服务器知道其管辖的域名与IP地址的映射关系。另外,权限域名服务器还知道其下级域名服务器的地址。 - 本地域名服务器
本地域名服务器不属于上述的域名服务器的等级结构。当一个主机发出DNS请求报文时,这个报文就首先被送往该主机的本地域名服务器。本地域名服务器起着代理的作用,会将该报文转发到上述的域名服务器的等级结构中。每一个因特网服务提供者ISP,一个大学,甚至一个大学里的学院,都可以拥有一个本地域名服务器,它有时也称为默认域名服务器。本地域名服务器离用户较近,一般不超过几个路由器的距离,也有可能就在同一个局域网中。本地域名服务器的IP地址需要直接配置在需要域名解析的主机中。
- 根域名服务器
6.5文件传输协议FTP
-
将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送。
-
文件传送协议FTP (File Transfer Protocol) 是因特网上使用得最广泛的文件传送协议。
- FTP提供交互式的访问,允许客户指明文件的类型与格式 (如指明是否使用ASCI码),并允许文件具有存取权限 (如访问文件的用户必须经过授权,并输入有效的口令)。
- FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件.
-
在因特网发展的早期阶段,用FTP传送文件约占整个因特网的通信量的三分之一,而由电子邮件和域名系统所产生的通信量还要小于FTP所产生的通信量。只是到了1995年,万维网WWW的通信量才首次超过了FTP
-
FTP的常见用途是在计算机之间传输文件,尤其是用于批量传输文件。FTP的另一个常见用途是让网站设计者将构成网站内容的大量文件批量上传到他们的Web服务器.
6.6电子邮件
-
传统的电话通信属于实时通信,存在以下两个缺点:
- 电话通信的主叫和被叫双方必须同时在场;
- 一些不是十分紧迫的电话也常常不必要地打断人们的工作或休息。
-
而电子邮件与邮政系统的寄信相似。
- 发件人将邮件发送到自己使用的邮件服务器
- 发件人的邮件服务器将收到的邮件按其目的地址转发到收件人邮件服务器中的收件人邮箱
- 收件人在方便的时候访问收件人邮件服务器中自己的邮箱,获取收到的电子邮件。
-
电子邮件使用方便、传递迅速而且费用低廉。它不仅可以传送文字信息,而且还可附上声音和图像。
-
由于电子邮件的广泛使用,现在许多国家已经正式取消了电报业务。在我国,电信局的电报业务也因电子邮件的普及而濒临消失
-
电子邮件系统采用客户/服务器方式
-
电子邮件系统的三个主要组成构件: 用户代理,邮件服务器,以及电子邮件所需的协议
- 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件。
- 邮件服务器是电子邮件系统的基础设施。因特网上所有的ISP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。
- 协议包括邮件发送协议 (例如SMTP) 和邮件读取协议 (例如POP3,IMAP)。
- 简单邮件传送协议SMTP (Simple Mail Transfer Protocol)的基本工作原理
注意:
1.为了简单起见,省略了认证过程;
2.应答代码后面一般都跟有简单的描述信息
3.不同的SMTP服务器给出的相同应答代码的描述信息可能不同
- 电子邮件的信息格式并不是由SMTP定义的,而是在RFC822中单独定义的。这个RFC文档已在2008年更新为RFC5322。一个电子邮件由信封和内容两个部分。而内容又由首部和主体两部分构成
- SMTP协议只能传送ASCII码文本数据,不能传送可执行文件或其他的二进制对象
- SMTP不能满足传送多媒体邮件 (例如带有图片、音频或视频数据)的需要。并且许多其他非英语国家的文字(例如中文、俄文、甚至带有重音符号的法文或德文)也无法用SMTP传送
- 为解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件扩展MIME (Multipurpose nteret Mail Extensions)
- 增加了5个新的邮件首部字段,这些字段提供了有关邮件主体的信息。
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化.
- 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变
-
实际上,MIME不仅仅用于SMTP,也用于后来的同一面对ASCII字符的HTTP
-
常用的邮件读取协议有以下两个:
- 邮局协议POP (Post 0ffice Protocol),POP3是其第三个版本,是因特网正式标准。非常简单、功能有限的邮件读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件。(例如创建文件夹,对邮件进行分类管理等)。
- 因特网邮件访问协议IMAP (Internet Message Access Protocol),IMAP4是其第四个版本,目前还只是因特网建议标准。
功能比POP3强大的邮件读取协议。用户在自己的计算机上就可以操控邮件服务器中的邮箱,就像在本地操控一样,因此IMAP是一个联机协议。 - POP3和IMAP4都采用基于TCP连接的客户/服务器方式。POP3使用熟知端口110,IMAP4使用熟知端口143。
-
基于万维网的电子邮件
- 通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器.
- 邮件服务器网站通常都提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理。
6.7万维网WWW
-
浏览器最重要的部分是渲染引擎,也就是浏览器内核。负责对网页内容进行解析和显示。
- 不同的浏览器内核对网页内容的解析也有不同,因此同一网页在不同内核的浏览器里的显示效果可能不同;
- 网页编写者需要在不同内核的浏览器中测试网页显示效果。
-
为了方便地访问在世界范围的文档,万维网使用统一资源定位符URL来指明因特网上任何种类“资源”的位置
-
URL的一般形式由以下四个部分组成:
<协议>://<主机>:<端口>/<路径>
-
超文本传输协议HTTP(HyperText Transfer Protocol)
- HTTP定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。
- 我们使用用户主机来访问湖南科技大学的万维网服务器,可以看成用户主机中的浏览器进程(即客户进程)与服务器中的服务器进程基于因特网的通信。浏览器进程首先发起与服务器进程的TCP连接,使用熟知端口号80,基于这条已建立好的TCP连接。浏览器进程向服务器进程发送HTTP请求报文,服务器进程收到后,执行相应操作,然后给浏览器发回HTTP响应报文
-
HTTP/1.0采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接当收到响应后就立即关闭连接。
- 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引用对象(例如图片等),那么请求每一个对象都需要花费2RTT的时间。
- 为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重。
-
HTTP/1.1采用持续连接方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。
- 为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率。
-
HTTP的报文格式
- HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。
- 使用Cookie在服务器上记录用户信息
- 早期的万维网应用非常简单,仅仅是用户查看存放在不同服务器上的各种静态的文档。因此HTTP被设计为一种无状态的协议。这样可以简化服务器的设计。
- 现在,用户可以通过万维网实现各种复杂的应用,如网上购物、电子商务等。这些应用往往需要万维网服务器能够识别用户。
- Cookie提供了一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息。也就是说,Cookie是一种对无状态的HTTP进行状态化的技术。