传输层
Posted _Karry
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传输层相关的知识,希望对你有一定的参考价值。
文章目录
传输层协议概述
进程之间的通信
网络层提供主机之间的逻辑通信
传输层提供应用进程之间的通信
传输层有个很重要的功能——复用和分用
传输层的两个主要协议
传输层有两个主要协议:传输控制协议TCP和用户数据包协议UDP
UDP:
- 提供无连接服务
- 在传输数据之前不需要先建立连接
- 传输的数据单位协议是UDP报文或用户数据报
- 对方运输层在收到UDP报文后不需要进行回复
- 虽然UDP提供不可靠传输,但是某些情况下是最有效的工作方式
TCP:
- 提供面向连接的服务
- 传输的数据单位协议是TCP报文段
- TCP不提供广播或多播服务
- TCP提供可靠的、面向连接的服务,不可避免增加很多开销
传输层的端口
传输层的端口用一个16位端口号表示
端口号只具有本地意义,端口号只是为了标志本计算机应用层的各进程,不同主机的相同端口号没有什么意义。
所以两台计算机进行通信,不仅要知道IP地址(为了找到对方主机),也要知道对方的端口号(为了找到对方主机的应用)
常用的熟知端口:
用户数据报协议UDP
UDP概述
UDP协议只是在IP的数据包服务之上增加了很少的功能:
复用和分用的功能
差错检测的功能
UDP主要优点:
- UDP是无连接的,发送之前不需要建立连接,因此减少了开销和传输延时
- UDP使用尽最大努力交付,不实现可靠传输
- UDP是面向报文的,UDP对应用层交下来的报文,不合并也不拆分,一次交付一个完整的报文
- UDP没有拥塞控制
- UDP支持一对一、一对多、多对一、多对多的交互通信
- UDP的首部开销小,只有8个字节
UDP的首部格式
用户数据报UDP有两个字段:数据字段和首部字段
首部字段很简单,只有8个字节
当计算校验和时,需要加上伪首部(因为IP+端口号才能唯一确定一个进程),当检验和完成之后再去除伪首部,只把8个字节的首部传输给IP层。
当传输层从IP收到UDP数据包时,就根据UDP首部的目的端口号,把UDP数据报通过相应的端口上交最后的重点——应用进程
传输控制协议TCP
TCP最主要的特点
- TCP是面向连接的传输层协议
- TCP连接只能有两个端点,每一条TCP连接提供点对点服务(一对一)
- TCP提供可靠传输
- TCP提供全双工通信
- 面向字节流
含义:虽然应用程序和TCP的交互是一次一个数据块,但是TCP仅仅看作一连串无结构的字节流 - TCP根据对方给出的窗口值和当前网络拥塞程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)
TCP的连接
TCP连接的端点叫做套接字(socket),即IP地址+端口号
TCP报文首部
- 源端口和目的端口:各占2个字节。端口是运输层和应用层的服务接口
- 序号:占4个字节。TCP连接中传送的数据流中每一个字节都编上序号
- 确认序号:占4个字节。是期望收到对方下一个报文段的数据的第一个字节的序号
- 数据偏移(即首部长度):占4位
- 保留字段:占4位,保留为以后使用,目前为0
- 紧急URG:当URG=1时,表示紧急数据,尽快传送
- 确认ACK:ACK=1时确认号有效
- 推送PSH:当PSH=1就尽快交付接收应用进程,而不等待整个缓存满了之后才向上交付
- 复位RST:当RST=1时,表明TCP连接中出现严重差错(如主机崩溃等),必须释放连接,然后再建立运输连接
- 同步SYN:当SYN=1,表示这是一个连接请求或连接接受报文
- 终止FIN:用来释放一个连接,FIN=1表明此报文段的 发送端数据发送完毕,并要求释放连接
- 窗口:2个字节,用来让对方设置窗口大小
- 检验和:2个字节。检验和字段检验的范围包括首部和数据两部分
- 紧急指针:2个字节 ,指出本报文段中紧急数据有多少个字节
- 选项字段:长度可变,只规定了一种选项,即最大报文段中数据字段的最大长度MSS
可靠传输
停止等待协议
“停止等待”就是每发完一个分组就停止发送,等待对方确认,在收到确认之后再发送下一个分组。
当接收方B检测到M1数据出现差错而丢弃,其他什么也不做(不通知A)
或者M1再传输过程中丢弃了,也什么都不做
或者B发送确认信息ACK1丢失或者迟到
以上三种情况的解决办法:超时重传
即A为每一个已发送的分组都设置了一个超时计时器,只要在超时计时器到期之前都收到了相应的确认,就撤销该计时器,继续发送下一个分组M2
以上的可靠传输协议也称为自动重传请求ARQ
停止等待协议的优点是简单,缺点是信道利用率太低
为了提高传输效率,可以采用流水线传输
连续ARQ协议
采用滑动窗口,位于发送窗口内的数据可以连续发送,而不需要对方的确认,这样信道利用率就提高了。
连续 ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
累积确认:
连续ARQ协议接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示到这个分组为止的所有分组都已经正确收到。
优点:容易实现,即使确认丢失也不必重传
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息
Go-back-N(回退N):
如果发送方发送5个分组,接收方只对前2个分组发出确认。发送发无法知道后面3个分组的下落,只能把后面3个分组都重传。这就叫回退N,表示需要退回来重传已经发送过的N个分组。
TCP可靠传输的实现
以字节为单位的滑动窗口
假如A收到B发来的确认报文段,窗口20个字节,确认号是31,根据这两个数据A可以构造自己的窗口。
超时重传时间的选择
TCP采用了一种自适应算法,比如Karn算法
选择确认SACK
选择确认SACK只传输缺少的数据而不重传已经正确到达接收方的数据。
TCP流量控制
TCP流量控制是利用滑动窗口实现流量控制
流量控制就是让发送方的发送速率不要过快,既要让接收方来得及接受,也不能使网络发生拥塞,利用滑动窗口机制可以方便地在TCP连接上实现流量控制。
可能发生死锁:
比如B向A发送了零窗口的报文段后不久,B的接收缓存又有了一些缓存空间。于是B向A发送了rwnd=400的报文段,但是在传送过程丢失了。这就导致A和B一直都在等待着对方,造成死锁的局面。
为了解决这个问题,TCP为每个连接设有一个持续计时器
只要TCP连接的一方收到对方的零窗口通知,就启动该计时器。若持续计时器到时间就发送一个零窗口探测报文段(仅携带1字节数据),而对方就在确认这个探测报文段时给出现在的窗口值。
若窗口值仍然是零,则收到这个报文段的一方就重新设置持续计时器
若窗口值不是零,死锁被打破
TCP拥塞控制
拥塞控制的一般原理
出现拥塞的原因:某段时间对网络中某资源的需求超过了该资源能提供的可用部分,就出现了拥塞。
拥塞控制是一个全局性的过程,防止过多的数据注入到网络中,使网络中的路由器或链路不至于过载
拥塞控制所起的作用:
TCP的拥塞控制方法
TCP采用基于窗口的方法进行拥塞控制,TCP发送方维持一个拥塞窗口cwnd
拥塞窗口的大小取决于网络的拥塞程度,并且动态变化
发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量
所以发送窗口大小不仅取决于接收方公告的接收窗口,还取决于网络的拥塞状况,所以真正的发送窗口值为:
真正的发送窗口 = min(公告窗口值,拥塞窗口值)
拥塞的判断:
- 重传定时器超时:
现在的通信线路传输质量很好,因为传输出错而丢弃分组的概率很小。所以只要出现了超时,就可以猜想网络出现了拥塞 - 收到三个相同(重复)的ACK
个别报文段会在网路中丢失,预示可能会出现拥塞,因此尽快采取措施,避免拥塞
TCP拥塞控制算法:
-
慢开始
用来确定网络的负载能力,由小到大指数增长拥塞窗口数值
慢开始门限ssthresh(状态变量):防止拥塞窗口cwnd增长过大引起网络阻塞 -
拥塞避免
当拥塞窗口cwnd增加到慢开始门限,就把发送方的拥塞窗口cwnd加1,而不是加倍 -
快重传
快重传算法可以让发送尽早知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
发送方只要一连收到三个重复确认,就知道接受方确实没有收到报文段,应当立即进行重传(即“快重传”)
-
快恢复
当发送端收到连续三个重复的确认时,发送方认为网络可能没有发生拥塞,因此不执行慢开始算法,而是执行快恢复算法
主动队列管理AQM
所谓“主动”就是不要等到路由器的队列长度达到了最大值才丢弃后面的分组,而是当队列长度增加到某个值得警惕的数值时就主动丢弃到达的分组。
AQM可以用不同实现方法,其中流行多年的就是随即早期检测RED
TCP的运输连接管理
TCP是面向连接的协议。
运输连接有三个阶段:连接建立、数据传送、连接释放
运输连接的管理就是使运输连接的建立和释放都能正常的运行
TCP的连接建立
连接建立需要解决三个问题:
- 要使每一方能够确知对方的存在
- 允许双方协商一些参数
- 能够对运输实体资源进行分配
TCP连接的建立采用客户服务器方式(C/S)
TCP建立连接的过程叫做握手,建立连接需要在客户和服务器之间交换三个TCP报文段,称为三次握手
TCP的连接释放
TCP连接释放过程是四次挥手
以上是关于传输层的主要内容,如果未能解决你的问题,请参考以下文章