前言
运输层直接为应用进程间的逻辑通信提供服务。
运输层向高层用户屏蔽了下面网络核心细节(如网络拓扑、路由选择协议等)它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。
UDP与TCP对比
- UDP:
无连接
支持一对一,一对多,多对一和多对多交互通信
对应用层交付的报文直接打包
尽最大努力交付,也就是不可靠
不使用流量控制和拥塞控制
首部开销小,仅仅8字节 - TCP:
面向连接
每一条TCP链接只能有两个端点EP,只能是一对一通信
面向字节流
可靠传输,使用流量控制和拥塞控制
首部最小20字节,最大60字节
TCP流量控制
- 流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制、
TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小。
TCP发送方收到接收方的零窗口通知后,应启动持续计时器,持续计时器超时后,向接受方发送零窗口探测报文。
TCP拥塞控制
- 对网络中某一资源的需求超过该资源所能提供的可用部分,网络性能就要变坏–拥塞
如果出现拥塞不进行控制,整个网络的吞吐量就将随输入负荷的增大而下降。
TCP超时重传时间选择
-
RFC6298建议使用一下公式进行计算超时重传时间RTO
RTO = RTTS + 4 * RTTD
加权平均往返时间RTTS
RTTS1 = RTT1
新的RTTS = (1 - a)*旧的RTTS + a * 新的RTT样本
0<= a <1
a的RFC6298推荐值为1/8,即0.125 -
RTT偏差的加权平均RTTD
RTTD1 = RTT1 / 2
新的RTTD = (1 - b)*旧的RTTD + b * |RTTS - 新的RTT样本|
0<= b <1
b的RFC6298推荐值为1/4,即0.25
TCP可靠传输实现
- TCP基于以字节为单位的滑动窗口来实现可靠传输
发送方在未收到接收方的确认时,可以将发送窗口内还未发送的数据全部发送出去,接收方只接收序号落入发送窗口内的数据
虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大。
网络传送窗口值需要经历一定时间的滞后,并且这个时间还是不确定的。发送方还可能根据网络当时的拥塞情况适当减少自己的发送窗口尺寸。 - 对于不按序到达的数据如何处理,TCP并无明确规定。
如果接收方把不按序到达的数据一律丢弃,那么接受窗口的管理将会比较简单,但是不利于网络资源利用。TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺失的字节收到后,再按序交付上层应用进程。 - TCP要求将接收方必须有积累确认和捎带确认机制,这样可以减少传输开销、接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
- 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传。
- TCP的通信是全双工通信。通信中的每一方都在发送和接收报文。