传输层和数据链路层作用都是建立数据传输的通道,不同的是传输层主要应用在广域网的网络应用中,而数据链路层主要应用在局域网中的数据传输中。
传输层是整个广域网体系结构中的核心所在,因为他负责端到端的通信是面向网络通信层的第三层和面向信息处理的最高三层之间的中间一层,起到桥梁作用。
主要知识点:
- OSI/RM体系结构传输连接建立、数据传输和传输连接释放各个阶段的主要TPDU
- OSI/RM体系结构传输层的主要服务原语
- OSI/RM体系结构传输层寻址方案及原理
- OSI/RM体系结构传输连接建立、数据传输和连接释放流程
- OSI/RM体系结构流量控制方案和原理
- TCP协议数据段格式
- TCP协议的可靠性传输机制及原理
- TCP协议的流量控制方案和原理
- TCP协议的拥塞控制方案和原理
- UDP协议数据报格式
传输层服务
传输层在通信子网提供的服务基础上,为源主机和目的主机之间提供可靠的、透明的、可由用户选择的数据传输服务,是面向资源子网的高层和面向通信子网的低层之间的软件接口或者桥梁。同时,传输层也弥补了高层需要求的可靠、可控制服务于网络层所提供的非可靠服务之间的差距,并向高层屏蔽通信子网中不同网段的差异。
- 传输层服务类型
传输层也有面向连接服务和无连接服务两大类。面向连接的传输服务在提供服务之前需要先建立专门的传输连接,且连接是可管理的,在需要时或者通信结束后进行拆除。面向连接的传输服务是可靠的传输服务,可以提供拥塞控制和差错控制功能,如TCP协议提供的传输服务。无连接的传输服务在提供服务前,无需建立专门的连接,直接向目的节点发送数据,不管是否有可传输的通道,只提供不可靠的尽力传输,如UDP协议提供的传输服务。
- 传输层服务等级
不同类型的网络和不同连接性能的网络,所提供的传输层服务级别也不一样。传输层提供的服务可分为“传输连接”和“数据传输”服务。根据不同网络所提供的不同传输层服务质量水平,可以把传输层服务分为以下三大类:
A类:具有低的连接差错率和故障率,是可靠的传输服务,一般指虚电路网络。
B类:具有较低的连接差错和故障率,传输质量中等,应用于广域网和互联网中的传输层协议多数属于这一类。
C类:具有较高的连接差错率和故障率,服务质量较差,数据报服务或者无线电分组交换网所提供的传输层协议均属此类。
- 传输层协议类别
在OSI/RM体系结构的传输层中,不同类型的传输层协议所支持的服务级别不一样,共分为TP0~TP4五种类别。其中TP0~TP3这4种类别均属于面向连接的传输层协议,发送数据前必须建立传输连接;TP4既可以使面向连接的传输层协议,也可以是无连接的传输层协议。
- TP0 简单类
- TP1 基本差错恢复类
- TP2 多路复用类
- TP3 差错恢复和多路复用类
- TP4 差错检测和恢复类
表1 5种传输类别的综合比较
协议类别 | 主要功能 | 传输层协议类型 |
---|---|---|
TP0 | 数据分段和重组 | 面向连接的传输层协议 |
TP1 | 数据分段和重组、差错控制 | 面向连接的传输层协议 |
TP2 | 数据分段和重组、多路复用和解复用 | 面向连接的传输层协议 |
TP3 | 数据分段和重组、差错控制、多路复用和解复用 | 面向连接的传输层协议 |
TP4 | 数据分段和重组、差错控制、多路复用和解复用、差错检测 | 既可以是面向连接的传输层协议,又可以是无连接的传输层协议 |
重复连接的解决方法
在传输连接建立的过程中,除了大多数可以正常一次连接成功外,还可能由于各种原因导致一些非正常的连接现象,如因网络拥塞而造成的多次连接、因子网分组存储造成的重复连接等。
如果网络十分拥塞,就会导致传输连接建立过程中所传输的确认TPDU分组都无法及时回到发送端,这样一来,传输连接发起方就可能需要进行多次连接尝试。网络延迟还可能因为存储-转发机制引起,特别是传输通信两端所途径的网络比较多时,由于各子网分组存储功能,导致一些TPDU分组没有及时到达,最终造成了传输连接发起方多次重试,但是因为这些延迟分组可能过一段时间后到达了,于是又会请求建立新的连接,就出现了重复连接问题。
对于重复的传输连接问题可以说是没有一种特别有效的解决方法。通常采用非重复的TSAP、超时连接表、分组的TTL机制和三次握手机制等方法来尽量避免。
- 非重复TSAP
每次连接都建立一个不重复的TSAP地址,连接释放时销毁。但是不适用知名端口,因为他们必须使用固定端口提供服务。
- 过时连接表
为每个连接分配连接标识符(传输序列号),每建立一个连接,增加1,并存入每个TPDU中。连接被释放时,存入过期表中。每个请求到达时,需要对比过期表。但是不适用突发情况,比如机器重启。
- 分组TTL机制
预先定义和计数每个分组的生存时间,超时未回复的,视为陈旧分组,被抛弃。同样也存在问题,如消除重复连接请求,需要依赖子网完成,网络层分组传输本身的不可能性等。
- 三次握手机制
建立连接时,发送端发送CR TPDU请求建立一个连接(1次),接收端收到CR TPDU请求后,发送一个CC TPDU进行应答(2次),在应答分组中宣告了自己的初始连接序列号,发送端收到应答分组后发送第一个DT TPDU,对接收端初始序列号确认(3次)。这样一个连接才建立起来。
数据传输
ISO规定正常数据传输和加速数据传输两种类型的服务。过程如下:
- 连接建立之后,需要发送普通数据时,主机A的用户实体调用T_DATA.request传输服务原语(加速数据时,调用T_EXPEDITED_DATA.request传输服务原语),只是传输层协议开始数据发送。普通数据是以DT TPDU进行发送的,加速数据是以ED TPDU进行发送的。
- 当数据到达主机B传输层时,普通数据通过T_DATA.indication服务原语向用户实体指示有数据到达。
- 如果收到的是普通数据,主机B发送AK TPDU进行确认,其中有你的TPDU序列号字段希望收到的下一个数据或加速数据TPDU的序列号,等于i+1,但没有TPDU序列号字段值;如果收到的是加速数据,则主机B发送EA TPDU进行确认,其中有你的TPDU序列号字段为希望收到的下一个数据或加速数据TPDU的序列号,等于m+1。
传输的连接释放
传输连接的释放分为“对称释放”和“非对称释放”两种,“对称释放”是各自独立发出释放连接请求,收到对方的释放确认之后才可以释放连接;“非对称释放”是发送释放请求之后单方终止连接但这样做有可能丢失对方发送的数据。TCP/IP体系中采用4次握手机制来释放连接。
流量控制
传输层协议采用的是信用量(CDT)分配的窗口机制,不同于数据链路层协议流量控制方案中的窗口尺寸固定的滑动窗口机制,因为传输层的CDT值是随着数据的传输过程在不断变化的。
TCP协议基础
特性
- 面向连接
- 仅支持单播
- 提供可靠的交付服务
- 传输单位为数据段
- 仅一种TPDU格式
- 支持全双工通信
- TCP连接是基于字节流而非报文流的
- 每次发送的TCP数据段大小和数据段数都是可变的
数据段格式
- 源端口
- 序号
- 确认号
- 数据偏移
- 保留
- URG(紧急指针控制位,1时会优先发送)
- ACK (确认控制位)
- PSH (Push 控制位)
- RST (Reset 重置控制位)
- SYN (同步控制位)
- FIN(最后控制位)
- 窗口大小
- 校验和
- 紧急指针
- 可选项
TCP套接字
TCP/IP网络中,区分不同应用程序和进程间的网络通信和连接主要有三个参数:通信的目的IP地址、使用的传输层协议和使用的端口号。将这3个参数结合起来与一个Socket进行绑定,应用层就可以和传输层通过套接字接口来区分不同应用程序进程或网络连接的通道,实现数据传输的并发服务。
TCP端口
- 保留端口 (1~1023)
- 动态分配端口
- 注册端口
TCP有限状态机
状态 | 描述 |
---|---|
CLOSED | 呈阻塞、关闭状态,表示主机当前没有活动的传输或正在进行传输的连接 |
LISTEN | 呈监听状态,标识服务器正在等待新的传输连接进入 |
SYN RCVD | 表示主机已收到一个传输连接请求,但尚未确认 |
SYN SENT | 标识主机已经发出一个传输连接请求,等待对方确认 |
ESTABLISHED | 传输连接已建立,正常数据传输中 |
FIN WAIT 1 | 主动关闭,主机已经发送关闭连接请求,等待对方确认 |
FIN WAIT 2 | 主动关闭,主机已经收到对方的关闭传输连接确认,等待对方发送关闭传输连接请求 |
TIMED WAIT | 完成双向传输连接关闭,等待所有分组消失 |
CLOSING | 双方同时尝试关闭传输连接,等待对方确认 |
CLOSE WAIT | 被动关闭 收到对方发来的关闭传输连接请求并已确认 |
LAST ACK | 被动关闭 等待最后一个关闭传输连接确认并等待所有分组消失 |
TCP可靠传输机制原理
为什么说TCP是一个可以提供可靠数据传输的传输层协议?
在可靠传输方面,主要采用了以下4种机制:
- 字节编号机制: TCP数据段以字节为单位对数据段中的"数据"部分进行一一编号,确保每个字节的数据都可以有序的传送和接收。
- 数据正确接收确认机制:这里面又包括两种措施:一是通过"确认号"字段获知对方已连续正确接收的数据段;二是通过"数据偏移"字段使在TCP数据段分段重组时能准确地去除掉第一个数据分段外的TCP协议头部,再借助序号字段即可实现正确的数据段重组。
- 超时重传机制:在TCP中有一个重传定时器,在发送一个数据段的同时也启动了改定时器,如果在定时器过期之前该数据段还没有被对方确认,则定时器被停止,然后重传对应序号的数据段。
- 选择性确认机制:在SACK支持下,仅可以重传缺少部分的数据,而不要重传哪些已经正确接收的数据。
TCP的流量控制
流量控制是基于通信双方的数据发送和接收速率匹配方面考虑的,其最终目的就是不要让数据发送的太快,要让接收端能够来得及接收,是一个链路两端的点对点行为。
TCP的流量控制机制主要通过滑动窗口来实现。
- 正常情况下的滑动窗口流量控制机制
- 存在数据丢失情况下的流量控制(持续计时器)
TCP的拥塞控制
拥塞控制是基于网络中各段链路的带宽和中间设备的数据处理能力方面考虑的,不要使网络中出现传输阻塞,也就是不要出现发送端的数据大于接收端的数据处理能力的情形,是一个端到端的行为。
TCP拥塞控制方案
- 慢启动是为了避免出现网络拥塞而采取的一种TCP拥塞初期预方案。其基本思想就是在TCP正式数据传输时,每次可发送的数据大小是逐渐增大的,最后到达某个临界值。
- 拥塞避免方案
不同于慢启动,拥塞避免是当本次发送数据时的拥塞窗口再次达到大于或等于阈值时,让拥塞窗口大小每经过一个RTT时间仅增加1,使其线性增大,而不是继续像慢启动那样指数方式快速增加。显然这种拥塞窗口的增长速度明显要慢于慢启动方案中的拥塞窗口的增长速度。当数据再次丢失时,又把阈值减少为当前的一半,同时把窗口置为1,重新进入慢启动过程。 - 快速重传机制
快速重传的思想是:当接收端收到一个不是按序到达的数据段时,TCP实体迅速发送一个重复的ACK数据段,而不用等到有数据段需要发送时顺带发出确认;在重复收到3个重复数ack数据段后,即认为对应确认号字段的数据段已经丢失,TCP不等重传定时器超时就重传看来已经丢失的数据段。
UDP协议
网络体系结构的传输层中主要的传输层协议就是前面介绍的TCP,毕竟它是可靠的传输层协议,可以提供可靠的数据传输。但是有些应用,连续性和可靠性可能更重要,如视频会议,语音电话,其中丢一部分数据的影响不大,用户通过上下文可以很快推测出来,但是如果出现传输中断或延迟严重就无法忍受了。于是UDP协议就出现了。
UDP协议是一种无连接的协议,无需像TCP协议那样需要服务器端监听,也不必等客户端与服务器端建立连接后才能通信,当然数据最后能否传输成功,自然也不保证。
特性有:
- 无连续性
- 不可靠性
- 以报文为边界
- 无流量和拥塞控制功能
- 支持各种交互通信方式
TCP不支持组播,广播通信方式,只支持一对一单播,但是UDP支持各种通信方式,可以使一对一,一对多、多对一和多对多,所以凡是广播、组播通信都是采用UDP协议进行传输的。比如DNS、SNMP、DHCP、OSPF等。