您好,欢迎访问三七文档
第八章运输层8.1运输层的概念8.2TCP/IP体系中的运输层8.2.1TCP/IP的运输层中的两个协议8.2.2端口的概念8.3用户数据报协议UDP8.4传输控制协议TCP8.4.1TCP的报文编号与接收确认8.4.2TCP的流量控制8.4.3TCP的重发机制8.4.4TCP报文段的格式8.1运输层的概念运输层处于通信子网以外的资源子网中,运输层为源主机和目标主机之间提供端到端的可靠通信服务。也就是说,运输层将屏蔽掉各通信子网的细节和差异,使高层用户看不到实现通信功能的物理链路是什么,看不见数据链路采用的协议是什么。向用户进程提供端到端(即进程到进程)的、可靠的、全双工通信通道。运输层一方面为会话层提供服务,另一方面使用网络层所提供的报务。这样,运输层的协议就和网络层提供的服务有关。网络层提供的服务愈完善,运输层协议就愈简单;网络层提供的服务愈简单,运输层协议就愈复杂。所以在不同服务类别的网络层中进行通信时,所使用的运输层协议的功能也就不同。8.2TCP/IP体系中的运输层8.2.1TCP/IP的运输层中的两个协议TCP/IP的运输层中有两个不同的协议:用户数据报协议UDP(UserDatagramProtocol)和传输控制协议TCP(TransmissionControlProtocol)。如图8-4所示。·UDP和TCP都使用IP协议。也就是说,这两面三刀个协议在发送数据时,其协议数据单元PDU(ProtocolDataUnit)都作为下层IP数据报中的数据。接收数据时,IP数据报将首部去掉后,根据上层使用的运输协议,把数据部分交给上层的UDP或TCP。·UDP在传送数据之前不需要预先建立连接。远地主机的运输层在收到UDP数据报,不需要给出任何应答。在TCP/IP体系中的许多应用服务都采用这种运应用层UDPTCPIP网络接口图8-4TCP/IP运输层的UDP和TCP输方式,如:TFTP、NFS等。·TCP提供面向连接的服务,但不提供广播或多播服务。由于TCP提供面向连接的可靠服务,因此增加了许多的开销,如应答、流量控制、连接管理等。主动发起连接建立的进程叫做客户(client),被动等待连接建立的进程叫做服务器(server)。8.2.2端口的概念1.端口应用层的各种进程是通过相应的端口与运输层进行交互的,在运输层与应用层的接口上所设置的端口是一个16bit的地址,用端口号进行标识。端口分为两类:一类是专门分配给一些最常用的应用程序,叫做熟知端口,商品号为0~1023。图8-5中举出了几个常用的熟知端口。另一类是一般的端口,用来随时分配给请求通信的客户进程。2.套接字TCP所使用的“连接”是指两个端点之间的虚连接,这样的端点叫做插口(socket),或套接字。插口由IP地址(32bit)和端口号(16bit)组成,共48bit。比如:图8-6中连接1的一对插口是:(131.6.23.13,500)和(130.42.85.15,25)连接2的一对插口是:(131.6.23.13,501)和(130.42.85.15,25)现在常把运输层与应用层之间的接口通称为应用程序接口API(ApplicationProgrammingInterface)。8.3用户数据报协议UDP用户数据报协议只在IP数据报服务的基础上增加了一点功能,这就是端口功能。UDP数据报有两个字段:首部字段和数据字段。首部字段中含8个字节,分为4个字段,每段都是2个字节。各字段的意义如下:·源端口字段:源端口号·目的端口字段:目的端口号字节122222·长度字段:UDP数据报的长度·检验和字段:防止UDP数据报在传输中出错UDP数据报首部中检验和的计算方法有些特殊:在计算检验和时在UDP数据报之前添加12个字节的伪首部,所谓伪首部是因为它不是UDP数据报的真正首部,只是在计算检验和时,临时和UDP数据连接在一起,得到一个过渡的UDP数据报,检验和就是按照这个过渡的UDP数据报来计算的。伪首部既不向下传送,也不向上递交。注:第4字段中的值为17,代表UDP协议字段值。8.4传输控制协议TCP伪首部源端口目的端口长度检验和首部数据源IP地址目的IP地址017UDP长度UDP数据报首部数据IP数据报图8-7(a)UDP数据报的首部字节44112图8-7(b)UDP数据报的伪首部TCP是TCP/IP体系中的运输层协议,是面向连接的、提供双向可靠的、按序传送数据的服务。TCP协议数据单元的传送如下图所示:发送时:接收时:TCP是如何保证数据传送可靠、按序、无丢失、无重复的呢?8.4.1TCP的报文编号与接收确认·报文编号:TCP将所要传送的整个报文看成是一个个字节组成的数据流,然后对每一个字节编一个序号。在建立连接时双方要商定初始序号,TCP将要传送的报文段中的第一个数据字节的序号,放在TCP首部的序号字段中。·接收的确认:TCP对接收到的数据的最高序号表示确认,所返回的确认序号是已收到的数据的最高序号加1。也就是说,确认序号表示期望下次收到的第一个数据字节的序号。·差错与重发:若发送方在规定的设置时间内没有收到确认,就要将未被确认的报文段重新发送。接收方若收到有差错的报文段,则丢失此报文段(不发送确认信息)。·按序号:若收到的报文段无差错,只是未按序号,这时将由TCP的实现者自行确应用层的报文运输层加上TCP的首部TCP报文段(TCPPDU)作为IP数据报的数据加上首部IP数据报IP数据报去掉首部成为TCP报文段运输层去掉首部应用层报文接收端许诺的发送窗口已发送并被确认已发送未被确认还可继续发送暂时不可发送定处理办法,要么将不按序的报文段丢失,要么先将其暂丰于接收缓冲区内,待所缺序号的报文段收齐后再一起上交应用层。8.4.2TCP的流量控制TCP采用可变发送窗口的方式进行流量控制,窗口大小的单位是字节。接收窗口:根据接收端的资源情况,动态调整窗口的大小;并告诉发送端,使发送窗口和自己的接收窗口一致。发送窗口:发送窗口在建立连接时由双方商定,在通信过程中,将根据接收端反馈的信息,动态地调整窗口的大小。图注:待发送的数据共9个报文段,每段100字节,接收端许诺的发送窗口500字节。发送窗口大小的确定:发送窗口的大小=Min(通知窗口,拥塞窗口)通知窗口:接收端根据其接收能力所许诺的窗口值,是来自接收端的流量控制。拥塞窗口:是发送端根据网络拥塞情况所决定的窗口值,是来自发送端的流量控制。8.4.3TCP的重发机制报文重发:TCP每发送一个报文段,就设置一次定时器。只要定时器设置的时间到而还没有收到确认,就要重发这一报文段。1100101200201300301400401500501600601700701800801900图8-8TCP中窗口的概念如何确定重发时间呢?一个报文段发出去的时间与收到相应的确认报文段的时间之差,称为报文段的往返时延。将各个报文段的往返时延样本加权平均,就得到报文段的平均往返时延。每测量一个新的往返时延样本,就更新一次平均往返时延:平均往返时延T=α(旧的往返时延T)+(1-α)(新的往返时延样本)其中0≤α<1,若α很接近于1,则新的往返时延样本对平均往返时延影响不大,即T值更新较慢;若α接近于0,则新的样本对平均往返时延影响较大,即T值更新较快,典型的α值为7/8定时器设置的重发时间应略大于平均往返时延,即:重发时间=β(平均往返时延T)TCP标准推荐β取值为2。若β值很接近1,发送端会很及时地重发丢失的报文段。但是如果报文段并未丢失而只是增加了一点时延,那么过早地重发未收到确认的报文段,会增加网络的负担。β值太大,又会降低传输效率。Karn算法:在计算平均往返时延时,只要报文段重发了,就不再采样其往返时延样本。Karn算法的修正:报文段每重发一次,就将重发时间增大一些:新的重发时间=γ(旧的重发时间)其中γ的典型值为2。8.4.4TCP报文段的格式一个TCP报文由首部和数据两部分组成,如图8-12所示(P239)。·源端口和目的端口各占2字节。由16bit的端口号加上32bit的IP地址,就构成了48bit的插口(套接字)。·发送序号占4字节,是本报文所发送的数据部分第一个字节的序号。·确认序号占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的发送序号。·数据偏移占4bit,它表示数据部分开始的地方离TCP报文段起始处有多远,即TCP报文段首部的长度。下面是6bit的报文标志:·紧急比特URG当URG=1时,表示此报文段应尽快传送,而不要按原来的排队顺序来传送。·确认比特ACK只有当ACK=1时,确认序号字段才有意义;当ACK=0时,确认序号字段没有意义。·急迫比特PSH当PSH=1时,表示请求远地TCP将本报文段立即传送给其应用层,而不要等到整个缓冲区都填满后才向上交付。·重建比特RST当RST=1时,表示出现了严重差错,必须释放连接,然后再重建运输连接。重建比特还可以用来拒绝一个非法的报文段或拒绝打开一个连接。·同步比特SYN在建立连接时使用。当SYN=1而ACK=0时,表示这是一个连接请求报文段。对方若同意建立连接,则应在发回的报文段中使SYN=1和ACK=1。·终止比特FIN用来释放一个连接。当FIN=1时,表示要发送的数据已经发完,要求释放运输连接。·窗口占2字节,通过该窗口告诉对方:“在未收到我的确认时,你能发送的字节数至多是此窗口的大小。”,单位为字节。·检验和占2字节。检验的范围包括首部和数据两部分。和用户数据报UDP一样,在计算检验和时,要在TCP报文段的前面加上一个12字节的伪首部。伪首部的格式和UDP数据报的伪首部一样。检验和的计算方法和IP数据报首部检验和的计算方法一样,只是计算时要加TCP报文的首部。·选项长度可变。TCP对最长报文段(MSS)作了规定,MSS告诉对方的TCP:“我的缓冲区所能接收的报文段的最大长度是MSS”。MSS的默认值是536字节的净负荷,加上至少20字节的首部,那么,Internet上的所有主机都应能够接受的报文长度是556字节。
本文标题:第8章运输层
链接地址:https://www.777doc.com/doc-2113068 .html