计算机网络4-传输层

网络4-传输层

  • 传输层提供的服务
    传输层的功能;传输层寻址与端口;无连接服务和面向连接服务
  • UDP
    UDP数据报;UDP校验
  • TCP
    TCP段;TCP连接管理;TCP可靠传输;TCP流量控制与拥塞控制

传输层提供的服务

传输层的功能

运输层为运行在不同主机上的进程之间提供逻辑通信,而网络层则提供主机之间的逻辑通信

传输层的功能如下:

  • 传输层提供应用进程之间的逻辑通信(网络层提供主机之间),逻辑通信指传输层之间的通信像是沿水平方向传送数据,但事实上这两个传输层之间并没有一条水平方向的物理连接
  • 复用和分用。复用指发送方不同的应用进程都可使用同一个传输层协议传送数据;分用指接收方的传输层在剥去报文首部后能够把这些数据正确交付到目的应用进程
  • 差错检测,应用层检查首部和数据部分,而网络层只检查IP数据报的首部,不检验数据部分是否出错
  • 提供两种不同的传输协议,TCP和UDP。而网络层无法同时实现两种协议(网络层要么只提供面向连接服务,如虚电路,要么只提供无连接服务,如数据报,不可能同时存在这两种方式)

传输层的寻址与端口

端口的作用

端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层直到应当将其报文段的数据向上通过端口交付给应用层相应的进程。端口是传输层服务访问点(TSAP),它在传输层的作用类似于IP地址在网络层的作用或MAC地址在数据链路层的作用,区别是端口标识的是主机中的应用进程,而IP地址和MAC地址标识的是主机(数据链路层的SAP是MAC地址,网络层的SAP是IP地址,传输层的SAP是端口)

端口号

端口号长度16位,能够表示65536个不同的端口,用于标识本计算机应用层的各进程,按端口范围分为两类:

  • 服务端使用的端口。这里又分为2类,最重要的一类是熟知端口号,数值0∼1023,这些端口指派给了TCP/IP最重要的一些应用程序。另一类是登记端口号,数值为1024∼49151,它是供没有熟知端口号的应用程序使用的,使用它们必须在IANA登记防止重复,常见熟知端口号如下:
应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP
熟知端口号 21 23 25 53 69 80 161
  • 客户端使用的端口号,数值为49152∼65535,客户进程运行时才动态选择,又称为短暂端口号

套接字

网络中通过IP地址来标识和区别不同的主机,端口号来标识和区别一台主机中的不同应用进程。在网络中采用发送方和接收方的套接字组合来识别端点,套接字实际上是一个通信端点,即

套接字 =(主机IP地址,端口号)

它唯一标识网络中一台主机和其上一个应用

无连接服务与面向连接服务

TCP是面向连接的传输控制协议,采用全双工,TCP不提供广播或组播服务,要提供面向连接的可靠服务,要增加许多开销,如确认,流量控制,计时器及连接管理等,使协议数据单元头部增大,占用处理机资源。主要用于FTP,HTTP,TELNET等

UDP是无连接的用户数据报协议,它在IP之上仅提供多路复用和对数据的错误检查,UDP主要用于TFTP(小文件传送协议),DNS,SNMP和RTP(实时传输协议)

UDP协议

UDP数据报

UDP只做传输协议能够做的最少工作,仅在IP数据报服务之上增加了两个最基本的功能:复用和分用以及差错检测。UDP优点如下:

  • 无须建立连接
  • 无连接状态(接收和发送缓存,拥塞控制参数和序号与确定号的参数)
  • 分组首部开销小(TCP 20B首部开销,UDP 8B)
  • 应用层能够更好地控制要发送的数据和发送时间(没有拥塞控制)

UDP是面向报文的,发送方UDP对应用层交下来的报文,在添加首部后就向下交付给IP层,不合并也不拆分,接收方UDP对IP层交上来的UDP用户数据报,在去除首部后就交付给上层应用进程,报文是UDP数据报处理的最小单位

UDP首部格式

UDP数据报包含两部分:UDP首部和用户数据
UDP首部有8B,由4个字段组成,每个字段长度都为2B,各字段意义如下:

  • 源端口:需要对方回信时使用,不需要时可为0
  • 目的端口
  • 长度:UDP数据报的长度(包括首部和数据),最小值为8(只有首部)
  • 校验和:检测UDP数据报在传输中是否有错,可选,若不想计算校验和就该字段为0

