Transcript PPT

计算机网络基础 Ⅲ
Week 04
目录
1 运输层协议概述
1.1 进程之间的通信
1.2 运输层的两个主要协议
1.3 运输层的端口
2 用户数据报协议UDP
2.1 UDP 概述
2.2 UDP 的首部格式
目录
3 传输控制协议TCP 概述
3.1 TCP 最主要的特点
3.2 TCP 的连接
4 可靠传输的工作原理
4.1 停止等待协议
4.2 连续ARQ 协议
5 TCP 报文段的首部格式
目录
6 TCP 可靠传输的实现
6.1 以字节为单位的滑动窗口
6.2 超时重传时间的选择
7 TCP的流量控制
7.1 利用滑动窗口实现流量控制
7.2 必须考虑传输效率
目录
8 TCP 的拥塞控制
8.1 拥塞控制的一般原理
8.2 几种拥塞控制方法
9 TCP 的运输连接管理
9.1 TCP 的连接建立
9.2 TCP 的连接释放
进程之间的通信
• 从通信和信息处理的角度看,运输层向它上面的应用层
提供通信服务,它属于面向通信部分的最高层,同时也
是用户功能中的最低层。
• 当网络的边缘部分中的两个主机使用网络的核心部分的
功能进行端到端的通信时,只有位于网络边缘部分的主
机的协议栈才有运输层,而网络核心部分中的路由器在
转发分组时都只用到下三层的功能。
进程之间的通信
运输层为相互通信的应用进程提供了逻辑通信
应用进程之间的通信
• 两个主机进行通信实际上就是两个主机中的应用进程互
相通信。
• 应用进程之间的通信又称为端到端的通信。
• 运输层的一个很重要的功能就是复用和分用。
• 应用层不同进程的报文通过不同的端口向下交到运输层,
再往下就共用网络层提供的服务。
• “运输层提供应用进程间的逻辑通信”。“逻辑通信”的意
思是:运输层之间的通信好像是沿水平方向传送数据。
但事实上这两个运输层之间并没有一条水平方向的物理
连接。
运输层协议和网络层协议的主要区别
运输层的主要功能
• 运输层为应用进程之间提供端到端的逻辑通信(但网络
层是为主机之间提供逻辑通信)。
• 运输层还要对收到的报文进行差错检测。
• 运输层需要有两种不同的运输协议,即面向连接的TCP
和无连接的UDP。
两种不同的运输协议
• 运输层向高层用户屏蔽了下面网络核心的细节(如网络
拓扑、所采用的路由选择协议等),它使应用进程看见
的就是好像在两个运输层实体之间有一条端到端的逻辑
通信信道。
• 当运输层采用面向连接的TCP 协议时,尽管下面的网络
是不可靠的(只提供尽最大努力服务),但这种逻辑通
信信道就相当于一条全双工的可靠信道。
• 当运输层采用无连接的UDP协议时,这种逻辑通信信道
是一条不可靠信道。
运输层的两个主要协议
TCP/IP 的运输层有两个不同的协议:
(1) 用户数据报协议UDP
(User Datagram Protocol)
(2) 传输控制协议TCP
(Transmission Control Protocol)
TCP 与UDP
• 两个对等运输实体在通信时传送的数据单位叫作运输协
议数据单元TPDU (Transport Protocol Data Unit)。
• TCP 传送的数据单位协议是TCP 报文段(segment)
• UDP 传送的数据单位协议是UDP 报文或用户数据报。
TCP/IP 体系中的运输层协议
TCP 与UDP
• UDP在传送数据之前不需要先建立连接。对方的运输层
在收到UDP报文后,不需要给出任何确认。虽然UDP不
提供可靠交付,但在某些情况下UDP是一种最有效的工
作方式。
• TCP则提供面向连接的服务。TCP不提供广播或多播服务。
由于TCP要提供可靠的、面向连接的运输服务,因此不
可避免地增加了许多的开销。这不仅使协议数据单元的
首部增大很多,还要占用许多的处理机资源。
还要强调两点
• 运输层的UDP用户数据报与网际层的IP数据报有很大区
别。IP数据报要经过互连网中许多路由器的存储转发,
但UDP用户数据报是在运输层的端到端抽象的逻辑信道
中传送的。
• TCP报文段是在运输层抽象的端到端逻辑信道中传送,
这种信道是可靠的全双工信道。但这样的信道却不知道
究竟经过了哪些路由器,而这些路由器也根本不知道上
面的运输层是否建立了TCP连接。
运输层的端口
• 运行在计算机中的进程是用进程标识符来标志的。
• 运行在应用层的各种应用进程却不应当让计算机操作系
统指派它的进程标识符。这是因为在因特网上使用的计
算机的操作系统种类很多,而不同的操作系统又使用不
同格式的进程标识符。
• 为了使运行不同操作系统的计算机的应用进程能够互相
通信,就必须用统一的方法对TCP/IP 体系的应用进程进
行标志。
需要解决的问题
• 由于进程的创建和撤销都是动态的,发送方几乎无法识
别其他机器上的进程。
• 有时我们会改换接收报文的进程,但并不需要通知所有
发送方。
• 我们往往需要利用目的主机提供的功能来识别终点,而
不需要知道实现这个功能的进程。
端口号(protocol port number)
• 解决这个问题的方法就是在运输层使用协议端口号
(protocol port number),或通常简称为端口(port)。
• 虽然通信的终点是应用进程,但我们可以把端口想象是
通信的终点,因为我们只要把要传送的报文交到目的主
机的某一个合适的目的端口,剩下的工作(即最后交付
目的进程)就由TCP 来完成。
软件端口与硬件端口
• 在协议栈层间的抽象的协议端口是软件端口。
• 路由器或交换机上的端口是硬件端口。
• 硬件端口是不同硬件设备进行交互的接口,而软件端口
是应用层的各种协议进程与运输实体进行层间交互的一
种地址。
TCP 的端口
• 端口用一个16位端口号进行标志。
• 端口号只具有本地意义,即端口号只是为了标志本计算
机应用层中的各进程。在因特网中不同计算机的相同端
口号是没有联系的。
三类端口
• 熟知端口:数值一般为0~1023。
• 登记端口号:数值为1024~49151,为没有熟知端口号的
应用程序使用的。使用这个范围的端口号必须在”互联网
编号分配机构”IANA (Internet Assigned Numbers Authority)
登记,以防止重复。
• 客户端口号或短暂端口号:数值为49152~65535,留给
客户进程选择暂时使用。当服务器进程收到客户进程的
报文时就知道了客户进程所使用的动态端口号。通信结
束后,这个端口号可供其他客户进程以后使用。
常见端口号
TCP 21端口:FTP 文件传输服务
TCP 23端口:TELNET 终端仿真服务
TCP 25端口:SMTP 简单邮件传输服务
UDP 53端口:DNS 域名解析服务
TCP 80端口:HTTP 超文本传输服务
TCP 110端口:POP3 “邮局协议版本3”使用的端口
TCP 443端口:HTTPS 加密的超文本传输服务
TCP 1521端口:Oracle数据库服务
TCP 1863端口:MSN Messenger的文件传输功能所使用的端口
TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口
TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口
UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口
TCP 5000端口:MS SQL Server使用的端口
UDP 8000端口:腾讯QQ
用户数据报协议UDP
• UDP只在IP的数据报服务之上增加了很少一点的功能,
即端口的功能和差错检测的功能。
• 虽然UDP用户数据报只能提供不可靠的交付,但UDP在
某些方面有其特殊的优点。
UDP 的主要特点
• UDP 是无连接的,即发送数据之前不需要建立连接。
• UDP 使用尽最大努力交付,即不保证可靠交付,同时也
不使用拥塞控制。
• UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体
通信的要求。
• UDP 支持一对一、一对多、多对一和多对多的交互通信。
• UDP 的首部(不包括伪首部)开销小,只有8 个字节。
面向报文的UDP
发送方UDP 对应用程序交下来的报文,在添加首部后就向
下交付IP 层。UDP 对应用层交下来的报文,既不合并,也
不拆分,而是保留这些报文的边界。
应用层交给UDP 多长的报文,UDP 就照样发送,即一次发
送一个报文。
接收方UDP 对IP 层交上来的UDP 用户数据报,在去除首部
后就原封不动地交付上层的应用进程,一次交付一个完整
的报文。
应用程序必须选择合适大小的报文。
面向报文的UDP
UDP的首部格式
UDP的首部格式
用户数据报用户数据报UDP 有两个字段:数据字段和首部
字段。首部字段有8 个字节,由4 个字段组成,每个字段都
是两个字节。
UDP的首部格式
在计算检验和时,临时把“伪首部”和UDP 用户数据报连接
在一起。伪首部仅仅是为了计算检验和。
传输控制协议TCP
•
•
•
•
•
•
TCP 是面向连接的运输层协议。
每一条TCP 连接只能有两个端点(endpoint)
每一条TCP 连接只能是点对点的(一对一)。
TCP 提供可靠交付的服务。
TCP 提供全双工通信。
面向字节流。
理解TCP
• 所谓面向连接的,是指在彼此通信前要先建立连接。同
时这种点对点的连接表明了TCP不支持多播和广播。
• 所谓可靠的,是指TCP有一堆保证数据传输准确的机制。
• 所谓字节流,是指TCP接收端并不知道发送端每次向该
连接写入了多少数据,只关心通过限制能从连接中最大
字节数。
TCP面向流的概念
应当注意
• TCP 连接是一条虚连接而不是一条真正的物理连接。
• TCP 对应用进程一次把多长的报文发送到TCP 的缓存中
是不关心的。
• TCP 根据对方给出的窗口值和当前网络拥塞的程度来决
定一个报文段应包含多少个字节(UDP 发送的报文长度
是应用进程给出的)。
• TCP 可把太长的数据块划分短一些再传送。TCP 也可等
待积累有足够多的字节后再构成报文段发送出去。
TCP 的连接
• TCP 把连接作为最基本的抽象。
• 每一条TCP 连接有两个端点。
• TCP 连接的端点不是主机,不是主机的IP 地址,不是应
用进程,也不是运输层的协议端口。TCP 连接的端点叫
做套接字(socket)或插口。
• 端口号拼接到(contatenated with) IP 地址即构成了套接字。
套接字(socket)
每一条TCP 连接唯一地被通信两端的两
个端点(即两个套接字)所确定。即:
可靠传输的工作原理
停止等待协议
请注意
• 在发送完一个分组后,必须暂时保留已发送的分组的副
本。
• 分组和确认分组都必须进行编号。
• 超时计时器的重传时间应当比数据在分组传输的平均往
返时间更长一些。
确认丢失和确认迟到
可靠通信的实现
• 使用上述的确认和重传机制,我们就可以在不可靠的传
输网络上实现可靠的通信。
• 这种可靠传输协议常称为自动重传请求ARQ (Automatic
Repeat reQuest)。
• ARQ 表明重传的请求是自动进行的。接收方不需要请求
发送方重传某个出错的分组。
TCP 报文段的首部格式
字段说明
• 16位源端口号:指建立连接(或发送数据)的端口号
• 16位目的端口号:指连接另一端(或接受数据)的端口
号
• 32位序号:发送的字节序号,如果是新建立的连接,则
第一个包的seq为0,否则为上一个数据包的确认序号。
同一个包中的序号和确认序号是不同的。
• 32位确认序号:等于接收到数据包的序号seq+数据包的
长度len。同时告诉对端,下一个数据包的开头字节序号。
• 4位首部长度:tcp包首部的长度。
字段说明
• URG:紧急指针有效。它使一端可以告诉另一端有些具
有某种方式的“紧急数据”已经放置在普通的数据流中。
• ACK:确认序号有效
• PSH:接收方应尽快将这个报文段交给应用层。发送方
使用PUSH标志通知接收方将所收到的数据全部提交给接
收进程。这里的数据包括与PUSH一起传送的数据以及接
收方TCP已经为接收进程收到的其他数据(还在TCP的缓
冲区中)。
• RST:重置连接
字段说明
SYN:同步信号,用于发起一个连接
FIN:发端完成发送任务,关闭连接
16位窗口大小:TCP的流量控制由连接的每一端通过声明的
窗口大小来提供。窗口大小为字节数,起始于确认序号字
段指明的值,这个值是接收端正期望接收的字节。窗口大
小是一个16 bit字段,因而窗口大小最大为65535字节。
16位校验和:检验和覆盖了整个的TCP报文段:TCP首部和
TCP数据。
16位紧急指针:只有当URG标志置1时紧急指针才有效。紧
急指针是一个正的偏移量,和序号字段中的值相加表示紧
急数据最后一个字节的序号。TCP的紧急方式是发送端向另
一端发送紧急数据的一种方式。
字段说明
选项:部分可选配置,主要有以下几种:
每个选项的开始是1字节kind字段,说明选项的类型。kind字段
为0和1的选项仅占1个字节。其他的选项在kind字节后还有len
字节。它说明的长度是指总长度,包括kind字节和len字节。
TCP可靠性传输
为方便描述可靠传输原理,假定数据传输只在一个方向上
进行,即A发
TCP的滑动窗口是以字节为单位的。为了便于说明,字节编
号取得很小。先假定A收到B发来的确认报文字段,其中窗
口是20字节,而确认号是31字节。(表明B期望接收到的下
一个序号是31,序号30之前的数据已经收到了)。如图所
示。送数据,B给出确认
TCP可靠性传输
发送窗口表示:在没有收到B的确认的情况下,可以连续把
窗口内的数据发送出去。凡是已经发送过的数据,在未收
到确认之前都必须暂时保留,以便超时重传使用。
发送窗口有如下特点:
1)发送窗口里面的序号表示允许发送的序号(如
31~50)
2)发送窗口的位置由窗口的前沿和后沿的位置共同
确定。发送窗口的后沿可能不动(没有收到确认),或者
前移(收到新的确认)。发送窗口的前沿通常是不断的向
前移动,但也可能不动。
TCP可靠性传输
现在假定A发送了序号为31-41的数据,如上图所示,图中可以
看出要描述一个发送窗口的状态需要三个指针P1, P2, P3。
小于P1的是已发送并收到确认的部分,大于P3的是不允许发
送部分。
P3-P1 = A的发送窗口(又称为通知窗口)
P2-P1 = 已发送但尚未收到确认的字节数
P3-P2 = 允许发送但尚未收到的字节数(又称为可用窗口或有
效窗口)
TCP可靠性传输
B的接收窗口大小为20。在接收窗口外面,到30号为止
的数据均发送过确认并交付主机使用,因此B不再保留(之
前的数据)。
如图所示,B收到了32和33的数据。这些数据没有按序到达,
因为序号为31的数据没有收到。由于B只能对按序到达的数
据中的最高序号给出确认,因此B的发送的确认号仍然是31,
而不能是32或33。
TCP可靠性传输
现在假定B收到序号为33的数据并把序号为31-33的数据交付给主机,然后B删
除这些数据。接着把接收窗口向前移动3个序号,同时给A发出确认。其窗口值
仍未20,但确认号34,表明B已经接收到序号33为止的数据。而B收到的37 38 40
的数据没有按序到达,先暂存在接收窗口中。
如果按照以上的方式进行发送数据。当发送窗口已满,可用窗口减小到0,
因此发送停止。如果发送窗口内所有数据都正确到达B,而发出的确认由于网络
问题没 有到达A,为保证传输,此时A只能认为B还没有收到这部分数据。于是
A经过一段时间过(由超时计时器控制)重传这部分数据,直到收到B的确认
为止。
利用滑动窗口实现流量控制
• 如果发送方把数据发送得过快,接收方可能会来不及接
收,这就会造成数据的丢失。所谓流量控制就是让发送
方的发送速率不要太快,要让接收方来得及接收。
• 利用滑动窗口机制可以很方便地在TCP连接上实现对发
送方的流量控制。
必须考虑传输速率
可以用不同的机制来控制TCP报文段的发送时机。如:
• TCP维持一个变量,它等于最大报文段长度MSS。只要缓
存中存放的数据达到MSS字节时,就组装成一个TCP报文
段发送出去。
• 由发送方的应用进程指明要求发送报文段,即TCP支持
的推送( push )操作。
• 发送方的一个计时器期限到了,这时就把已有的缓存数
据装入报文段(但长度不能超过MSS)发送出去。
拥塞控制
• 拥塞:即对资源的需求超过了可用的资源。若网络中许
多资源同时供应不足,网络的性能就要明显变坏,整个
网络的吞吐量随之负荷的增大而下降。
• 拥塞控制:防止过多的数据注入到网络中,这样可以使
网络中的路由器或链路不致过载。拥塞控制所要做的都
有一个前提:网络能够承受现有的网络负荷。拥塞控制
是一个全局性的过程,涉及到所有的主机、路由器,以
及与降低网络传输性能有关的所有因素。
• 流量控制:指点对点通信量的控制,是端到端正的问题。
流量控制所要做的就是抑制发送端发送数据的速率,以
便使接收端来得及接收。
拥塞控制代价
• 需要获得网络内部流量分布的信息。
• 在实施拥塞控制之前,还需要在结点之间交换信息和各
种命令,以便选择控制的策略和实施控制。这样就产生
了额外的开销。
• 拥塞控制还需要将一些资源分配给各个用户单独使用,
使得网络资源不能更好地实现共享。
几种拥塞控制方法
慢开始和拥塞避免:
• 发送方维持一个拥塞窗口 cwnd ( congestion window )的
状态变量。拥塞窗口的大小取决于网络的拥塞程度,并
且动态地在变化。发送方让自己的发送窗口等于拥塞。
• 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,
拥塞窗口就再增大一些,以便把更多的分组发送出去。
但只要网络出现拥塞,拥塞窗口就减小一些,以减少注
入到网络中的分组数。
慢开始算法
慢开始算法:当主机开始发送数据时,如果立即所大量数
据字节注入到网络,那么就有可能引起网络拥塞,因为现
在并不清楚网络的负荷情况。因此,较好的方法是 先探测
一下,即由小到大逐渐增大发送窗口,也就是说,由小到
大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,
先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而
在每收到一个对新的报文段的确认后,把拥塞窗口增加至
多一个MSS的数值。用这样的方法逐步增大发送方的拥塞
窗口 cwnd ,可以使分组注入到网络的速率更加合理。
拥塞避免算法
• 让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间
RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样
拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥
塞窗口增长速率缓慢得多。
• 无论在慢开始阶段还是在拥塞避免阶段,只要发送方判
断网络出现拥塞(其根据就是没有收到确认),就要把
慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的
一半(但不能小于2)。然后把拥塞窗口cwnd重新设置
为1,执行慢开始算法。这样做的目的就是要迅速减少
主机发送到网络中的分组数,使得发生拥塞的路由器有
足够时间把队列中积压的分组处理完毕。
拥塞避免算法
快重传和快恢复
• 如果发送方设置的超时计时器时限已到但还没有收到确
认,那么很可能是网络出现了拥塞,致使报文段在网络
中的某处被丢弃。这时,TCP马上把拥塞窗口 cwnd 减小
到1,并执行慢开始算法,同时把慢开始门限值ssthresh
减半。这是不使用快重传的情况。
• 快重传算法首先要求接收方每收到一个失序的报文段后
就立即发出重复确认(为的是使发送方及早知道有报文
段没有到达对方)而不要等到自己发送数据时才进行捎
带确认。
快重传
快重传
接收方收到了M1和M2后都分别发出了确认。现在假定接
收方没有收到M3但接着收到了M4。显然,接收方不能确
认M4,因为M4是收到的失序报文段。根据 可靠传输原理,
接收方可以什么都不做,也可以在适当时机发送一次对M2
的确认。但按照快重传算法的规定,接收方应及时发送对
M2的重复确认,这样做可以让 发送方及早知道报文段M3
没有到达接收方。发送方接着发送了M5和M6。接收方收
到这两个报文后,也还要再次发出对M2的重复确认。这样,
发送方共收到了 接收方的四个对M2的确认,其中后三个
都是重复确认。快重传算法还规定,发送方只要一连收到
三个重复确认就应当立即重传对方尚未收到的报文段M3,
而不必继续等待M3设置的重传计时器到期。由于发送方尽
早重传未被确认的报文段,因此采用快重传后可以使整个
网络吞吐量提高约20%。
快恢复
• 当发送方连续收到三个重复确认,就执行“乘法减小”算
法,把慢开始门限ssthresh减半。这是为了预防网络发生
拥塞。请注意:接下去不执行慢开始算法。
• 由于发送方现在认为网络很可能没有发生拥塞,因此与
慢开始不同之处是现在不执行慢开始算法(即拥塞窗口
cwnd现在不设置为1),而是把cwnd值设置为慢开始门
限ssthresh减半后的数值,然后开始执行拥塞避免算法
(“加法增大”),使拥塞窗口缓慢地线性增大。
快恢复
运输连接管理
主动建立连接
被动建立连接
主动关闭连接
被动关闭连接
建立连接
关闭连接