把上述三种网络融合成一种网络就能够提供所有的上述服务
别名:Internet/网络/因特网/互联网
互联网是一种远程分组交换网络,所以采用的是分组交换技术。
由所有连接在因特网上的主机组成(台式电脑,大型服务器,笔记本电脑,平板,智能手机等)。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。
由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)。
任意把几个计算机网络互连起来(不管采用什么协议),并能够相互通信,这样构成的是一个互连网(internet) ,而不是互联网(Internet)。
电话交换机接通电话线的方式称为电路交换;
从通信资源的分配角度来看,交换(Switching)就是按照某种方式动态地分配传输线路的资源;
整个报文的比特流连续地从源点直达终点,好像在一个管道中传送。
将较长的报文划分成一个个更小的等长数据段,并加上首部(包头),在终端重新按序组装成报文
分组到达一个路由器后,先暂时存储在缓冲区中,查找转发表,然后从一条合适的链路转发出去。
在路由器中运行,自动找到路由器转发分组最合适的路径
优点 | 所采用的手段 |
---|---|
高效 | 在分组传输的过程中动态分配传输带宽,对通信链路是逐段占用 |
灵活 | 为每一个分组独立地选择最合适的转发路由 |
迅速 | 以分组作为传送单位,可以不先建立连接就能向其他主机发送分组 |
可靠 | 保证可靠性的网络协议;分布式多路由的分组交换网,使网络有很好的生存性 |
整个报文先传送到相邻结点,全部存储下来后查找转发表,转发到下一个结点。
作用范围通常为几十到几千公里,因而有时也称为远程网(long haul network)。广域网是互联网的核心部分,其任务是通过长距离(例如,跨越不同的国家)运送主机所发送的数据。
作用范围一般是一个城市,可跨越几个街区甚至整个城市
一般用微型计算机或工作站通过高速通信线路相连(速率通常在 10 Mbit/s 以上),但地理上范围较小(1 km 左右)
在个人工作的地方把个人使用的电子设备用无线技术连接起来的网络。也被称为无线个人局域网WPAN(Wireless PAN)
这是指电信公司(国有或私有)出资建造的大型网络。“公用”的意思就是所有愿意按电信公司的规定交纳费用的人都可以使用这种网络。因此公用网也可称为公众网。
这是某个部门为满足本单位的特殊业务工作的需要而建造的网络。这种网络不向本单位以外的人提供服务。
计算机中数据量的单位,也是信息论中使用 的信息量的单位。
bit/s(b/s或bps),或 kbit/s、Mbit/s、 Gbit/s 等
8 Gbit/s= 8e3 Mbit/s= 8e6 kbit/s= 1e9Byte/s = 8e9 bit/s,每一级 1 0 3 10^3 103
在单位时间内通过某个网络(或信道、接口)的数据量。吞吐量受网络的带宽或网络的额定速率的限制。
带宽1 Gb/s的以太网,代表其额定速率是1 Gb/s,这个数值也是该以太网的吞吐量的绝对上限值。因此,对于带宽1 Gb/s的以太网,可能实际吞吐量只有 700 Mb/s,甚至更低。
时延(延迟/迟延)是指数据从网络(或链路)的一端传送到另一端所需的时间。
总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延
主机或路由器发送数据帧所需要的时间。也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。
发送时延 = 数据帧长度(bit)/ 发送速率(bit/s)
电磁波在信道中需要传播一定的距离而花费的时间。
传播时延 = 信道长度(米)/ 信号在信道上的传播速率(米/秒)
主机或路由器在收到分组时,为处理分组(例如分 析首部、提取数据、差错检验或查找路由)所花费 的时间。
分组在路由器输入输出队列中排队等待处理所经历的时延。 排队时延的长短往往取决于网络中当时的通信量
时延带宽积 = 传播时延 * 带宽
往返时间表示从发送方发送数据开始,到发送方收到来自接收方的确认,总共经历的时间。
在互联网中,往返时间还包括各中间结点的处理时延、排队时延以及转发数据时的发送时延。
当使用卫星通信时,往返时间 RTT 相对较长, 是很重要的一个性能指标。
指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道的利用率是零。
全网络的信道利用率的加权平均值。
重点掌握各种时延的计算、往返时问RTT的计算和利用率的计算。
若令 D0 表示网络空闲时的时延,D 表示网络当前的时延,则在适当的假定条件下,可以用下 面的简单公式表示 D 和 D0之间的关系。其中:U 是网络的利用率,数值在 0 到 1 之间。
D = D 0 1 − U D= \dfrac{D_{0}}{1-U} D=1−UD0
信道利用率并非越高越好。当某信道的利用率增大时,该信道引起的时延也就迅速增加。
费用 、 质量 、标准化 、 可靠性 、 可扩展性和可升级性 、 易于管理和维护
OSI 参考模型把对等层次之间传送的数据单位称为该层的PDU
OSI中层与层之间交换的数据的单位
SDU 可以与 PDU 不一样,例如,可以是多个 SDU 合成为一个 PDU,也可以是一个 SDU 划 分为几个 PDU。
同一系统相邻两层的实体进行交互的地方,它是一个抽象的概念,它实际上就是一个逻辑接口。
开放系统互连基本参考模型 OSI/RM (Open Systems Interconnection Reference Model),法律上的国际标准
事实上的国际标准
通过应用进程间的交互来完成特定网络应用。
定义的是应用进程间通信和交互的规则。e.g.:域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的SMTP协议
报文
负责向两台主机中进程之间的通信提供通用的数据传输服务。(可以保证端到端可靠性[使用TCP])
提供面向连接的、可靠的数据传输服务,其数据传输的单位是报文段(segment)。
提供无连接的、尽最大努力(best-effort)的数据传输服务(不保证数据传输的可靠性),其数据传输的单位是用户数据报。
报文段
为分组交换网上的不同主机提供通信服务。
网络层=网际层=IP层 分组=数据报
IP协议
IP数据报(分组)
简称链路层。
将网络层交下来的IP数据报组装成帧(framing),在两个相邻结点间的链路上传送帧(frame)。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。
点对点协议PPP、CSMA/CD等
帧
为数据链路层提供物理连接。
比特bit
网络协议 (network protocol),简称为协议,是为进行网络中的数据交换而建立的规则、标 准或约定的集合。
数据与控制信息的结构或格式 。
需要发出何种控制信息,完成何种动作以及做出何种响应。
事件实现顺序的详细说明。
运送消息的实体
数据的电气的或电磁的表现。
代表消息的参数的 取值是连续的。
代表消息的参数的取值是离散的。
时间域内的波形表示数字信号时,表示不同数值的波形。
指明接口所用接线器的形状和尺寸、引线 数目和排列、固定和锁定装置等。
指明在接口电缆的各条线上出现的电压的 范围。
指明某条线上出现的某一电平的电压的意义。
指明对于不同功能的各种可能事件的出现顺序。(完成串行并行之间的转换)
只能有一个方向的通信而没有反方向的交互。
通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。
通信的双方可以同时发送和接收信息。
仅对基带信号的码形进行变换,使它能够与信道特性相适应。变换后的信号仍然是基带信号。 把这种过程称为编码 (coding)。
使用载波 (carrier)进行调制,把基带信号的频率范围搬移到较高的频段,并转换为模拟信号, 这样就能够更好地在模拟信道中传输(即仅在一段频率范围内能够通过信道)
载波的振幅随基带数字信号而变化。
载波的频率随基带数字信号而变化。
载波的初始相位随基带数字信号而变化。
信号的平均功率和噪声的平均功率之比
信噪比(dB) = $10log_{10}(S/N) $ (dB)
香农 (Shannon) 用信息论的理论推导 出了带宽受限且有高斯白噪声干扰的信道的极限、无差错的信息传输速率
信道的极限信息传输速率 C 可表达为: $C = W log_{2} (1+S/N) $ (bit/s)
其中: W 为信道的带宽(以 Hz 为单位); S 为信道内所传信号的平均功率; N 为信道内部的高斯噪声功率。
假定要用3KHz带宽的电话信道传送64 kbit/s的数据(无差错传输),试问这个信道应该具有多高的信噪比?
$C = W log2 (1+S/N) \Rightarrow 64 kbit/s = 3000 log2 (1+S/N) $
N b = N b a u d l o g 2 M N_{b}=N_{baud}log_{2}M Nb=Nbaudlog2M
其中 N b N_{b} Nb = 比特速率, N b a u d N_{baud} Nbaud = 码元速率(波特率,单位时间内传送的码元符号的个数),M = 进制数(有效离散值)
物理层下的传输媒体不属于物理层,可视为第0层
时分复用则是将时间划分为一段段等长的时分复用帧(TDM帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。
每一个用户所占用的时隙是周期性地出现(其周期就是TDM帧的长度)的。
TDM 信号也称为等时 (isochronous) 信号。
时分复用的所有用户在不同的时间占用同样的频带宽度。
时分复用可能会造成线路资源的浪费
又叫异步时分复用,STDM 帧不是固定分配时隙,而是按需动态地分配时隙。因此统计时分复用 可以提高线路的利用率。
共有4个站进行码分多址通信。4个站的码片序列为 A:(-1-1-1+1+1-1+1+1) B:(-1-1+1-1+1+1+1-1) C:(-1+1-1+1+1+1-1-1) D:(-1+1-1-1-1-1+1-1) 现收到这样的码片序列S:(-1+1-3+1-1-3+1+1)。问哪个站发送数据了?发送数据的站发送的是0还是1?
S•A=(+1-1+3+1-1+3+1+1)/8=1, A发送1
S•B=(+1-1-3-1-1-3+1-1)/8=-1, B发送0
S•C=(+1+1+3+1-1-3-1-1)/8=0, C无发送
S•D=(+1+1+3-1+1+3+1-1)/8=1, D发送1
站点1、2、3通过COMA共享链路。站点1、2、3的码片序列分别是A:(1,1,1,1)、B:(1,-1,1,-1)和C:(1,1,-1,-1),若站3从链路上收到的序列S是(2,0,2,0, 0,-2,0,-2, 0,2,0,2),则站点3收到站点1发送的数据是多少?
S•A=(2+0+2+0)/ 4=1,(0-2+0-2)/ 4=-1,(0+2+0+2)/ 4=1,A发送1 0 1
S•B=(2+0+2+0)/ 4=1,(0+2+0+2)/ 4=1,(0-2+0-2)/ 4=-1,B发送1 1 0
S•C=(2+0-2+0)/4=0,(0-2+0+2)/ 4=0,(0+2+0-2)/ 4=0,C无发送
非对称数字用户线 ADSL (Asymmetric Digital Subscriber Line) 技术就是用数字技术对现有的模拟电话用户线进行改造,使它能够承载宽带业务。
光纤同轴混合网HFC (Hybrid Fiber Coax) 网是在目前覆盖面很广的有线电视网 CATV 的基础上开发的一种居民宽带接入网
FTTx 是一种实现宽带居民接入网的方案,代表多种宽带光纤接入方式。FTTx 表示 Fiber To The…(光纤到…),例如:
分为点对点信道和广播信道两种,对应的协议分别为PPP和CSMA/CD
在一段数据的前后分别添加首部和尾部(用于帧定界),然后就构成了一个帧。
某一个实际存在的事物看起来却好像不存在一样
面向字节的物理链路使用字节填充 (byte stuffing) 或字符填充 (character stuffing)
面向比特的物理链路使用比特填充
在一段时间内,传输错误的比特占所传输比特总数的比率,与信噪比有很大的关系(正相关)。
前面讲了理论,这里介绍具体协议的实现。
必须建立准确的时钟信号,各信号码元之间的相对位置都是固定的。
在每一个字符的开始和结束的地方加上标志,即加上起始码和停止码。
下面两者方法本质上都是为了避免帧定界错误(帧定界符为0x7E/0111 1110 B)。
当 PPP 用在异步传输时(传输单位为字节),就使用一种特殊的字符填充法。
当 PPP 用在同步传输链路时(传输单位为比特),协议规定采用硬件来完成比特填充。
符合 DIX Ethernet V2 标准的局域网
以太网提供的服务是无连接不可靠的交付,即尽最大努力的交付。当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定。如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。对发送的帧不进行编号,也不要求接收方发回确认帧。这样做的理由是局域网的信道质量非常好,产生的错误的概率非常小。
网络接口板又称为通信适配器 (adapter) 或网络接口卡 NIC (Network Interface Card),或“网卡”。
物理上为星型,逻辑上为总线型
以Ethernet V2标准的MAC帧格式为例,假设网络层使用的是IP协议
分为目的地址和源地址字段
MAC 层的硬件地址 /硬件地址/物理地址/MAC 地址。
IEEE 802 标准规定 MAC 地址字段可采用 6 字节 (48 位) 或 2 字节 (16 位) 这两种中的一种。
所有 48 位都为 1 时,为广播地址。只能作为目的地址使用。
用来标志上一层使用的是什么协议,以便把收到的 MAC 帧的数据上交给上一层的这个协议。例如,当类型字段的值是0x0800时,就表示上层使用的是IP数据报。若类型字段的值为0x8137,则表示该帧是由NovellIPX发过来的。
其长度在46到1500字节之间(46字节是这样得出的:最小长度64字节减去18字节的首部和尾部就得出数据字段的最小长度)。
MAC帧中FCS字段采用CRC检验,检验的内容不包括前同步码和帧开始定界符。
在任意时刻,在每个碰撞域中只能有一个站在发送数据
它根据 MAC 帧的目的地址对收到的帧进行转发和过滤。
交换式集线器 (switching hub) /交换式集线器/以太网交换机 (switch) /第二层交换机 (L2 switch)
总线以太网使用CSMA/CD 协议,以半双工方式工作。但以太网交换机不使用共享总线,没有碰撞问题,因此不使用CSMA/CD协议,而是以全双工方式工作。但由于它的帧结构未改变,仍然采用以太网的帧结构,所以仍称为以太网。
虚拟局域网VLAN (Virtual LAN)是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。 每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个 VLAN。
当 B1 向 VLAN2 工作组内成员发送数据时, 工作站 B2 和 B3 将会收到广播的信息;B1 发送数据时,工作站 A1,A2 和 C1 都不会收到 B1 发出的广播信息。
虚拟局域网其实只是局域网给用户提供的一种服务, 而并不是一种新型局域网。
虚拟局域网协议允许在以太网的帧格式中插入一个4字节的标识符,称为VLAN标记(tag),用来指明发送该帧的计算机属于哪一个虚拟局域网。插入VLAN标记得出的帧称为802.1Q帧。显然,如果还使用原来的以太网帧格式,那么就无法区分是否划分了虚拟局域网。
速率达到或超过 100 Mbit/s 的以太网称为高速以太网,又称为快速以太网 (Fast Ethernet)。
CSMA/CD:载波监听多点接入 / 碰撞检测 (Carrier Sense Multiple Access with Collision Detection) 。
“载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
“多点接入”表示许多计算机以多点接入的方式连接在一根总线上。
“碰撞检测”(“冲突检测”)就是计算机边发送数据边检测信道上的信号电压大小。
在使用CSMA/CD协议时,一个站不可能同时进行发送和接收(但必须边发送边监听信道)。因此使用CSMA/CD 协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)。
最先发送数据帧的站,在发送数据帧后至多经过时间 2 τ 2 \tau 2τ (两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。
以太网的端到端往返时延 2 τ 2 \tau 2τ 称为争用期(碰撞窗口)。
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
让发生碰撞的站在停止发送数据后推迟一段随机的时间才能再发送数据,减少重传时发生冲突的概率。
PPPoE (PPP over Ethernet) 的意思是“在以太网上运行 PPP”,它把 PPP 协议与以太网协议结合起来 —— 将 PPP 帧再封装到以太网中来传输。该协议在以太网进行宽带接入互联网时使用。
实现网络互连,完成分组在计算机网络核心部分的传输,即实现分组在多个网络的传输。为主机之间提供逻辑通信.
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
从网络层使用的 IP 地址, 解析出在数据链路层使用的硬件地址。
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。每一台主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。
ICMP不是IP的高层协议(看起来好像是高层协议,因为ICMP报文是装在IP数据报中,作为其中的数据部分),而是IP层的协议。
只报告错误,不能纠错
分类
数据字段格式
IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
找出以源主机为根节点的多播转发树。
虚拟互连网络/逻辑互连网络,虽然互连起来的各种物理网络的异构性客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用IP协议的虚拟互连网络可简称为IP网。
使用IP网的好处是:当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各网络的具体异构细节(如具体的编址方案、路由选择协议,等等)。如果在这种覆盖全球的IP网的上层使用TCP协议,那么就是现在的互联网(Internet)。
它们分别用在什么场合?
把整个因特网看成为一个单一的、抽象的网络。 IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。是一种逻辑地址。
两级IP地址的不合理之处
划分子网 (subnetting):在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。
减少了能够连接在网络上的主机总数。
【例4-2】已知 IP 地址是 141.14.72.24,子网掩码是 255.255.192.0。试求网络地址。
【例4-3】上例中,若子网掩码改为 255.255.224.0,试求网络地址,讨论所得结果。
不同的子网掩码得出相同的网络地址。 但不同的掩码的效果是不同的。
无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。是无分类编址方法
地址块10.0.0.0/10可简写为10/10,也就是把点分十进制中低位连续的0省略。另一种简化表示方法是在网络前缀的后面加一个星号*,如:
00001010 00*
意思是:在星号*之前是网络前缀,而星号*表示IP地址中的主机号,可以是任意值,
可以更加有效地分配 IPv4 的地址空间,可根据客户的需要分配适当大小的 CIDR 地址块。
这个 ISP 共有 2^6=64 个 C 类网络。如果不采用 CIDR 技术, 则在与该 ISP 的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需 用路由聚合后的 1 个项目 206.0.64.0/18 就能找到该 ISP。
使用 CIDR 时,路由表中的每个项目由“网络 前缀”和“下一跳地址”组成。在查找路由表 时可能会得到不止一个匹配结果。
4-25 一个自治系统有5个局域网,其连接图如图所示。LAN2至LAN5上的主机数分别为:91、150、3和15。该自治系统分配到的IP地址块为30.138.118/23。试给出每一个局域网的地址块(包括前缀)(答案不唯一)。
30.138.118/23=30.138.01110110.0。
LAN3有150 台主机,至少分配256个地址。
LAN2有 91 台主机,至少分配128个。
LAN4 有 3 台主机,至少分配8个。
LAN5 有 15 台主机,至少分配32个。
LAN1 连接 3 台路由器,有 3 个IP地址,至少分配4个。
局域网 | 地址块 |
---|---|
LAN1 | 30.138.119.192/29 |
LAN2 | 30.138.119.0/25 |
LAN3 | 30.138.118.0/24 |
LAN4 | 30.138.119.200/29 |
LAN5 | 30.138.119.128/26 |
4-26 一个大公司有一个总部和三个下属部门。公司分配到的网络前缀是192.77.33/24。公司的网络布局如图所示。总部共有五个局域网,其中的LAN1~LAN4都连接到路由器R1上,R1再通过LAN5与路由器R2相连。R2和远地的三个部门的局域网LAN6~LAN8通过广域网相连。每一个局域网旁边标明的数字是局域网上的主机数。试给每一个局域网分配一个合适的网络前缀。
解答:
50个主机的LAN1需要前缀/26(主机号6位,62个主机号),
30个主机的LAN3需要前缀/27(主机号5位,30个主机号),
两个10个主机的LAN1和LAN4各需要一个前缀/28(主机号4位,14个主机号)。
LAN6~LAN8(加上路由器)各需要一个前缀/27(主机号5位,30个主机号),
3个WAN各有两个端点,各需要一个前缀/30(主机号2位,2个主机号)。
LAN5需要前缀/30(主机号2位,2个主机号),但考虑到以太网上可能还要再接几个主机,故留有余地,可分配一个29(主机号3位,6个主机号)。
本题的解答有很多种,下面给出其中的一种答案(先选择需要较大的网络前缀):
LAN1:192.77.33.0/26
LAN3:192.77.33.64/27 192.77.33.0100 0000
LAN6:192.77.33.96/27 192.77.33.0110 0000
LAN7:192.77.33.128/27 192.77.33.1000 0000
LAN8:192.77.33.160/27 192.77.33.1010 0000
LAN2:192.77.33.192/28 192.77.33.1100 0000
LAN4:192.77.33.208/28 192.77.33.1101 0000
LAN5:192.77.33.224/29 192.77.33.1110 0000(考虑到以太网上可能还要再接几个主机,故留有余地。)
WAN1:192.77.33.232/30 192.77.33.1110 1000
WAN2:192.77.33.236/30 192.77.33.1110 1100
WAN3:192.77.33.240/30 192.77.33.1111 0000
4-33 某单位分配到一个地址块136.23.12.64/26。现在需要进一步划分为4个一样大的子网。试问:
(1)每一个子网的网络前缀有多长?28位
(2)每一个子网中有多少个地址?2^4^=16个地址
(3)每一个子网的地址是什么?
136.23.12.64=10001000 00010111 00001100 0100000
136.23.12.64/28
136.23.12.80/28
136.23.12.96/28
136.23.12.112/28
(4)每一个子网可分配给主机使用的最小地址和最大地址是什么?
除去主机号为全0的网络地址和全1的广播地址
136.23.12.65/28 136.23.12.78/28
136.23.12.81/28 136.23.12.94/28
136.23.12.97/28 136.23.12.110/28
136.23.12.113/28 136.23.12.126/28
首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。
占 4 位,指 IP 协议的版本。 目前的 IP 协议版本号为 4 (即 IPv4)。
占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节), 因此 IP 的首部长度的最大值是 60 字节。
占 8 位,用来获得更好的服务。 在旧标准中叫做服务类型,但实际上一直未被使用过。 1998 年这个字段改名为区分服务。 只有在使用区分服务(DiffServ)时,这个字段才起作用。 在一般的情况下都不使用这个字段。
占 16 位,指首部和数据之和的长度, 单位为字节,因此数据报的最大长度为 65535 字节。若 总长度超过数据链路层的最大传送单元 MTU(Maximum Transfer Unit)则需要分片。
占16 位。IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
占 3 位,目前只有前两位有意义。 标志字段的最低位是 MF (More Fragment)。 MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。 标志字段中间的一位是 DF (Don’t Fragment) 。 只有当 DF = 0 时才允许分片。
占13 位,指出较长的分组在分片后 某片在原分组中的相对位置。 片偏移以 8 个字节为偏移单位。因此每个分片的长度必须是8字节(64位)的整数倍。
一数据报的总长度为 3820 字节,其数据部分的长度为 3800 字节(使用固定首部),需要分片为长度不超过 1420 字节的数据报片。
因固定首部长度为 20 字节,因此每个数据报片的数据部分长度不能超过 1400 字节。
于是分为 3 个数据报片,其数据部分的长度分别为 1400、1400 和 1000 字节。
原始数据报首部被复制为各数据报片的首部, 但必须修改有关字段的值。
分片示意图
IP 数据报首部中与分片有关的字段中的数值
总长度 | 标识 | MF | DF | 片偏移 | |
---|---|---|---|---|---|
原始数据报 | 3820 | 12345 | 0 | 0 | 0 |
数据报片1 | 1420 | 12345 | 1 | 0 | 0 |
数据报片2 | 1420 | 12345 | 1 | 0 | 175 |
数据报片3 | 1020 | 12345 | 0 | 0 | 350 |
占8 位,记为 TTL (Time To Live), 指示数据报在网络中可通过的路由器数的最大值。功能为“跳数限制”。路由器在每次转发数据报之前就把TTL值减1。若 TTL值减小到零,就丢弃这个数据报,不再转发。
可以防止数据报在网络中兜圈子
占8 位,指出此数据报携带的数据使用何种协议, 以便目的主机的 IP 层将数据部分上交给对应的协议进行处理
协议名 | ICMP | IGMP | lP | TCP | EGP | IGP | UDP | IPv6 | ESP | OSPF |
---|---|---|---|---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 4 | 6 | 8 | 9 | 17 | 41 | 50 | 89 |
占16 位,只检验数据报的首部, 不检验数据部分。这里不采用 CRC 检验码而采用简单的16 位二进制反码求和算法。
二进制反码求和规则: 0和0相加是0,0和1相加是1,1和1相加是0但要产生一个进位1,加到下一列。若最高位相加后产生进位,则最后得到的结果要加上溢出的进位 1(可能有多个1)。
上层协议格式
IP多播(multicast)(也称多址广播或组播)技术,是一种允许一台或多台主机(多播源)发送单一数据包到多台主机(一次的,同时的)的TCP/IP网络技术。多播作为一点对多点的通信,是节省网络带宽的有效方法之一。
IANA提供的以太网多播地址的范围是:01-00-5E-00-00-00
到 01-00-5E-7F-FF-FF
,
只有 23位
能用作 多播地址
。
互联网号码指派管理局IANA拥有的以太网地址块的高24位为00-00-5E,以太网硬件地址字段中的第1字节的最低位为1时即为多播地址,但只分配了一半(23位)给多播,因此高24位为01-00-5E,并且25位为0。
由于多播IP地址与以太网硬件地址的映射关系不是唯一的(228:223=32:1),因此收到多播数据报的主机,还要在IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
23bit完全相同的几率已经很小了,这种设计方法只是只是一个折中而已
ip多播地址 224.128.64.32 (E0-80-40-20)
和 另一个 ip多播地址 224.0.64.32 (E0-00-40-20)
转换成以太网的硬件多播地址都是 01-00-5E-00-40-20
仍需要目的主机在3层根据ip地址进行过滤
将整个互联网划分为许多较小的自治系统 (Autonomous System,AS),一个自治系统是一个互联网,其最重要的特点 是自治系统有权自主地决定在本系统内采用何种路由选择协议。一个自治系统内的所有网络都属于一个行政单位来管辖。一个自治系统的所有路由器在本自治系统内必须是连通的。
自治系统之间的路由选择也叫做域间路由选择 (interdomain routing),在自治系统内部的路由选择叫做域内路由选择 (intradomain routing) 。
在一个自治系统内部使用的路由选择协议
路由信息协议 RIP (Routing Information Protocol) 是一种分布式的、基于距离向量算法的路 由选择协议。 要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
实现简单,开销较小。
对每一个相邻路由器发送过来的RIP报文,进行以下步骤:
对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1。每一个项目都有三个关键数据,即:到目的网络N,距离是d,下一跳路由器是X。
这样做是为了便于进行本路由表的更新。假设从位于地址X的相邻路由器发来的RIP报文的某一个项目是“Net2,3,Y”,意思是“我经过路由器Y到网络Net2的距离是3”,那么本路由器就可推断出:“我经过X到网络Net2的距离应为3+1 = 4”。于是,本路由器就把收到的RIP报文的这一个项目修改为“Net2,4,X",作为下一步和路由表中原有项目进行比较时使用(只有比较后才能知道是否需要更新)。注意:收到的项目中的Y对本路由器是没有用的,因为Y不是本路由器的下一跳路由器地址(是下下一跳)。
对修改后的RIP报文中的每一个项目,进行以下步骤:
若原来的路由表中没有目的网络N,则把该项目添加到路由表中。
表明这是新的目的网络,应当加入到路由表中。例如,本路由表中没有到目的网络Net2的路由,那么在路由表中就要加入新的项目“Net2,4,X”。
否则(即在路由表中有目的网络N,这时就再查看下一跳路由器地址〉
若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目。
要以最新的消息为准。到目的网络的距离有可能增大或减小,但也可能没有改变。例如,不管原来路由表中的项目是“Net2,3,X”还是“Net2,5,X”,都要更新为现在的“Net2,4,X”。
否则(即这个项目是:到目的网络N,但下一跳路由器不是X)
若收到的项目中的距离d小于路由表中的距离,则进行更新;
例如,若路由表中己有项目“Net2,5,P”,就要更新为“Net2,4,X”。因为到网络Net2的距离原来是5,现在减到4,更短了。
否则什么也不做。
若距离更大了,显然不应更新。若距离不变,更新后得不到好处,因此也不更新。
若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离置为16(距离为16表示不可达)。
返回。
上面给出的距离向量算法的基础就是 Bellman-Ford 算法(或Ford-Fulkerson算法)。这种算法的要点是这样的:
设是结点A到B的最短路径上的一个结点。若把路径A→B拆成两段路径A→X和X→B,则每一段路径A→X和X→B也都分别是结点A到X和结点X到B的最短路径。
【例4-5】已知路由器R6有表4-9(a)所示的路由表。现在收到相邻路由器R4发来的路由更新信息,如表4-9(b)所示。试更新路由器R6的路由表。
先把表4-9(b)中的距离都加1,并把下一跳路由器都改为R。得出表4-9©。
把这个表的每一行和表4-9(a)进行比较。
第一行在表4-9(a)中没有,因此要把这一行添加到表4-9(a)中。
第二行的Net2在表4-9(a)中有,且下一跳路由器也是R4。因此要更新(距离增大了)。第三行的Net3在表4-9(a)中有,但下一跳路由器不同。于是就要比较距离。新的路由信息的距离是2,小于原来表中的4,因此要更新。
这样,得出更新后的R的路由表如表4-9(d)所示。
4-37 假定网络中得路由器B的路由表有如下项目。
目的网络 | 距离 | 下—跳路由器 |
---|---|---|
N1 | 7 | A |
N2 | 2 | c |
N6 | 8 | F |
N8 | 4 | E |
N9 | 4 | F |
现在B收到从C发来的路由信息如下表。
目的网络 | 距离 |
---|---|
N2 | 4 |
N3 | 8 |
N6 | 4 |
N8 | 3 |
N9 | 5 |
目的网络 | 距离 | 下—跳路由器 |
---|---|---|
N2 | 5 | C |
N3 | 9 | C |
N6 | 5 | C |
N8 | 4 | C |
N9 | 6 | C |
目的网络 | 距离 | 下一条路由 | 备注 |
---|---|---|---|
N1 | 7 | A | 无新信息,不变 |
N2 | 5 | C | 以新信息为准 |
N3 | 9 | C | 原路由表没有目的网络N1,添加进去 |
N6 | 5 | C | 相比于F,选择C为下一跳更短 |
N8 | 4 | E | 下一跳选择E与C距离相同,不变 |
N9 | 4 | F | 选择C为下一跳距离更长,不变。 |
开放最短路径优先 OSPF (Open Shortest Path First)是为克服 RIP 的缺点在 1989 年开发出来的,是分布式的链路状态协议 。
注意:OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。
OSPF最主要的特征就是使用分布式的链路状态协议(link state protocol),而不是像RIP那样的距离向量协议。和RIP协议相比,OSPF 的三个要点和RIP的都不一样:
向本自治系统中所有路由器发送信息。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。
使用是洪泛法(flooding),路由器通过所有输出端口向所有相邻的路由器发送信息。而每一个相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。
而RIP协议仅仅向自己相邻的几个路由器发送信息。
发送的信息为与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
所谓“链路状态”就是说明本路由器都和哪些路由器相邻°,以及该链路的“度量”(metric)。OSPF将这个“度量”用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定,因此较为灵活。有时为了方便就称这个度量为“代价”。
而对于RIP协议,发送的信息是:“到所有网络的距离和下一跳路由器”。
只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。
而RIP不管网络拓扑有无发生变化,路由器之间都要定期交换路由表的信息。
若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。
外部网关协议(Border Gateway Protocol)是不同自治系统的路由器之间交换路由信息的协议。
BGP 较新版本是 2006 年 1 月发表的 BGP-4 (BGP 第 4 个版本)
双协议栈(dual stack)是指在完全过渡到IPv6之前,使一部分主机(或路由器)装有双协议栈:一个IPv4和一个IPv6。因此双协议栈主机(或路由器)既能够和IPv6的系统通信,又能够和IPv4的系统通信。
双协议栈的主机(或路由器)记为IPv6/IPv4,表明它同时具有两种IP地址:一个IPv6地址和一个IPv4地址。
双协议栈主机在和 IPv6主机通信时采用IPv6地址,而和 IPv4主机通信时则采用IPv4地址。双协议栈主机使用域名系统DNS来查询知道目的主机是采用哪一种地址。若DNS返回的是IPv4地址,双协议栈的源主机就使用IPv4地址。但当DNS返回的是IPv6地址,源主机就使用IPv6地址。
图4-49所示的情况是源主机A和目的主机F都使用IPv6,所以A向F发送IPv6数据报,路径是A→B→C→D→E→F。中间B到E这段路径是IPv4网络,路由器B不能向C转发IPv6数据报,因为C只使用IPv4协议。B是IPv6/IPv4路由器,它把IPv6数据报首部转换为IPv4数据报首部后发送给C。C再转发到D。当D转发到IPv4网络的出口路由器E时(E也是IPv6/IPv4路由器),再恢复成原来的IPv6数据报。
注意:Pv6首部中的某些字段无法恢复。例如,原来IPv6首部中的流标号X在最后恢复出的IPv6数据报中只能变为空缺。这种信息的损失是使用首部转换方法所不可避免的。
在IPv6数据报要进入 IPv4网络时,把 IPv6数据报封装成为IPv4数据报。整个的IPv6数据报变成了IPv4 数据报的数据部分。
IPv4数据报从路由器B经过路由器C和D,传送到E,而原来的IPv6数据报就好像在IPv4网络的隧道中传输,什么都没有变化。当IPv4数据报离开IPv4网络中的隧道时,再把数据部分(即原来的IPv6数据报)交给主机的IPv6协议栈。
图中的一条粗线表示在IPv4网络中好像有一个从B到E的“IPv6隧道”,路由器B是隧道的入口而E是出口。
在隧道中传送的数据报的源地址是B而目的地址是E。
要使双协议栈的主机知道IPv4 数据报里面封装的数据是一个IPv6数据报,就必须把IPv4首部的协议字段的值设置为41(41表示数据报的数据部分是IPv6数据报)。
仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
全球唯一的 IP 地址,必须向互联网的管理机构申请。
在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题。
RFC 1918 指明了一些专用地址 (private address)也叫做可重用地址 (reusable address)。
专用地址只能用作本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
采用这样的专用 IP 地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。
虚拟专用网 VPN (Virtual Private Network):利用公用的互联网作为本机构各专用网之间的 通信载体
VPN连接的每一个场所至少要有一个路由器具有合法的全球IP地址
路由器R1和R2。这两个路由器和互联网的接口地址必须是合法的全球IP地址。路由器R1和R2在专用网内部网络的接口地址则是专用网的本地地址。
网络地址转换 NAT (Network Address Translation) :解决在专用网上使用专用地址的主机如何与互联网上的主机通信(并不需要加密)问题。
图中给出了 NAT路由器的工作原理。专用网192.168.0.0内所有主机的IP地址都是本地IP地址192.168.x.x。NAT路由器至少要有一个全球IP地址(此处为172.38.1.5),才能和互联网相连。
可以看出,在内部主机与外部主机通信时,在NAT路由器上发生了两次地址转换:
NAT地址转换表示例
方向 | 字段 | 旧的IP地址 | 新的IP地址 |
---|---|---|---|
出 | 源IP地址 | 192.168.0.3 | 172.38.1.5 |
入 | 目的IP地址 | 172.38.1.5 | 192.168.0.3 |
“多协议”表示在 MPLS 的上层可以采用多种协议,例如:IP,IPX;可以使用多种数据链路层协议,例如:PPP,以太网,ATM 等。
“标记”是指每个分组被打上一个标记,根据 该标记对分组进行转发。
每个分组携带一个叫做标记 (label) 的小整数。 当分组到达交换机(即标记交换路由器)时, 交换机读取分组的标记, 并用标记值来检索分组转发表。 这样就比查找路由表来转发分组要快得多。
网络层为主机之间提供逻辑通信,主机的身份标志是 IP 地址
运输层为应用进程之间提供端到端的逻辑通信,进程的身份标志是端口
向上面的应用层提供逻辑通信服务。(为应用进程之间提供端到端的逻辑通信)
端口复用(multiplexing)和分用 (demultiplexing)。
复用:各个应用进程可以通过运输层将数据传送到网络IP层
分用:运输层从网络IP层收到应用进程数据后,必须交付给指定的用户进程
向高层用户屏蔽了下面网络核心的细节 (如网络拓扑、所采用的路由选择协议等), 它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
协议端口号 (protocol port number),简称端口 (port),也称为进程标识。
两个计算机中的进程要互相通信,不仅必须知道对方的 IP 地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。
熟知端口,数值一般为 0 ~ 1023。
常用熟知端口号(前6个,除了TFTP)
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | SNMP(trap) | HTTPS |
---|---|---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 | 162 | 443 |
登记端口号,数值为 1024 ~ 49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记, 以防止重复。
指标 | UDP | TCP |
---|---|---|
提供的服务 | 无连接 | 面向连接(逻辑连接) 保证可靠和顺序交付 |
交付 | 尽力而为地交付 | 可靠交付 |
TPDU | UDP报文/用户数据报 | TCP报文段 |
处理上层数据 | 基于报文 | 基于字节流 |
首部、资源开销 | 小 | 大 |
信息交互方式 | 半双工 | 全双工 |
接收到差错的TPDU | 直接丢弃 | |
多播和广播 | 不支持 |
运输协议数据单元 TPDU (Transport Protocol Data Unit):两个对等运输实体在通信时传送的数据单位
UDP 只在 IP 的数据报服务之上增加了很少一点的功能:复用和分用的功能和差错检测的功能
无连接,发送数据之前不需要建立连接。因此减少了开销和发送数据之前的时延。
尽最大努力交付。即不保证可靠交付,因 此主机不需要维持复杂的连接状态表。
面向报文。UDP 对应用层交下来的报文, 既不合并,也不拆分,而是保留这些报文的边界,一次交付一个完整的报文。
应用程序必须选择合适大小的报文。
- 若报文太长,UDP 把它交给 IP 层后,IP 层在传送时可能要进行分片,降低 IP 层的效率。
- 若报文太短,UDP 把它交给 IP 层后,会使 IP 数据报的首部的相对长度太大,也降低 IP 层的效率。
没有拥塞控制。因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。 很适合多媒体通信的要求。
支持一对一、一对多、多对一和多对多的交互通信(半双工)。
首部开销小。只有 8 个字节,比 TCP 的 20 个字节的首部要短。
源端口号在需要对方回信时选用。不需要时可用全0。
目的端口号在终点交付报文时必须使用。
UDP用户数据报的长度,其最小值是8(仅有首部)。
检测UDP用户数据报在传输中是否有错,有错就丢弃。
假定用户数据报的长度是15字节,因此要添加一个全0的字节。
伪首部:仅用于计算检验和。在计算检验和时,临时把“伪首部”和 UDP 用户数 据报连接在一起。
5-49 下面是以十六进制格式存储的一个 UDP 首部:
CB84 000D 001C 001C
试问:
(1) 源端口号是什么?
12×163 +11×162 +8×16+4=52100
(2) 目的端口号是什么?
13
(3) 这个用户数据报的总长度是什么?
16+12=28Byte
(4) 数据长度是多少?
28-8=20Byte
(5)这个分组是从客户到服务器还是从服务器到客户?
客户到服务器,因为目的端口号是熟知端口
(6) 客户进程是什么?
从 RFC 867 可以得知,这个客户进程是 Daytime。当 Daytime 服务器收到客户发送的 UDP 用户数据报后,就把现在的日期和时间以 ASCII 码字符串的形式返回给客户。
面向连接
每一条 TCP 连接只能有两个端点 (endpoint),只能是点对点的(一对一)。
提供可靠交付的服务。
提供全双工通信。
面向字节流。
流(stream) :流入或流出进程的字节序列。
面向字节流:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。TCP 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。 但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
TCP 不关心应用进程一次把多长的报文发送到 TCP 缓存。
TCP 对连续的字节流进行分段,形成 TCP 报文段。
TCP 把连接作为最基本的抽象。每一条 TCP 连接有两个端点。每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。
套接字 (socket) /插口:是TCP 连接的端点。端口号拼接到 (contatenated with) IP 地址即构成了套接字。
套接字 socket = (IP地址 : 端口号)
TCP发送的报文段是交给IP层传送的。但IP层只能提供尽最大努力服务,也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。
每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
停止等待协议可以看作是连续ARQ协议的特殊情况:发送窗口和接收窗口都为1的情况,且只需要1比特给报文段编号即可
使用确认和重传机制,可以在不可靠的传输网络上实现可靠的通信。
A 发送分组 M1,发完就暂停发送,等待 B 的确认 (ACK)。B 收到了 M1 向 A 发送 ACK。A 在收到了对 M1 的确认后,再发送下一个分组 M2。
优点是简单,缺点是信道利用率太低。
U = T D T D + R T T + T A U=\dfrac{T_{D}}{T_{D}+RTT+T_{A}} U=TD+RTT+TATD
T D T_{D} TD :A发送分组所需要的时间, T D = 分组长度 数据率 T_{D}=\dfrac{分组长度}{数据率} TD=数据率分组长度
T A T_{A} TA :B发送确认分组所需要的时间
RTT:往返时间
这两种情况下,B 都不会发送任何确认信息。
解决方法为超时重传
假定在运输层使用停止等待协议。发送方在发送报文段M0后在设定的时间内未收到确认,于是重传M0,但M0又迟迟不能到达接收方。不久,发送方收到了迟到的对M0的确认,于是发送下一个报文段M1,不久就收到了对M1的确认。接着发送方发送新的报文段M0,但这个新的M0在传送过程中丢失了。正巧,一开始就滞留在网络中的M0现在到达接收方。接收方无法分辨M0是旧的。于是收下M0,并发送确认。显然,接收方后来收到的M0是重复的,协议失败了。试画出类似于图5-9所示的双方交换报文段的过程。
自动重传请求 ARQ (Automatic Repeat reQuest):重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。
容易实现,即使确认丢失也不必重传。
在没有收到 B 的确认的情况下,A 可以连续把窗口内的数据都发送出去。
发送窗口里面的序号表示允许发送的序号。
根据接收方 B 给出的窗口值,发送方 A 构造出自己的发送窗口。
假定A收到了B发来的确认报文段,其中(接收)窗口是20字节,而确认号是31(这表明B期望收到的下一个序号是31,而序号30为止的数据已经收到了)。根据这两个数据,A就构造出自己的发送窗口(不能超过接收窗口大小)。
TCP 标准强烈不赞成发送窗口前沿向后收缩。因为很可能发送方在收到这个通知以前已经发送了窗口中的许多数据,现在又要收缩窗口,不让发送这些数据,这样就会产生一些错误。
A发送数据
假定A发送了序号为31~41共11 个字节的数据。
P3-P1=A的发送窗口
P2-P1=已发送但尚未收到确认的字节数
P3-P2=允许发送但当前尚未发送的字节数(又称为可用窗口或有效窗口)
B接收数据并发送确认报文
数据未按序到达
假定B收到了序号为32和33的数据,先存下。这些数据没有按序到达,因为序号为31的数据没有收到(也许丢失了,也许滞留在网络中的某处)。请注意,B只能对按序收到的数据中的最高序号给出确认,因此B发送的确认报文段中的确认号仍然是31(即期望收到的序号),而不能是32或33。
部分已发送数据按序到达
假定B收到了序号为31的数据,并把序号为31~33的数据交付主机,然后B删除这些数据。接着把接收窗口向前移动3个序号(图5-17),同时给A发送确认,其中窗口值仍为20,但确认号是34。这表明B已经收到了到序号 33为止的数据。A收到B的确认后,就可以把发送窗口向前滑动3个序号,但指针P2不动。可以看出,现在A的可用窗口增大了,可发送的序号范围是42~53。
A 的发送窗口内的序号都已用完, 但还没有再收到确认,必须停止发送。
A在经过一段时间后(由超时计时器控制)重传这部分数据,重新设置超时计时器,直到收到B的确认为止。如果A收到确认号落在发送窗口内,那么A就可以使发送窗口继续向前滑动,并发送新的数据。
加权平均往返时间/平滑的(smooth)往返时间 RTTS
第一次测量到 RTT 样本时,RTTS 值就取为所测量到的 RTT 样本值。以后每测量到一个新的 RTT 样本,就按下式重新计算一 次 RTTS:
新的RTTS = (1 − α) × (旧的RTTS ) + α × (新的RTT样本)
0 ≤ α ≤ 1。若 α 很接近于零,表示 RTT 值更新较慢。若选择 α 接近于 1,则表示 RTT 值更新较快。
RFC 2988 推荐的 α 值为 1/8,即 0.125。
RTT 的偏差的加权平均值 RTTD
第一次测量时,RTTD 值取为测量到的 RTT 样本值的一半。在以后的测量中,则使用下式计算加权平均的 RTTD:
新的 RTTD = (1 − β) × (旧的RTTD ) + β × |RTTS − 新的 RTT 样本|
β 是个小于 1 的系数,其推荐值是 1/4,即 0.25
超时重传时间 RTO (Retransmission Time-Out) 应略大于上面得出的加权平均往返时间 RTTS 。
选择确认SACK (Selective ACK) :若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,则可只传送缺少的数据而不重传已经正确到达接收方的数据
要在 TCP 首部的选项中加上“允许 SACK”的选项
由于首部选项的长度最多只有 40 字节,而指明一个边界就要用掉 4 字节,因此在选项中最多只能指明 4 个字节块的边界信息。
4个字节块共有8个边界,因而需要用32个字节来描述。另外还需要两个字节。一个字节用来指明是 SACK选项,另一个字节是指明这个选项要占用多少字节。如果要报告五个字节块的边界信息,那么至少需要42个字节。
流量控制 (flow control) :让发送方的发送速率不要太快,既要让接收方来得及接收,也不 要使网络发生拥塞。
TCP 为每一个连接设有一个持续计时器 (persistence timer) 。只要 TCP 连接的一方收到对方的零窗口通知,就启动该持续计时器。
死锁:A 一直等待收到 B 发送的非零窗口的通知,而 B 也一直等待 A 发送的数据。
只要出现这两种情况之一,接收方就发出确认报文,并向发送方通知当前的窗口大小。
拥塞 (congestion):在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。
∑对资源需求 > 可用资源
上述这些指标的上升都标志着拥塞的增长。
需抑制发送端发送数据的速率
某些拥塞控制算法向发送端发送控制报文,并告诉发送端,网络已出现麻烦,必须放慢发送速率。
流量控制 | 拥塞控制 | |
---|---|---|
问题侧重点 | 端到端 | 全局性 |
作用 | 控制点对点通信量 | 防止过多数据注入网络中 |
问题产生原因 | 发送端发送数据的速率过快, 接收端来不及接收。 |
不明确 |
此处的拥塞控制算法并未考虑流量控制,认为接收方和发送方的缓存是无限大的。
举例:
规则:
当 TCP 连接进行初始化时,拥塞窗口cwnd=1。
图中的窗口单位不使用字节而使用报文段。 慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16。
发送方每收到一个对新报文段的确认 ACK, 就把拥塞窗口值加 1 倍,然后开始下一轮的传输。拥塞窗口 cwnd 随着传输轮次按指数规律增长。
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(图中的点①,此时拥塞窗口 cwnd = 16),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
当拥塞窗口 cwnd > 16 时,进入拥塞避免,拥塞窗口每一轮次只加1。
假设当拥塞窗口 cwnd = 24 时,网络出现了超时(图中的点②),发送方判断为网络拥塞。于是调整门限值 ssthresh = cwnd / 2 = 12,同时设置拥塞窗口 cwnd = 1,进入慢开始阶段。
缺点:
定义
发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传,这样就不会出现因少数几个分组超时,导致发送方误认为出现了网络拥塞。
优点
可以使整个网络的吞吐量提高约 20%。
举例
定义
规则
举例
在图的点④,发送方知道现在只是丢失了个别的报文段。于是不启动慢开始,而是执行快恢复算法。 这时,发送方调整门限值 ssthresh = cwnd / 2 = 8, 同时设置拥塞窗口 cwnd = ssthresh = 8(见图中的点⑤),并开始执行拥塞避免算法。
四个算法统一使用
5-39 TCP 的拥塞窗口 cwnd 大小与传输轮次 n 的关系如表所示:
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
cwnd | 1 | 2 | 4 | 8 | 16 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
n | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
cwnd | 40 | 41 | 42 | 21 | 22 | 23 | 24 | 25 | 26 | 1 | 2 | 4 | 8 |
(1)试画出如教材中图 5-25 所示的拥塞窗口与传输轮次的关系曲线。
(2)指明 TCP 工作在慢开始阶段的时间间隔。
[1, 6] 和 [23, 26]
(3)指明 TCP 工作在拥塞避免阶段的时间间隔。
[6, 16] 和 [17, 22]
(4)在第 16 轮次和第 22 轮次之后发送方是通过收到三个重复的确认还是通过超时检测到丢失了报文段?
在第 16 轮次之后发送方通过收到三个重复的确认,检测到丢失了报文段,因为题目给出,下一个轮次的拥塞窗口减半了。
在第 22 轮次之后发送方通过超时,检测到丢失了报文段,因为题目给出,下一个轮次的拥塞窗口下降到 1了。
(5)在第 1 轮次,第 18 轮次和第 24 轮次发送时,门限 ssthresh 分别被设置为多大?
在第 1 轮次发送时,门限 ssthresh 被设置为 32,因为从第 6 轮次起就进入了拥塞避免状态,拥塞窗口每个轮次加 1。
在第 18 轮次发送时,门限 ssthresh 被设置为发生拥塞时拥塞窗口 42 的一半,即 21。
在第 24 轮次发送时,门限 ssthresh 被设置为发生拥塞时拥塞窗口 26 的一半,即 13。
(6)在第几轮次发送出第 70 个报文段?
第 1 轮次发送报文段 1。(cwnd = 1)
第 2 轮次发送报文段 2, 3。(cwnd = 2)
第 3 轮次发送报文段 4 ~ 7。(cwnd = 4)
第 4 轮次发送报文段 8 ~ 15。(cwnd = 8)
第 5 轮次发送报文段 16 ~ 31。(cwnd = 16)
第 6 轮次发送报文段 32 ~ 63。(cwnd = 32)
第 7 轮次发送报文段 64 ~ 96。(cwnd = 33)
因此第 70 报文段在第 7 轮次发送出。
(7)假定在第 26 轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口 cwnd 和门限 ssthresh 应设置为多大?
检测出了报文段的丢失时拥塞窗口 cwnd 是 8,因此拥塞窗口 cwnd 的数值应当减半,等于 4,而门限 ssthresh 应设置为检测出报文段丢失时的拥塞窗口 8 的一半,即 4。
接收方窗口rwnd/通知窗口(advertised window)
拥塞窗口cwnd
发送窗口的上限值 = Min [rwnd, cwnd]
rwnd 和 cwnd 中数值较小的一个,控制了发送方发送数据的速率。
各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。固定首部的数值为5。
占 6 位,保留为今后使用,但目前应置为 0。
当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。
接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
当 RST = 1 时,表明 TCP 连接中出现 严重差错(如由于主机崩溃或其他原因),必须释放连接,然 后再重新建立运输连接。
同步 SYN = 1 表示这是一个连接请求或连接接受报文。
用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
占 2 字节,用来让对方设置发送窗口的大小依据,单位为字节。
占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字 节的伪首部。
占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
主动队列管理 AQM (Active Queue Management)。
主动:不要等到路由器的队列长度已经达到最大值时才不得不丢弃后面到达的分组。这样就太被动了。应当在队列长度达到某个值得警惕的数值时 (即当网络拥塞有了某些拥塞征兆时),就主动丢弃到达的分组。
随机早期检测 RED (Random Early Detection)
TCP 建立连接的过程叫做握手。 握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手(三次握手)。
TCP 释放连接的过程叫做挥手。 握手需要在客户和服务器之间交换四个 TCP 报文段。称之为四报文挥手(四次挥手)。数据传输结束后,通信的双方都可释放连接。
假设现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。
A 把连接释放报文段首部的 FIN = 1,其序号 seq = u,等待 B 的确认。①
B 发出确认,确认号 ack = u + 1, 而这个报文段自己的序号 seq = v。TCP 服务器进程通知高层应用进程。②
至此,从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭(half-close)状态。
B 若发送数据,A 仍要接收。
若 B 已经没有要向 A 发送的数据, 其应用进程就通知 TCP 释放连接。在确认报文段中FIN = 1,ACK = 1,序号 seq = w ,确认号 ack = u + 1。③
A 收到连接释放报文段后,必须发出确认。在确认报文段中 ACK = 1,确认号 ack = w + 1, 序号 seq = u + 1。④
TCP 连接必须经过时间等待计时器(TIME-WAIT timer)设置的时间 2MSL 后才真正释放掉。
时间MSL叫做最长报文段寿命(Maximum Segment Lifetime)
保证A发送的最后一个ACK报文段能够到达 B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN + ACK报文段的确认。B会超时重传这个FIN +ACK报文段,而A就能在2MSL时间内收到这个重传的FIN + ACK报文段。接着A重传一次确认,重新启动2MSL计时器。最后,A 和B都正常进入到CLOSED 状态。
如果A在TIME-WAIT 状态不等待一段时间,而是在发送完ACK报文段后立即释放连接,那么就无法收到B重传的FIN + ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常步骤进入CLOSED状态。
防止上一节提到的“已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK 报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
可以更清晰地看出TCP 连接各种状态之间的关系。
方框
TCP 可能具有的状态
方框中的大写英文字符串
TCP 标准所使用的 TCP 连接状态名
状态之间的箭头
含义
可能发生的状态变迁
分类
粗实线箭头
表示对客户进程的正常变迁。
粗虚线箭头
表示对服务器进程的正常变迁。
细线箭头
表示异常变迁。
5-41 用 TCP 传送 512 字节的数据。设窗口为 100 字节,而 TCP 报文段每次也是传送 100 字节的数据。再设发送端和接收端的起始序号分别选为 100 和 200,试画出类似于教材中图 5-28 的工作示意图。从连接建立阶段到连接释放都要画上。
要传送的 512 B 的数据必须划分为 6 个报文段传送,前 5 个报文段各 100 B,最后一个报文段传送 12 B。下图是双方交互的示意图。下面进行简单的解释。
【----- 进行三报文握手 -----】
报文段 #1:A 发起主动打开,发送 SYN 报文段,除以 SYN-SENT 状态,并选择初始序号 seq = 100。B 处于 LISTEN 状态。
报文段 #2:B 确认 A 的 SYN 报文段,因此 ack = 101(是 A 的初始序号加 1)。B选择初始序号 seq = 200。B 进入到 SYN-RCVD 状态。
报文段 #3:A 发送 ACk 报文段来确认报文段 #2,ack = 201(是 B 的初始序号加 1)。A 没有在这个报文段中放入数据。因为 SYN 报文段 #1 消耗了一个序号,因此报文段 #3 的序号是 seq = 101。这样,A 和 B 都进入了 ESTABLISHED 状态。
【----- 三报文握手完成 -----】
【----- 开始数据传送 -----】
报文段 #4:A 发送 100 字节的数据。报文段 #3 是确认报文段,没有数据发送,报文段 #3 并不消耗序号,因此报文段 #4 的序号仍然是 seq = 101。A 在发送数据的同时,还确认 B 的报文段 #2,因此 ack = 201。
报文段 #5:B 确认 A 的报文段 #4。由于收到了从序号 101 到 200 共 100 字节的数据,因此在报文段 #5 中,ack = 201(所期望收到的下一个数据字节的序号)。B 发送的 SYN 报文段 #2 消耗了一个序号,因此报文段 #5 的序号是 seq = 201,比报文段 #2 的序号多了一个序号。在这个报文段中,B 给出了接收窗口 rwnd = 100。
从报文段 #6 到报文段 # 13 都不需要更多的解释。到此为止,A 已经发送了 500 字节 的数据。
报文段 #14:A 发送最后 12 字节的数据,报文段 #14 的序号是 seq = 601。
报文段 #15:B 发送对报文段 #14 的确认。B 收到从序号 601 到 602 共 12 字节的数据。因此,报文段 #15 的确认号是 ack = 613(所期望收到的下一个数据字节的序号)。
从报文段 #5 一直到 报文段 #15,B 一共发送了 6 个确认,都不消耗序号,因此 B 发送的确认报文段 #15 的序号仍然和报文段 #5 的序号一样,即 seq = 201。
【-----数据传送完毕-----】
【-----进行四报文挥手------】
报文段 #16:A 发送 FIN 报文段。前面所发送的数据报文段 #14 已经用掉了序号 601 到 612,因此报文段 #16 序号是 seq = 613。A 进入 FIN-WAIT-1 状态。报文段 #16 的确认号 ack = 202。
报文段 #17:B发送确认报文段,确认号为 614,进入 CLOSE-WAIT 状态。由于确认报文段不消耗序号,因此报文段 #17 的序号仍然和报文段 #15 的一样,即 seq = 201
报文段 #18:B 没有数据要发送,就发送 FIN 报文段 #18,其序号仍然是 seq = 201。这个 FIN 报文会消耗一个报文。
报文段 #19:A 发送最后的确认报文段。报文段 #16 的序号是 613,已经消耗掉了。因此,现在的序号是 seq = 614。但这个确认报文段并不消耗序号。
【-----四报文挥手结束-----】
精确定义应用进程之间的通信规则,即应用层协议(application layer protocol)
域名系统 DNS (Domain Name System)用于实现域名到IP地址的解析。
任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。
域名采用了层次树状结构的命名方法。
域名的结构由标号序列组成,各标号之间用点隔开:
… . 三级域名 . 二级域名 . 顶级域名
各标号分别代表不同级别的域名。
如 .cn 表示中国, .us 表示美国, .uk 表示英国,等等。
如 .com(公司和企业) .net (网络服务机构 .org (非赢利性组织) .edu (美国专用的教育机构) .gov (美国专用的政府部门) .mil (美国专用的军事部门) .int (国际组织)
这种顶级域名只有一个,即 arpa,用于反向域名解析,因此又称为反向域名。
一个域名服务器所负责管辖的(或有权限的)范围
假定abc公司有下属部门x和y,部门x下面又分三个分部门u,v和 w,而 y下面还有其下属部门t。
图(a)表示 abc公司只设一个区abc.com。这时,区 abc.com和域 abc.com指的是同一件事。
图(b)表示 abc公司划分了两个区(大的公司可能要划分多个区):abc.com和 y.abc.com。这两个区都隶属于域abc.com,都各设置了相应的权限域名服务器。不难看出,区是“域”的子集。
以上图(b)中公司abc划分的两个区为例,给出了DNS域名服务器树状结构图。
这种 DNS域名服务器树状结构图可以更准确地反映出 DNS的分布式结构。
图中的每一个域名服务器都能够进行部分域名到P地址的解析。
当某个 DNS服务器不能进行域名到IP地址的转换时,它就设法找互联网上别的域名服务器进行解析。
顶级域名服务器(即 TLD 服务器)负责管理在该顶级域名服务器注册的所有二级域名。
当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找 的域名服务器的 IP 地址)。
负责一个区的域名服务器
当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户, 下一步应当找哪一个权限域名服务器。
每一个互联网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器。
当一个主机发出 DNS 查询请求时,这个查询请求报文首先发送给本地域名服务器
如果主机所询问的本地域名服务器不知道被查询域名 的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。
当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询
文件传送协议 FTP (File Transfer Protocol) 是互联网上使用得最广泛的文件传送协议。
TFTP (Trivial File Transfer Protocol) 是一个很小且易于实现的文件传送协议。服务器端熟知端口号69。
TFTP 的工作很像停止等待协议
远程终端协议/终端仿真协议 TELNET 是一个简单的远程终端协议,也是互联网的正式标准。
用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一个主机上(使用主机名或 IP 地址)。
TELNET 能将用户的击键传到远地主机,同时也能将远地主机的输出通过 TCP 连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。
因此TELNET又称为终端仿真协议。
适应计算机和操作系统的差异
万维网 WWW (World Wide Web) 简称web,是一个大规模的、联机式的信息储藏所。是分布式超媒体 (hypermedia) 系统,它是超文本 (hypertext) 系统的扩充。
万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。提供分布式服务。
统一资源定位符 URL (Uniform Resource Locator) :标志万维网上的各种文档,使每一个文档在整个互联网的范围内具有唯一的标识符 URL。
由以冒号隔开的两大部分组成,并且在 URL 中的字符对大写或小写没有要求。
<协议>://<主机>:<端口>/<路径>
<协议>:指出使用什么协议来获取该万维网文档。现在最常用的协议就是http(超文本传送协议HTTP),其次是 ftp(文件传送协议FTP)。
“/”:规定的格式。
<主机>:指出这个万维网文档是在哪一台主机上。这里的<主机>就是指该主机在互联网上的域名。
<端口>和<路径>:有时可省略。
超文本传送协议 HTTP (HyperText Transfer Protocol):在万维网客户程序与万维网服务器程序之间进行请求和响应的交互所使用的协议。它使用 TCP 连接进行可靠的传送。从层次的角度看,HTTP 是面向事务的 (transaction-oriented) 应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、 图像等各种多媒体文件)的重要基础。
用于区分是请求报文还是响应报文。
在请求报文中的开始行叫做请求行(Request-Line);
在响应报文中的开始行叫做状态行(Status-Line)。
在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。
用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。
定义
对所请求的对象进行的操作,决定请求报文的类型
类型
方法(操作) | 意义 |
---|---|
OPTION | 请求一些选项的信息 |
GET | 请求读取由URL所标志的信息 |
HEAD | 请求读取由URL所标志的信息的首部 |
POST | 给服务器添加信息(例如,注释) |
PUT | 在指明的URL下存储一个文档 |
DELETE | 删除指明的URL所标志的资源 |
TRACE | 用来进行环回测试的请求报文 |
CONNECT | 用于代理服务器 |
所请求的资源的 URL
HTTP 的版本。
GET /dir/index.htm HTTP/1.1 {请求行使用了相对URL}
Host : www.xyz.edu.cn {此行是首部行的开始。这行给出主机的域名}
connection: close {告诉服务器发送完请求的文档后就可释放连接}
User-Agent: Mozilla/5.0 {表明用户代理是使用火狐浏览器Firefox}
Accept-Language: cn {表示用户希望优先得到中文版本的文档}
{请求报文的最后还有一个空行}
状态码(Status-Code)都是三位数字的,分为5大类。这5大类的状态码都是以不同的数字开头的。
状态码 | 含义 | 举例 |
---|---|---|
1xx | 通知信息 | 请求收到了或正在进行处理 |
2xx | 成功 | 接受或知道了 |
3xx | 重定向 | 要完成请求还必须采取进一步的行动 |
4xx | 客户的差错 | 请求中有错误的语法或不能完成 |
5xx | 服务器的差错 | 服务器失效无法完成请求 |
解释状态码的简单短语
HTTP/1.1 301 Moved Permanently {永久性地转移了}
Location: http://www.xyz.edu/ee/index.html {新的URL}
{响应报文的最后还有一个空行}
超文本标记语言 HTML (HyperText Markup Language) :使万维网页面的设计者可以很方便地用一个超链从本页面的某处链接到互联网上的任何一个万维网页面,并且能够在自己的计算机屏幕上将这些页面显示出来。
为了在万维网上方便地查找信息,用户可使用各种的搜索工具(即搜索引擎)。
电子邮件(e-mail)是互联网上使用最多的和最受用户欢迎的一种应用。电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱(mail box)中,收件人可在自己方便时上网到自己使用的邮件服务器进行读取。这相当于互联网为用户设立了存放邮件的信箱,因此 e-mail 有时也称为“电子信箱”。
发件人调用 PC 中的用户代理撰写和编辑要发送的邮件。
发件人的用户代理把邮件用 SMTP 协议发给发送方邮件服务器。
SMTP 服务器把邮件临时存放在邮件缓存队列中,等待发送。
发送方邮件服务器的 SMTP 客户与接收方邮件服务器的 SMTP 服务器建立 TCP 连接,然后就把邮件缓存队列中的邮件依次发送出去。
运行在接收方邮件服务器中的SMTP服务器进程收到邮件后,把邮件放入收件人的用户邮箱中,等待收件人进行读取。
收件人在打算收信时,就运行 PC 机中的用户代理,使用 POP3(或 IMAP)协议读取发送给自己的邮件。
POP3 服务器和 POP3 客户之间的通信是由 POP3 客户发起的。
用户代理UA (User Agent)/电子邮件客户端软件:用户与电子邮件系统的接口,在大多数情况下它就是运行在用户电脑中的一个程序。用户代理向用户提供一个很友好的接口(目前主要是窗口界面)来发送和接收邮件。
撰写、显示、处理和通信
发送和接收邮件,同时还要向发信人报告邮件传送的情况(已交付、被拒绝、丢失等)。
邮件服务器按照客户−服务器方式工作。邮件服务器需要使用发送和读取两个不同的协议。
SMTP(Simple Mail Transfer Protocol) :规定了在两个相互通信的SMTP进程之间应如何交换信息。由于SMTP使用客户服务器方式,因此负责发送邮件的 SMTP进程就是 SMTP客户,而负责接收邮件的SMTP进程就是SMTP服务器。服务器端熟知端口号25。
邮局协议 POP 是一个非常简单、但功能有限的邮件读取协议,现在使用的是它的第三个版本 POP3。服务器端熟知端口号110。
POP 也使用客户–服务器的工作方式。在接收邮件的用户 PC 机中必须运行 POP 客户程序,而在用户所连接的 ISP 的邮件服务器中 则运行 POP 服务器程序。
目前较新版本为IMAP4。服务器端熟知端口号143。
SMTP只能传送可打印的7位ASCII 码邮件
互联网邮件扩充MIME (Multipurpose Internet Mail Extensions)在其邮件首部中说明了邮件的数据类型(如文本、声音、图像、视像等)。在 MIME邮件中可同时传送多种类型的数据。这在多媒体通信的环境下是非常有用的。
动态主机配置协议 DHCP (Dynamic Host Configuration Protocol) 提供了即插即用连网 (plug-and-play networking) 的机制。这种机制允许一台计算机加入新的网络和获取 IP 地址而不用手工参与。
网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、 配置、分析、评价和控制,这样就能以合理的价格满足网络的一些需求,如实时运行性能, 服务质量等。网络管理常简称为网管。
管理者 (manager)/管理器
网络管理员 (administrator) 指的是人。
大型网络往往实行多级管理,因而有多个管理者,而一个管理者一般只管理本地网络的设备。
被管设备/网络元素/网元
网络的每一个被管设备中可能有多个被管对象 (Managed Object)
在被管设备中也会有一些不能被管的对象。
代理 (agent)
在每一个被管设备中都要运行一个程序以便和管理站中的管理程序进行通信。这些运行着的程序叫做网络管理代理程序,或简称为代理。
代理程序在管理程序的命令和控制下在被管设备上采取本地的行动。
网络管理协议,简称为网管协议。
是管理程序和代理程序之间进行通信的规则。
网络管理员利用网管协议通过管理站对网络中的被管设备进行管理。
SNMP中的管理程序和代理程序按客户服务器方式工作。管理程序运行SNMP客户程序,而代理程序运行SNMP服务器程序。
管理程序运行 SNMP 客户程序,向某个代理程序发出请求(或命令),代理程序运行 SNMP 服务器程序,返回响应(或执行某个动作)。
简单网络管理协议SNMP(Simple Network Management Protocol)定义了管理站和代理之间所交换的分组格式。所交换的分组包含各代理中的对象(变量)名及其状态(值)。SNMP 负责读取和改变这些数值。
管理信息库 MIB (Management Information Base):被管对象必须维持的可供管理程序读写的若干控制和状态信息。
MIB在被管理的实体中创建了命名对象,并规定了其类型。管理程序使用 MIB 中这些信息的值对网络进行管理(如读取或重新设置这些值)。
有一些特定的应用需要互联网的支持进行通信,但这些应用又不能直接使用已经标准化的互联网应用协议,那么我们应当做哪些工作?
大多数操作系统使用系统调用 (system call) 的机制在应用程序和操作系统之间传递控制权。
对程序员来说,每一个系统调用和一般程序设计中的函数调用非常相似,只是系统调用是将控制权传递给了操作系统。
系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口。
下面以使用TCP的服务为例介绍几种常用的系统调用
创建套接字,此时它的端口号和 IP 地址都是空的
调用 bind(绑定)把本地地址绑定到套接字:把熟知端口号和本地 IP 地址填写到已创建的套接字中。
调用 listen(收听):把套接字设置为被动方式,以便随时接受客户的服务请求。
UDP 服务器由于只提供无连接服务,不使用 listen 系统调用。
调用 accept(接受):把远地客户进程发来的连接请求提取出来。
系统调用 accept 的一个变量就是要指明从哪一个套接字发起的连接。
一旦客户或服务器结束使用套接字,就把套接字撤消。这时就调用 close 释放连接和撤销套接字。
应用编程接口API (Application Programming Interface):是应用进程的控制权和操作系统的控制权进行转换的一个接口。
由于应用程序在使用系统调用之前要编写一些程序,特别是需要设置系统调用中的许多参数,因此系统调用接口又称为API。
API 从程序设计的角度定义了许多标准的系统调用函数。应用进程只要使用标准的系统调用函数就可得到操作系统的服务。
微软公司在其操作系统中采用了套接字接口 API,称之为 Windows Socket。
AT&T 为其 UNIX 系统 V 定义了一种 API,简 写为 TLI (Transport Layer Interface)。
在讨论网络编程时常常把套接字作为应用进程和运输层协议之间的接口。图中假定了运输层使用TCP协议(若使用UDP协议,情况也是类似的,只是UDP是无连接的。通信的两端仍然可用两个套接字来标志)。现在套接字已成为计算机操作系统内核的一部分。
在 P2P 工作方式下,所有的音频/视频文件都是在普通的互联网用户之间传输。相当于有很多分散在各地的媒体服务器向其他用户提供所要下载的音频/视频文件。