如果接收方UDP发现收到的报文中的目的端口号不正确,则丢弃该报文,并由ICMP发送 端口不可达 差错报文给发送方

UDP校验

计算校验和时,要在UDP数据报之前增加12B的伪首部(伪首部不传送也不递交)

然后和IP数据报的首部检验和计算方法相似,先二进制反码运算求和再取反(IP只校验IP数据报首部,UDP则校验首部和数据部分),UDP校验既可以检查UDP数据报,又对IP数据报的源IP地址和目的IP地址进行校验

发送方首先把全0放入校验和字段并添加伪首部,然后把UDP数据报视为许多个16位的字连接起来(若数据部分不是偶数个字节,则在数据部分末尾增加一个全0字节,此字节不发送),然后按二进制反码计算出这些16位字的和,将此和的二进制反码写入校验和字段
接收方把收到的UDP数据报加上伪首部,按二进制反码计算出这些16位字的和,当无差错时结果应全为1,否则表明有差错,接收方就丢弃这个UDP数据报

TCP协议

特点:

  • 面向连接
  • 每个TCP连接只有2个端点,每条TCP连接只能点对点
  • 提供可靠的交付服务
  • 全双工通信
  • 面向字节流(应用程序和TCP的交互是一次一个数据块,但TCP把数据仅视为一连串无结构的字节流)

面向字节流指的是封装的仍然是报文段,但是报文段中的序号是根据字节来编号的

TCP报文段

TCP传送的数据单元称为报文段。一个TCP报文段分为TCP首部和TCP数据两部分
TCP首部前20B是固定的,后面4N字节是根据需要而增加的选项,通常长度为4B的整数倍

各字段意义如下:

  • 源端口和目的端口,各2B
  • 序号字段,4B,TCP是面向字节流的,所以TCP连接传送的数据流中每个字节都编上一个序号
  • 确认号字段,4B,期望收到对方的下一个报文段的数据的第一个字节的序号,若确认号为N,则表明序号N-1为止的所有数据都正确收到(如B正确收到A发送过来的一个报文段,序号字段为501,数据长度为200B,则B发送给A的确认报文段中把确认号置为701)
  • 数据偏移,4位,表示首部长度,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,单位是4B(可以退出TCP首部最大长度为60B)
  • 保留字段,6位,目前全置为0
  • 紧急位URG,URG=1表明紧急指针字段有效,它告诉系统报文段中有紧急数据,应尽快处理
  • 确认位ACK,ACK=1确认号字段有效,TCP规定连接建立后所有传送的报文段都必须把ACK置1
  • 推送位PSH,接收TCP收到PSH=1的报文段,就尽快交付给接收应用进程,而不再等缓存满后再交付
  • 复位为RST,RST=1,表明TCP连接中出现严重差错,必须释放连接然后重连
  • 同步位SYN,SYN=1表示这是一个连接请求或连接接收报文,当SYN=1,ACK=0,这时一个连接请求报文,当SYN=1,ACK=1,是一个连接接收报文
  • 终止为FIN,用来释放一个连接,当FIN=1表示此报文段发送方已发送完毕,要求释放传输连接
  • 窗口字段,2B,指出现在允许对方发送的数据量,接收方的数据缓存空间有限,用窗口值作为接收方让发送方设置其发送窗口的依据,单位为字节
  • 校验和,2B,和UDP基本一样(把UDP伪首部的第4个字节17改为6,其他和UDP一样)
  • 紧急指针字段,16位,指出紧急数据有多少字节(紧急数据放在本报文段数据的最前面)
  • 选项字段,长度可变
  • 填充字段,整个首部长度是4B的整数倍

TCP连接管理

TCP把连接作为最基本的抽象,连接的端点为套接字,TCP连接的建立采用客户/服务器方式,主动发起连接建立的应用进程称为客户机,被动等待连接建立的应用进程称为服务器

TCP连接的建立

