目录
一.运输层的两个主要协议:TCP 与 UDP
1.TCP/IP 的运输层有两个不同的协议:
2.端口号(protocol port number)
(1)软件端口与硬件端口
(2)TCP 的端口
(3)三类端口
二.用户数据报协议 UDP
1.UDP介绍
2.UDP 的主要特点
3.面向报文的 UDP——一次发送整个报文
4.UDP 的首部格式
计算 UDP 检验和的例子
二.传输控制协议 TCP
1.TCP 最主要的特点
TCP 面向流的图像
2.TCP 传输特点
3.TCP 的连接
套接字 (socket)
4.TCP 报文段的首部格式
三.可靠传输的工作原理
1.停止等待协议
2.确认丢失和确认迟到
3.可靠通信的实现
4.停止等待协议的信道利用率
5.流水线传输
四.传输协议
连续 ARQ 协议
3.累积确认
4.Go-back-N(回退 N)
5.SR(selective Repeat Protocol)
五.TCP的流量控制
1.加权平均往返时间
2.超时重传时间 RTO (RetransmissionTime-Out)
Karn 算法
3.利用滑动窗口实现流量控制
4.持续计时器 (persistence timer)。
5.必须考虑传输效率
六.TCP的拥塞控制
1.拥塞控制的一般原理
2.拥塞控制与流量控制的关系
3.开环控制和闭环控制
4.几种拥塞控制方法
1.慢开始和拥塞避免
(1) 慢开始和拥塞避免
(2)慢开始算法的原理
(3)慢开始和拥塞避免算法的实现举例
2.快重传和快恢复
快重传举例
七.TCP 的运输连接管理
1. 运输连接的三个阶段
2.用三次握手建立 TCP 连接
3.四次挥手——TCP 的连接释放
运输层为相互通信的应用进程提供了逻辑通信
应用进程之间的通信
- 两个主机进行通信实际上就是两个主机中的应用进程互相通信。
- 应用进程之间的通信又称为端到端的通信。
- 运输层的一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。
- “运输层提供应用进程间的逻辑通信” 。 “逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接
- 运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
- 当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。即:秘书(网络层)虽然是不可靠的,但是老板(运输层)是可靠的,秘书上交数据时漏了或者错了,老板(运输层)会亲自检查并要求秘书(网络层)重发
- 当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道。
一.运输层的两个主要协议:TCP 与 UDP
1.TCP/IP 的运输层有两个不同的协议:
TCP 传送的数据单位协议PDU是 TCP 报文段 (segment)
TCP 则提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
- 运输层的UDP用户数据报与网际层的IP数据报有很大区别。IP数据报要经过互连网中许多路由器的存储转发,但UDP用户数据报是在运输层的端到端抽象的逻辑信道中传送的。
- TCP 报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了 TCP 连接。
2.端口号(protocol port number)
(1)软件端口与硬件端口
(2)TCP 的端口
(3)三类端口
- (需要背,记住)熟知端口,数值一般为 0~1023。
- 登记端口号,数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。
- 客户端口号或短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
二.用户数据报协议 UDP
1.UDP介绍
- IP也是不可靠协议。UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。
- 虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。例如UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多的实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延
IDP正好适合这种要求(实时交互——直播,直播时不用因为掉包而重传,即直播可以卡,不用重新播) - IP是路由器到路由器,而UDP是实现端到端
- 差错检测的差异:IP数据报校验和是检测IP头部而不检查数据部分,UDP/TCP校验和是检测IP头部和数据部分,
2.UDP 的主要特点
- UDP 是无连接的,即发送数据之前不需要建立连接。
- UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
- UDP 是面向报文的。
- 复用UDP 没有拥塞控制,很适合多媒体通信的要求。
- UDP 支持一对一、一对多、多对一和多对多的交互通信。
- UDP 的首部开销小,只有 8 个字节。
3.面向报文的 UDP——一次发送整个报文
- 发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
- 应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。
- 接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
- 应用程序必须选择合适大小的报文。
4.UDP 的首部格式
伪首部:传输过程中没有,校验时才有
伪首部作用:伪首部中有源IP地址,目的IP地址等,这样既检查了UDP用户数据报的源端口号和目的端口号以及UDP用户数据报的数据部分,又检查了IP数据报的源IP地址和目的地址。
计算 UDP 检验和的例子
二.传输控制协议 TCP
1.TCP 最主要的特点
- TCP 是面向连接的运输层协议。
- 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
- TCP 提供可靠交付的服务。
- TCP 提供全双工通信。
- 面向字节流
TCP 面向流的图像
2.TCP 传输特点
- TCP 连接是一条虚连接而不是一条真正的物理连接。
- TCP 对应用进程一次把多长的报文发送到TCP 的缓存中是不关心的。
- TCP 根据对方给出的窗口值rwnd和当前网络拥塞的程度cwnd来决定一个报文段应包含多少个字节,即报文段字节数<min(rwnd,cwnd)(UDP 发送的报文长度是应用进程给出的)。
- TCP 可把太长的数据块划分短一些再传送。TCP也可等待积累有足够多的字节后再构成报文段发送出去。
例如窗口值=4,滑块内14,15,16,17为正在传输的数据,只有当14传到接受缓冲区后,滑块才会后移,这是正在传输的数据为15,16,17,18了
3.TCP 的连接
- TCP 把连接作为最基本的抽象。
- 每一条 TCP 连接有两个端点。
- TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字(socket)或插口。
- 端口号拼接到(contatenated with) IP 地址即构成了套接字。
套接字 (socket)
4.TCP 报文段的首部格式
- 窗口扩大选项 ——占 3 字节,其中有一个字节表示移位值 S。新的窗口值等于TCP 首部中的窗口位数增大到(16 + S),相当于把窗口值向左移动 S 位后获得实际的窗口大小。
- 时间戳选项——占10 字节,其中最主要的字段时间戳值字段(4 字节)和时间戳回送回答字段(4 字节)。
- 选择确认选项——在后面的 5.6.3 节介绍。
三.可靠传输的工作原理
1.停止等待协议
超时重传
- 在发送完一个分组后,必须暂时保留已发送的分组的副本,只有在收到相应的确认后才能清除暂时保留的分组副本。
- 分组和确认分组都必须进行编号。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。
- 超时计时器的重传时间应当比数据在分组传输的平均往返时间(RTT)更长一些。
- 发送窗口为1,接收窗口为1
2.确认丢失和确认迟到
第一, 丢弃这个重复的分组M,,不向上层重复交付
3.可靠通信的实现
- 使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
- 这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reQuest)。
- ARQ 表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组 。
4.停止等待协议的信道利用率
5.流水线传输
- 发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。
- 由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。
四.传输协议
1.连续 ARQ 协议
3.累积确认
- 下图上发下收,上面滑块窗口为4格表示要发送的数据,下面滑块窗口为1格表示要接受的数据上面发一个,下面对应收一个但不回复确认,滑块后移一个,收一个后移一个,积累满4个统一回复确认。
- 接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
- 累积确认有的优点是:容易实现,即使确认丢失也不必重传。缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。
- 累计到第3个确认:前三个都收到了并且没有丢包,下一个给我发送数据包4。假设数据包1丢包——第二个图
4.Go-back-N(回退 N)
- 如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。
- 这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。
- 可见当通信线路质量不好时,连续 ARQ协议会带来负面的影响。
解释:GBN是传一个收一个,滑块后移并发送一个确认,例如发送方发“0数据包”,接收方收到,滑块移到“1”,并发送0确认;发送方继续发“1数据包”,接收方收到1,滑块移到“2”,并发送1确认;以此类推。
假设4丢包了,后续发送数据包5,然后收方回复之前最后一个收到的数据包确认,即确认3,告诉发送方:包含3之前的数据包全收到了,下一个我要的是4。收方丢掉后续的这些数据,而发送方进行超时重传,重新传4以及后续的数据即4—7数据。
5.SR(selective Repeat Protocol)
发送窗口>1,接收窗口>1,发送窗口>接收窗口
不采用累积确认,而是逐个确认,重传就重传丢包的那一个(13课-39:00)
例如:现在7丢包了,但是8,9,10,11仍会到达并依次收到确认,属于未按序到达,直到窗口成为死锁状态才会超时重传7
五.TCP的流量控制
1.加权平均往返时间
2.超时重传时间 RTO (RetransmissionTime-Out)
5-33
Karn 算法
3.利用滑动窗口实现流量控制
- 一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
- 流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
- 利用滑动窗口机制可以很方便地在 TCP连接上实现流量控制。
4.持续计时器 (persistence timer)。
5.必须考虑传输效率
- 可以用不同的机制来控制 TCP 报文段的发送时机:
- 满了发货:第一种机制是 TCP 维持一个变量,它等于最大报文段长度 MSS。只要缓存中存放的数据达到 MSS 字节时,就组装成一个 TCP 报文段发送出去。
- 紧急发货:第二种机制是由发送方的应用进程指明要求发送报文段,即 TCP 支持的推送(push)操作。
- 到时间发货:第三种机制是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过 MSS)发送出去。
六.TCP的拥塞控制
1.拥塞控制的一般原理
2.拥塞控制与流量控制的关系
- 拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。
- 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
- 流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制。
- 流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
3.开环控制和闭环控制
- 监测网络系统以便检测到拥塞在何时、何处发生。
- 将拥塞发生的信息传送到可采取行动的地方。
- 调整网络系统的运行以解决出现的问题。
4.几种拥塞控制方法
1.慢开始和拥塞避免
(1) 慢开始和拥塞避免
- 发送方维持一个叫做拥塞窗口 cwnd (congestionwindow)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。如再考虑到接收方的接收能力,则发送窗口还可能小于拥塞窗口。
- 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
- 流量窗口rwnd和收发方拥塞窗口cwnd三个哪个小选哪个。
(2)慢开始算法的原理
- 在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd = 1,即设置为一个最大报文段 MSS的数值。
- 在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个 MSS 的数值。
- 用这样的方法逐步增大发送端的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。
(3)慢开始和拥塞避免算法的实现举例
- 当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。
- 慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16。
- 发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。
- 在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1发送第一个报文段 M0。
- 发送端每收到一个确认 ,就把 cwnd 加 1。于是发送端可以接着发送 M1 和 M2 两个报文段。
- 接收端共发回两个确认。发送端每收到一个对新报文段的确认,就把发送端的 cwnd 加 1。现在 cwnd 从 2增大到 4,并可接着发送后面的 4 个报文段。
-
发送端每收到一个对新报文段的确认,就把发送端的拥塞窗口加 1 ,因此拥塞窗口 cwnd 随着传输轮次按指数规律增长。
-
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
-
假定拥塞窗口的数值增长到 24 时,网络出现超时,表明网络拥塞了。
-
更新后的 ssthresh 值变为 12 (即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1 ,并执行慢开始算法。
-
当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。
2.快重传和快恢复
快重传举例
七.TCP 的运输连接管理
1. 运输连接的三个阶段
- 要使每一方能够确知对方的存在。
- 要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。
- 能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。