传输层有两个主要协议:传输控制协议TCP和用户数据包协议UDP
UDP:
TCP:
传输层的端口用一个16位端口号表示
端口号只具有本地意义,端口号只是为了标志本计算机应用层的各进程,不同主机的相同端口号没有什么意义。
所以两台计算机进行通信,不仅要知道IP地址(为了找到对方主机),也要知道对方的端口号(为了找到对方主机的应用)
UDP协议只是在IP的数据包服务之上增加了很少的功能:
复用和分用的功能
差错检测的功能
UDP主要优点:
用户数据报UDP有两个字段:数据字段和首部字段
首部字段很简单,只有8个字节
当计算校验和时,需要加上伪首部(因为IP+端口号才能唯一确定一个进程),当检验和完成之后再去除伪首部,只把8个字节的首部传输给IP层。
当传输层从IP收到UDP数据包时,就根据UDP首部的目的端口号,把UDP数据报通过相应的端口上交最后的重点——应用进程
TCP连接的端点叫做套接字(socket),即IP地址+端口号
“停止等待”就是每发完一个分组就停止发送,等待对方确认,在收到确认之后再发送下一个分组。
当接收方B检测到M1数据出现差错而丢弃,其他什么也不做(不通知A)
或者M1再传输过程中丢弃了,也什么都不做
或者B发送确认信息ACK1丢失或者迟到
以上三种情况的解决办法:超时重传
即A为每一个已发送的分组都设置了一个超时计时器,只要在超时计时器到期之前都收到了相应的确认,就撤销该计时器,继续发送下一个分组M2
停止等待协议的优点是简单,缺点是信道利用率太低
为了提高传输效率,可以采用流水线传输
采用滑动窗口,位于发送窗口内的数据可以连续发送,而不需要对方的确认,这样信道利用率就提高了。
连续 ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
累积确认:
连续ARQ协议接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示到这个分组为止的所有分组都已经正确收到。
优点:容易实现,即使确认丢失也不必重传
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息
Go-back-N(回退N):
如果发送方发送5个分组,接收方只对前2个分组发出确认。发送发无法知道后面3个分组的下落,只能把后面3个分组都重传。这就叫回退N,表示需要退回来重传已经发送过的N个分组。
假如A收到B发来的确认报文段,窗口20个字节,确认号是31,根据这两个数据A可以构造自己的窗口。
TCP采用了一种自适应算法,比如Karn算法
选择确认SACK只传输缺少的数据而不重传已经正确到达接收方的数据。
TCP流量控制是利用滑动窗口实现流量控制
流量控制就是让发送方的发送速率不要过快,既要让接收方来得及接受,也不能使网络发生拥塞,利用滑动窗口机制可以方便地在TCP连接上实现流量控制。
可能发生死锁:
比如B向A发送了零窗口的报文段后不久,B的接收缓存又有了一些缓存空间。于是B向A发送了rwnd=400的报文段,但是在传送过程丢失了。这就导致A和B一直都在等待着对方,造成死锁的局面。
为了解决这个问题,TCP为每个连接设有一个持续计时器
只要TCP连接的一方收到对方的零窗口通知,就启动该计时器。若持续计时器到时间就发送一个零窗口探测报文段(仅携带1字节数据),而对方就在确认这个探测报文段时给出现在的窗口值。
若窗口值仍然是零,则收到这个报文段的一方就重新设置持续计时器
若窗口值不是零,死锁被打破
出现拥塞的原因:某段时间对网络中某资源的需求超过了该资源能提供的可用部分,就出现了拥塞。
拥塞控制是一个全局性的过程,防止过多的数据注入到网络中,使网络中的路由器或链路不至于过载
TCP采用基于窗口的方法进行拥塞控制,TCP发送方维持一个拥塞窗口cwnd
拥塞窗口的大小取决于网络的拥塞程度,并且动态变化
发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量
所以发送窗口大小不仅取决于接收方公告的接收窗口,还取决于网络的拥塞状况,所以真正的发送窗口值为:
真正的发送窗口 = min(公告窗口值,拥塞窗口值)
拥塞的判断:
TCP拥塞控制算法:
慢开始
用来确定网络的负载能力,由小到大指数增长拥塞窗口数值
慢开始门限ssthresh(状态变量):防止拥塞窗口cwnd增长过大引起网络阻塞
拥塞避免
当拥塞窗口cwnd增加到慢开始门限,就把发送方的拥塞窗口cwnd加1,而不是加倍
快重传
快重传算法可以让发送尽早知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
发送方只要一连收到三个重复确认,就知道接受方确实没有收到报文段,应当立即进行重传(即“快重传”)
所谓“主动”就是不要等到路由器的队列长度达到了最大值才丢弃后面的分组,而是当队列长度增加到某个值得警惕的数值时就主动丢弃到达的分组。
AQM可以用不同实现方法,其中流行多年的就是随即早期检测RED
TCP是面向连接的协议。
运输连接有三个阶段:连接建立、数据传送、连接释放
运输连接的管理就是使运输连接的建立和释放都能正常的运行
连接建立需要解决三个问题:
TCP连接的建立采用客户服务器方式(C/S)
TCP建立连接的过程叫做握手,建立连接需要在客户和服务器之间交换三个TCP报文段,称为三次握手