三次握手

  1. 客户机的TCP首先向服务器的TCP发送一个连接请求报文段,不含应用层数据,首部的SYN标志位置1,称为SYN报文段,另外,客户机会随机选择一个初始序号(client_isn),放置于该起始的TCP SYN报文段的序号字段中,然后该SYN报文段封装成IP数据报发送给服务器
  2. 一旦包含TCP SYN报文段的IP数据报到达服务器主机,服务器会从该数据报中提取出TCP SYN报文段,为该TCP连接分配TCP缓存和变量,并向该客户TCP发送允许连接的报文段,这个报文段也不包含应用层数据,SYN置1,确认号字段置为client_isn+1,服务器选择自己的初始序号置入TCP报文段首部的序号字段中,这个允许连接的报文段实际上表明:我收到了你发起建立连接的SYN分组,该分组有初始序号client_isn,我同意建立该连接,我自己的初始序号是server_isn,该允许连接的报文段称为SYNACK报文段
  3. 收到SYNACK报文段后,客户也要给该连接分配缓存和变量,客户机则向服务器发送另外一个报文段,这最后一个报文段对服务器的允许连接的报文段进行了确认(通过将值server_isn+1放置在TCP报文段首部的确认号字段中来完成),因为连接已经建立,所以该SYN比特置为0,第三个阶段可以在报文段负载中携带客户到服务器的数据

TCP连接的释放

参与TCP连接的两个进程中的任何一个都能终止该连接,TCP连接释放的过程称为四次握手

  1. 客户机打算关闭连接时,向其TCP发送一个连接释放报文段,并停止发送数据,主动关闭TCP连接,该报文段的FIN标志位置1,seq(序号)=u,它等于前面已传送过的数据的最后一个字节的序号加1(FIN报文段不携带数据,消耗序号),TCP是全双工的,发送FIN报文时,发送FIN的一端不能再发送数据,但对方仍然可以发送
  2. 服务器收到连接释放报文段后发出确认,确认号是ack=u+1,,这个报文段自身的序号是v,等于它前面已传送过的数据的最后一个字节的序号加1,此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态
  3. 若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发送一个FIN=1的连接释放报文段
  4. 客户机收到连接释放的报文段后,必须发出确认,确认报文段中,ACK置1,ack=w+1,seq=u+1,定时等待后连接关闭

TCP可靠传输

TCP使用校验,序号,确认和重传等机制完成可靠传输这一目的,TCP校验机制和UDP一样,不再赘述

TCP序号建立在字节流的基础上,而不建立在报文段之上,TCP为数据流中每个字节都编上一个序号,序号字段的值是指本报文段锁发送的数据的第一个字节的序号

TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号

有两件事会导致TCP对报文段重传,超时和冗余ACK

  • 超时:TCP每发送一个报文段,就对这个报文段设置一个计时器,设置的重传时间到期但还未收到确认时,就重传这一报文段
  • 冗余ACK:每当比期望序号大的失序报文段到达时,就发送一个冗余ACK,指明下一个期待字节的序号,当发送方收到对同一报文段的3个冗余ACK时,就可以认为跟在这个被确认报文段之后的报文段已经丢失,如发送方发送了序号为1,2,3,4,5的TCP报文段,其中2丢失了,3,4,5就成了失序报文段,接收方就发送3个对1号报文的冗余ACK,表示自己期望收到2号报文段

TCP流量控制

TCP提供流量控制服务来消除发送方使接收方缓存区溢出的可能性,它是一个速度匹配服务(匹配发送方发送速率和接收方接收速率)

TCP提供一种基于滑动窗口协议的流量控制机制,在通信过程,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,称为接收窗口,即调整TCP报文段首部中的 窗口 字段值,来限制发送方向网络注入报文的速率,同时,发送方根据其对当前网络拥塞程序的估计而确定的窗口值,称为拥塞窗口

TCP拥塞控制

拥塞控制指防止过多的数据注入网络,以使网络中的路由器或链路不致过载

拥塞控制和流量控制都是通过控制发送方发送数据的速率来达到控制效果,区别是:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性过程,涉及所有主机,路由器等因素,流量控制往往是指点对点的通信量的控制,它的目的是抑制发送端发送数据的速率来使得接收端来得及接收

TCP协议要求发送方维护两个窗口

  • 接收窗口rwnd:接收方根据目前接收缓存大小所许诺的最新窗口值,反映接收方的容量
  • 拥塞窗口cwnd,发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络的当前容量

发送窗口的上限值=min(rwnd,cwnd)

接收窗口大小可以根据TCP报文首部的 窗口 字段来通知发送方,而发送方如何维护拥塞窗口要用到慢开始和拥塞避免算法或快重传和快恢复算法,略

思维导图