1、五章节传输层协议 重点 端口 TCP连接的建立和拆除的握手机制 计时器 流量控制 拥塞控制5.1.传输层 5.1.1.传输层概述一、传输层的作用 弥补网络层所提供的服务质量的不足,以便为高层提供可靠的端到端通信。计算机网络在逻辑上分为资源子网和通信子网 资源子网中的设备才有传输层,通信子网中的设备一般只具备OSI下面三层的功能。资源子网中的端用户依靠在自己主机上所增加的这个传输层来检测分组的丢失或数据的残缺并采取相应的补救措施。二、传输层功能 在网络层所提供的源到目标的分组传输服务的基础上,向上层提供可靠的源主机到目标主机的数据传输。当上层的协议数据包的长度超过网络互联层所能承载的最大数据传输
2、单元时,提供分段和合并分段的功能。提供多路复用机制,由于同时存在多个高层应用,因此要求传输层能够同时为多个高层应用服务,将多个高层应用复用到一个网络层连接上。传输层是通过端口来实现这一功能的。三、端到端的传输 传输层就是为上三层提供端到端的传输服务 声音信号电信号声音信号电信号点到点点到点点到点端到端四、TCP/IP 的传输层 两个主要的协议即传输控制协议(transport control protocol,简称TCP)和用户数据报协议(user datagram protocol,简称UDP)TCP协议是一个可靠的面向连接的传输层协议。UDP协议将可靠性问题交给应用程序解决 指标指标 TC
3、P UDP是否连接面向连接无连接传输可靠性可靠 不可靠速度 较慢 较快5.1.2.端口和套接字 一台主机中同时会有多个应用进程进行通信,传输层必须将它们区分开来。因此网络通信的最终地址应不仅包括主机地址,还要包括可描述网络进程的某种标识。这种标识称作传输层服务访问点,即端口端口。TCP/IP 定义一个16Bit长度的整数作为端口标识,也就是说可定义2e16个端口,其端口号从0到 2e161。从0 到255 被规定作为公共应用服务的端口,如WWW、FTP、DNS 和电子邮件服务等,又被称为著名端口(Well-known ports)。这些端口所对应的服务是固定、公开的,因此可以通过访问这些端口来
4、访问对应的服务。从256 到1023 的端口,被保留用作商业性的应用开发,如一些网络设备厂商专用协议的通信端口等。1023 以上端口未做限定,即作为自由端口,以本地方式进行分配。5.2.TCP协议 5.2.1.TCP协议概述 TCP,即传输控制协议,它提供面向连接的、可靠的(没有数据重复或丢失)、全双工的数据流传输服务。TCP的协议数据单元被称为段(Segment)数据段分为两部分,即段头和数据 段头一般长20字节(如有选项部分另加),是TCP 为了实现端到端可靠传输所加上的控制信息。而数据则是指由高层即应用层来的数据。数据段的大小必须首先满足65535字节的IP包数据长度限制。源端口:主叫方
5、的TCP 端口号。目标端口:被叫方的TCP 端口号。发送序号(SEQ):SYN=0表示数据段第一个数据字节的序号,即该数据段在发送方的数据流中的位置;SYN=1表示建立本次连接的初始序号。确认序号(ACK):下一个期望接收的TCP 数据段号,顺序号和确认号共同用于TCP 服务中的确认、差错控制。头长:TCP头长,以32 位字长为单位。实际上相当于给出数据在数据段中的开始位置。预留:未用的6 位,为将来的应用而保留,目前置为“0”。控制字段(CTL):共6个控制字段,每个占一位bit。TCP 数据段有多种应用,如建立或关闭连接、传输数据、携带确认等,这些控制字段用于给出与数据段的作用及处理相关的
6、控制信息。字段位值=1时有效。窗口:窗口的大小表示本方可以接收的数据量,以八位字长为计量单位。TCP使用可变大小的滑动窗口来进行流量控制。校验和:用于对数据段头和数据进行校验,以判断接收的数据是否有错。紧急指针:给出从当前段序号到紧急数据位置的偏移量。任选项:提供一种增加额外设置的方法,如最大TCP 分段的大小的约定。填充:当任选项字段长度不足32 位字长时,需要加以填充。数据:来自高层即应用层的协议数据。5.2.2.TCP的连接管理 TCP实现的是面向连接的数据传输服务,即是一种虚电路的数据交换方式,在数据传输以前需要在源主机和目标主机之间创建相应的虚电路连接。一、连接的建立 TCP 使用三
7、次握手协议来建立连接。主机1 首先发起TCP 连接请求,并在所发送的数据段中将控制字段中的SYN置为“1”、ACK置为“0”。主机2 收到该分段,若同意建立连接,则发送一个连接接受的应答数据段,其中控制字段的SYN 和ACK均被置“1”,指示对第一个SYN 报文段的确认,以继续握手操作;否则,主机2 要发送一个将RST置为“1”的应答数据段,表示拒绝建立连接。主机1 收到主机2 发来的同意建立连接数据段后,还有再次进行选择的机会,若其确认要建立这个连接,则向主机2 发送确认数据段,用来通知主机2 双方已完成建立连接;若其已不想建立这个连接,则可以发送一个将RST置为“1”的应答数据段来告之主机
8、2 拒绝建立连接。二、连接的拆除TCP连接的关闭过程是一个四次握手的过程。图5-9 四次握手拆除TCP 连接 当主机1 的数据已发送完毕时,其在等待确认的同时可发送一个将控制字段FIN 置“1”的数据段给主机2,表示请求中断主机1到主机2的连接。图5-9 四次握手拆除TCP 连接 若主机2 已正确接收主机1 的所有分段,则会发送一个数据段正确接收的确认段,同时通知本地相应的应用程序,对方要求关闭连接,接着再发送一个对主机1 所发送的FIN段进行确认的应答段。由此便拆除了一个方向的TCP连接。图5-9 四次握手拆除TCP 连接 但是,此时在相反方向上,主机2 仍然可以向主机1 发送数据,直到主机
9、2 数据发送完毕并要求关闭连接。这个方向上连接的拆除同样要经过(1)、(2)两步,由主机2发起FIN段,主机1应答确认ACK,拆除另一方向的TCP连接。图5-9 四次握手拆除TCP 连接5.2.3.确认和超时重传 5.2.4.TCP定时器 TCP设置多个定时器帮助其完成所承担的服务。一、重传定时器(Connection Establishment Timer)重发定时器是TCP发送数据时设置的,如果在定时器超时前该数据段被确认,就关闭该定时器,否则,一旦超时则重发该数据段。二、连接建立定时器(Connection Establishment Timer)当请求建立连接的SYN数据段发出时,连接
10、建立定时器就开始计时,如果在75秒内未收到响应,则连接建立失败。三、ACK延时定时器(Delayed ACK Timer)当TCP实体收到数据时它必须返回确认,但并不需要立即回复,它可以在200亳秒内发送ACK报文,如果在这段时间内它恰好有数据要发送,它就可以在数据内包含确认信息,因此需要ACK延时定时器。四、持续定时器(Persistence Timer)防止死锁事情发生,发送方在收到接收方发来一个窗口为0的数据时,就启动持续定时器,等到该定时器超时还没有收到对方修改窗口大小的数据段时,发送方就发一个探测数据,对接收方对该探测数据的响应应包含了窗口大小,若仍为0,则定时器清0,重复以上步骤,
11、否则则可以发送数据。五、保活定时器(The Keepalive Timer)当一个连接长时间闲置会造成保持存活定时器会超时,这时就会发送一个空数据段检测另一方是否仍然存在(即连接是否依然激活),如果它未得到响应,便终止该连接。六、闲置定时器(The Quiet Timer)当TCP连接断开后,为防止该连接上的数据还在网络上,并被后续打开的具有相同五元组的连接接收,要设置闲置定时器以防止刚刚断开连接的端口号被立即重新使用。5.2.5.流量控制与滑动窗口机制 TCP实体在端设备中为每个连接开设两个缓冲区,一个是接收缓冲区,用来接收对方发送来的数据。第二个是发送缓冲区,TCP实体从应用进程接收数据,
12、存贮在发送缓冲区。为了防止由于发送端与接收端之间的不匹配而引起数据丢失,TCP采用滑动窗口进行流量控制。5.2.6.TCP的拥塞控制 为了解决因网络传输能力导致拥塞的问题,TCP对流量控制方法进行了改进,增加了一个拥塞窗口。这样发送方TCP就有两个窗口:一是接收方通告窗口,反映的是接收方的数据接收能力;一是拥塞窗口,反映的是网络的传输能力。而发送方可以发送的字节数,即发送窗口的大小取这两个窗口的最小值。5.3.UDP协议 5.3.1.UDP协议 与TCP 相反,TCP/IP 传输层的另一大协议UDP提供的是不可靠的面向无连接的数据传输服务。一、UDP数据报格式 图5-13 UDP数据报格式 源
13、端口字段:该字段是16 位长度的发送端UDP协议端口号。在UDP协议中也采用与TCP 中类似的端口概念来标识同一主机上的不同网络进程,并且两者在分配方式上也是类似的。应用程序使用UDP协议而不直接采用原始IP协议发送数据,最主要的原因就UDP协议提供了标识进程的端口号。目的端口字段:该字段是16 位长度的接收端UDP协议端口号。长度字段:该字段标记该数据报的长度,以8位长的字节为长度单位,包括报头和用户数据。校验和字段:该字段是可选择的,如该字段值为0 则表明不进行校验。一般说来,使用校验和字段是必要的。检查和的计算除了包括报头和用户数据外,还要加上12字节的伪首部。5.伪首部:该字段只用于计
14、算校验和,不会在UDP数据报中发送。它由源IP地址、目的IP地址、UDP协议号(17)和UDP长度组成。二、UDP数据报最大长度 由UDP数据报格式可知,UDP数据报没有标识数据分段的字段,因而接收端无从知道所接收的数据报是否发生混序,是否是重复发送的数据报。为了避免这种情况发生,UDP协议常用于一次性传输数据量较小的网络应用,这样UDP实体就不用对数据进行分段,而这种数据传送方式就是前面讨论的报文交换方式。许多UDP应用程序的设计中,其应用程序数据被限制成512字节或更小。习题习题1.试述传输层协议的三个功能。2.如果报文中是请求报文,如何使用端口号?试举出三个已知TCP服务的端口号。3.TCP协议利用什么功能保证可靠的连接?4.绘图说明TCP连接建立的规程。5.TCP如何防止拥塞现象发生?由哪一方起主导作用?6.TCP如何进行流控,那一方主导流控。