挑战408——一周网络——运输层(1)

进程间的通信

运输层是面向通信的最高层,也是用户功能中的最底层,运输层为它上面的应用层提供通信服务。从IP层来说,通信的两端是两台主机,IP数据报的首部明确指出了这两台主机的IP地址。但是从运输层来看,真正通信的实体是在主机中运行的进程,是这台主机的进程跟另外一台主机的进程在交换数据。也就是说IP协议只是将数据报送到目的主机,这个数据报还停留在主机的网络层,并没有交付到网络的应用层。而运输层正是为两台主机提供端到端(即应用进程之间)之间的交付服务。
总之一句话网络层为主机之间提供逻辑通信,而运输层为主机之间的应用进程之间提供端到端之间的逻辑通信

运输层的分用与复用

复用:发送方不同的应用进程都可以使用同一个运输层协议传输数据。
分用:接收方的运输层在剥去报文首部后能把这些数据交付到不同的应用程序。

运输层的端口

端口可以让应用层的各种应用进程将数据交付给运输层,运输层也通过端口将数据交付给应用层中相应的应用程序。TCP/IP协议用16位端口号来标志一个端口,但它只具有本地意义,互联网中的主机相同端口号之间是没有任何联系的。它只是为了标志本机应用进程之间与运输层之间相互交互的层间接口。就如我们去寄快递,不但要知道收件人所在的小区(Ip地址),还应该知道收件人所在的几栋几层(端口号)。一般的,端口号分为:服务器用的端口号(上篇应用层已经提过),客户端使用的端口号。所以我们一般用嵌套字(Socket)组合来标明一个地址。嵌套字 = IP地址 :端口号

UDP 用户数据报协议

UDP数据报的特点

UDP只是在IP数据报服务上增加了很少的功能(差错检验,分用与复用)。也就是说如果开发人员采用UDP协议开发,那么相当于直接与IP协议打交道。
UDP的主要特点如下:

  • UDP是无连接的。也就是说在发送数据之前不需要事先建立连接。
  • UDP是尽最大努力交付的。即主机不需要维持复杂的连接状态。
  • UDP是面向报文的。即UDP对应用层下发的数据,直接添加UDP首部后就直接下发到IP层。
  • UDP没有拥塞控制。也就是不管网络是否存在拥塞,UDP依旧不会降低源主机的发送速率。(这对于一些需要恒定速率发送数据的应用是很有好处的(如视频通话,语音通话等等))。
  • UDP首部开销少。由于不需要各种复杂的参数去维持连接状态个建立连接,UDP的首部开销小很多。
  • UDP支持多种通信方式

挑战408——一周网络——运输层(1)

UDP数据报首部

挑战408——一周网络——运输层(1)
UDP数据报首部有8个字节,一共分成4个字段,每个字段长度为2字节。图中的伪首部不是实际UDP数据报的首部,是为了校验和使用的,不发送。

  • 源端口和目的端口:源端口号和目的端口号。
  • 长度:UDP数据报的长度。(最短为8,即只有首部)。
  • 检验和:检验UDP数据报在传输中是否有错,有错误就丢弃。

当运输层从IP层收到UDP数据报后,根据首部中的目的端口将数据交付给相应的应用层进程。当UDP发现收到的报文的首部目的端口不正确的时候,就将报文抛弃。并由ICMP协议发送端口不可达的差错报文给发送方。
UDP的首部检验和与IP数据报的首部检验相似,不同之处在于:IP数据报只是检验数据报的首部,而UDP数据报不仅检验首部还检验数据部分。在检验的时候发现UDP数据报的数据部分不是偶字节,就需要填入一个全0的字节。如果校验出UDP报文是错误的,便丢弃此报文。这种检错能力虽然不高,但是简单快速。通过伪首部还可以检验源IP地址和目的IP地址。