计算机网络基础——运输层

概述和运输层服务

运输层协议是在端系统而不是在网络路由器中实现的。 在发送方,运输层将接受来自发送应用进程的报文,并将其换成运输层分组——运输层报文段。然后将这些报文段发送给网络层(网络层不检查封装在运输层报文段的字段)。在接受放,就是一个逆过程,不做赘述。

运输层实际就是将主机间交付扩展到进程间交付,称为运输层的多路复用(transport-layer multiplexing)与多路分解(demultiplexing)。

进程有一个或者多个套接字(socket),它相当于从网络向进程传递数据和从进程向网络传递数据的门户。而运输层实际上没有直接将数据交给进程,而是交给了套接字来传递给进程这其中,将运输层报文段中的数据交付到正确的套接字(因为套接字有多个)的工作称为多路分解。而反过来,从不同套接字手机数据块,并为每个数据块封装上首部信息(header用于在多路分解的时候使用)从而生成报文段,然后将报文段传递到网络层的工作称为多路复用

为此,套接字需要有唯一的标识符,每个报文段有特殊字段来指示该报文段所交付的套接字。这些特殊字段就是源端口号目的端口号
但注意,UDP套接字是由一个包含目的IP地址和目的端口号的二元组来标识的,如果源端口号不一致而目的端口号一致,会被相同的套接字定向到相同的进程上。
而TCP套接字是由**一个四元组(源IP地址,源端口号,目的IP地址,目的端口号)**来标识的。

无连接运输:UDP

在使用UDP的时候,发送方和接收方没有进行握手,因此是无连接的。DNS就是一个通常使用UDP应用层协议的例子。

UDP和TCP的比较:

  • 采用UDP,应用层能够更好的控制发送的数据和发送的时间。采用UDP,只要应用进程将数据传递给UDP,UDP就能将此数据打包成UDP报文并立即传递给网络层。
    而TCP有一个拥塞控制机制,当链路拥塞时,会遏制运输层TCP发送。并且会需要接收方的确认消息。
    所以,如果能容忍数据丢失,UDP未尝不是一个好的选择。
  • 无需建立连接。UDP不需要经历三次握手,不会引入建立连接的时延。这可能是DNS运行在UDP之上的主要原因。
  • 分组首部开销小。TCP有20个字节的首部开销,而UDP仅有8个。

面向连接的运输:TCP

前面说到过,它是面向连接的,而不是连接的,这一点至关重要。面向连接是说,在一个应用进程向另一个应用进程发送数据之前,必须进行握手。

TCP连接提供的是全双工服务,也就是数据流是双向的。TCP也总是点对点的,即单个发送方与单个接收方之间的连接。

一旦建立起TCP连接,就可以相互发送数据了。一般来说,TCP会将从套接字获得的数据放在发送缓存中。接收方也会有一个TCP接受缓存,应用程序从此缓存中读取数据流。
是缓存就可能有溢出的可能,TCP提供了流量控制服务(flow-control service)来消除发送方和接收方缓存溢出的可能。因此,可以说流量控制服务是一个速度匹配服务,即发送发的发送速率与接收方的读取速率匹配。这种控制是通过发送发维护一个接受窗口的变量来实现的,接受窗口是接收方告诉发送方,该接收方还有多少缓存空间的(在每次数据段传递中告诉)。因为TCP是全双工的,所以发送方和接收方其实都会有一个接受窗口。

拥塞控制

在宽泛的层次上,我们课根据网络层是否为运输层提供了显式的帮助来区分拥塞控制方法:

  • 端到端的控制。网络层没有显式提供支持,通过TCP报文段的丢失(通过超时或者3次冗余可知)。TCP会相应减少其窗口长度。
  • 网络辅助的拥塞控制。网络层组件(即路由器)想发送方提供显式的反馈。
发布了364 篇原创文章 · 获赞 324 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/No_Game_No_Life_/article/details/103859685