一、概述
物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的的问题,实现了主机到主机的通信
但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程
如何为运行在不同主机上的应用进程提供直接的通信服务时运输层的任务,运输层协议又称端到端协议
1.1端口号
为了使运行不同操作系统的计算机的应用进程之间能进行网络通信,必须使用统一的方法对TCP/IP体系的应用进程进行标识,即端口号。
逻辑端口的概念(端口):一个整数值(16位);0-65535
网络上中进程工作方式:C/S 对应的端口号码的分配也分为两大类
服务类(静态的预先指定的)
1-1013(默认系统熟知的服务)
1023-45191(需要申请注册的服务 QQ4000,8000都是它所使用的端口)
客户类(随机的由本地操作系统自己管控)
端口:相当于进程在网络中的地址
IP+PORT(端口号) 构成了网络中唯一的通信端点:我们称之为端到端的通信
(Socket) (Socket) Protocol
1.2复用与分用
发送方的复用
- 发送方的某些应用进程所发送的不同应用报文,在运输层使用UDP协议进行封装,这是UDP复用;若用TCP封装则称TCP复用
- 运输层使用端口号区分不同进程,不管使用何种协议封装的报文,在网络层都需要使用IP协议封装成IP数据报,这是IP复用,数据报中协议字段的值用来表名封装的是何种协议数据单元
接收方的分用
- 根据协议字段的值,将IP数据报封装的协议数据单元上交运输层的过程叫IP分用
- 同理,UDP根据端口号将数据交给应用进程叫做UDP分用;TCP根据端口号将数据交给应用进程叫做TCP分用
1.3运输层引入的协议
1,TCP协议(负责完成端到端的可靠传输)
2,UDP协议(负责完成端到端的数据传输)
用户数据报协议UDP
UDP
是无连接的,随时可向目的主机发送报文,支持单播、多播和广播
UDP
收到应用层报文后直接为报文添加UDP
首部就进行发送,即面向应用报文
UDP
数据报首部仅8字节
传输控制协议TCP
TCP
时面向连接的。发送数据前需要"三报文握手"建立连接,数据传输结束后需要"四报文挥手"释放连接仅支持单播
TCP是面向字节流的。其将应用进程交付下来的数据块仅仅看作是一连串的字节流,
TCP
将这些字节流编号并存储在缓冲中;接收方一边接收数据,一边将缓冲中的数据交给应用进程。接收方收到的字节流必须和发送方收到的字节流完全一致
不会出现传输差错(误码、丢失、乱序、重复)
TCP
报文段首部最小20
字节,最大60
字节
1.4TCP协议流量控制
1)滑动窗口 发送窗口 接收窗口
2)超时计时器
3)流量控制方法 :接收端控制发送端
2)超时计时器
3)流量控制方法:接收端控制发送端
4)流量控制的实现过程:0窗口
5)TCP协议效率管理:糊涂窗口
流量控制
一般来说,我们希望数据传输能快一些,但如果发送方把数据发送得过快,接收方就可能来不及接收,这会造成数据的丢失
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收
利用滑动窗口实现流量控制
- 发送方和接收方窗口保持一致,发送方窗口随着接收方窗口变化而变化(通过确认报文告知发送方)
- 发送方发送完窗口内数据后需要等到确认报文才会滑动窗口并继续发送,若窗口内的某个值很久没有收到回答报文,则超时重传报文
若接收方窗口调为0后,一段时间之后又调为200,此时向发送方传递确认报文,可此时报文丢失,则会造成发送方窗口始终为0,接收方以为发送方收到了确认报文而开始等待数据,造成死锁,如何解决?
当发送方窗口大小为
0
时,其隔一段时间就会发送一个1
字节大小的零窗口探测报文,看看此时接收窗口大小是否进行调整零窗口探测报文也有超时重传机制
1.5TCP的拥塞控制
1)拥塞控制的概念:拥塞就是拥堵了(网络拥堵了),拥堵的原因?数据包太多了,导致网络吞吐量下降,网络时延增加;网络时延增加又进而加剧了网络数据包增多
2)拥塞控制的手段方法
(1)核心方法:减少数据包数量
(2)具体实现:就根据不同情况,采用不同方法来减少数据包数量
(3)拥塞的主要表现就是时延的增加,为此,就围绕时延增加来进行数据包数量的调整
(4)数据包投放数量是由各主机的发送窗口大小决定的
(5)TCP又引入一个拥塞窗口的概念;拥塞发生时应该控制发送窗口的数量
结论:发送窗口的大小:min(拥塞窗口,接收窗口)
(6)拥塞窗口:拥塞发生时,能够发送数据包的个数
(7)拥塞控制算法:慢开始 拥塞避免 快重传 快恢复
1)慢开始:设置门限值;门限值内,试探着向网络投入数据包,避免拥塞
2)拥塞避免:拥塞发生时,能够发送数据包的个数
3)快重传:当数据包未按序到达,导致重复确认增多,则立即重传该数据包,门限降为重复确认时拥塞窗口的一半,拥塞窗口同时调小
4)快恢复:发生超时时,立即急速的减少投入网络的数据包
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况叫做拥塞
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
1.6超时重传时间(RTO)选择
正常情况下,超时重传时间应该设为略大于往返时间。但是由于各区域的速率可能不一致,因此将超时重传时间设置为一个固定值是行不通的
往返时间测量问题
针对出现超时重传时无法测准往返时间RTT的问题,有以下解决方法
在计算加权平均往返时间RTTs时,只要报文段重传了,就不采用其往返时间TT样本。也就是出现重传时,不重新计算RTTs,进而超时重传时间RTO也不会重新计算。
此方法的漏洞如下:如果报文段时延突然增大很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段,于是重传,造成死锁
修正方法:报文段每重传一次,就把超时重传时间RTO增大一些,典型的做法是将RTO的值取为旧RTO的2倍
1.7可靠传输
可靠性保障可以放在体系结构中的任何一层(数据链路层,网络层)实现,但现代网络系统面向的是主机(独立自主的计算力)系统,可以将可靠性保障交由主机来完成,进而减轻通信子网的负担,使得通信子网专注于数据包的高效传输
1.停止等待协议(ARQ自动请求重传协议)
A给B发送数据,B需要给一个确认,
否认应答:A再发,
2.后退N帧重传(Go Back N ARQ)(接收窗口固定唯一,而TCP接收窗口不确定)
(1)发送窗口:没有得到确认的情况下,发送端可以连续发送分组的个数
(2)接收窗口:接收数据的个数以及包含能接受数据的序号
(3)工作协议
(4)窗口大小与序号关系
3.选择重传协议
目的提高发送速率,不在采用发送一个数据帧就停下来等待确认的模式,而是可以连续发送多个数据帧后才停下来等待的模式
接收端:引入一个接收窗口的概念(即应当接收的数据帧及数据帧序号);这类协议接收窗口大小为1
其中:连续发送多少个数据帧的个数称为 发送窗口
(1)发送窗口
(2)接收窗口
(3)工作过程
(4)窗口大小与序号关系
1.8运输连接管理
TCP
的运输连接管理就是使运输连接的建立和释放都能正常地进行
SYN
为1
的报文段不能携带数据,但会消耗一个序列号seqACK=1
代表这是普通确认报文段,ack=x+1表示这是对报文段序列号seq=x的确认
- 客户端发起关闭请求,一去一回后进入半关闭状态【客户端不再发送数据,服务端可能还会发】
- 服务器将自己剩余的数据发送完后也发送一个关闭请求,接着客户端给予回应后服务器关闭,客户机则要等到一段时间后完全关闭(防止发给服务器的确认报文丢失)
1.9首部格式
源端口:占
16
比特,写入源端口号,用来标识发送该TCP报文段的应用进程目的端口:占
16
比特,写入目的端口号,用来标识接收该TCP报文段的应用进程
- 序号:占32比特,取值范围[ 0 , − 1 ] ,序号增加到最后一个后,下一个序号就又回到0。作用是指出本TCP报文段数据载荷的第一个字节的序号
- 确认标志位ACK:取值为1时确认号字段才有效,为0时确认号字段无效
确认号:占
32
比特,取值范围 [ 0 , − 1 ],序号增加到最后一个后,下一个序号就又回到0
。可理解为若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据
- 数据偏移:占4比特,并以4字节为单位
用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处。这个字段实际 上是指出TCP报文段的首部长度
首部固定长度为20字节,因此数据偏移字段的最小值
保留字段:占6比特,保留为今后使用,但是目前应置为
0
窗口:占16比特,以字节为单位。指出发送本报文段一方的接收窗口
窗口值作为接收方让发送方设置其发送窗口的依据,这是以接收方的接收能力来控制发送方的发送能力,称为流量控制
检验和:占16比特,检测范围包括TCP报文段的首部和数据载荷两部分
在计算校验和时,要在
TCP
报文段的前面加上12
字节的伪首部同步标志位SYN:在
TCP
连接建立时用来同步序号终止标志位FIN:用来释放
TCP
连接
紧急标志位URG:取值为1时紧急指针字段有效;取值为
0
时紧急指针字段无效。紧急指针:占
16
比特,以字节为单位,用来指明紧急数据的长度
选项:增加选项可以增加
TCP
的功能
- 最大报文段长度MSS选项:
TCP
报文段数据载荷部分的最大长度- 窗口扩大选项:为了扩大窗口(提高吞吐率)
- 时间戳选项:
- 用来计算往返时间
RTT
- 用于处理序号超范围的情况,又称为防止序号绕回
PAWS
- 选择确认选项:实现选择确认功能
填充:由于选项长度可变,因此使用填充来保证报文段首部能被4整除