传输层
转自: http://blog.chinaunix.net/uid-26275986-id-4109679.html
根据TCP/IP协议的分层结构,网络层之上是传输层,从层次结构上来看,传输层位于网络的最高层和应用的最底层。传输层的主要作用有两个:一个是居于网络层与应用层之间提供复用和分用的服务;另一个则是需要的时候为应用层提供可靠的传输服务。复用和分用指的是传输层负责实现端到端的传输,即计算机进程之间的通信;而网络层则负责点到点的传输,最重要的功能是路由寻址。
网络通信的“用户”准确地说是位于网络节点计算机中的应用进程,我们使用端口号来区分不同的进程。传输层协议提供了一个16位的端口号,范围最大到65535。这些端口号一共分为两类:
-1. 服务器端使用的端口号,最重要的一种约定俗成的端口号不允许私自使用或改变用途,数值为0-1023;另一类叫登记端口号,数值为1024-49151,这类端口号是为没有熟知端口号的应用程序使用的,使用前必须到IANA进行登记。总之0-49151不是我们可以随便使用的。
-2. 客户端使用的端口号:数值为49152-65535,这类端口由客户端进程运行时动态选择,通信结束后释放该端口号,因此称之为短暂端口号,这部分是我们自己编写APP时可以使用的。
一、用户数据报协议UDP
传输层一种只有两个重要的协议:TCP与UDP,其中TCP是面向连接的、可靠的数据流服务,机制相对负责,里面涉及可靠传输、流量控制和拥塞控制等,我们稍后再讨论,这里我们先来看看“轻量级”的UDP协议。
UDP协议,即用户数据报协议是在IP的数据报服务之上增加了很少的一点功能,这就是复用/分用和简单的差错控制。UDP的主要特点是:
-1. 无连接:发送数据之前不需要建立连接,因此减少了开销和发送数据的延迟;
-2. 尽最大努力交付:不保证可靠交付,因此数据传输过程中不需要维护复杂的连接状态;
-3. 面向报文的:发送方的UDP对应用层传递下的数据直接封装成UDP报文后交给IP层,既不合并,也不拆分,而是原样保留后交给IP层。UDP一次交付一个完整的报文,不会考虑数据的大小,但是为了避免在IP层出现分片,应用层必须考虑合适的数据大小。
-4. UDP可以实现N:M的通信(因为无连接);
-6. UDP没有拥塞控制;
尽管UDP是不可靠的连接,现实中也有一些服务会需要UDP,比如IP电话、视频网站等要求速度而不太注重数据完整性的服务,对于实时性要求很高,却允许丢失少量的分组,特别适合UDP的低开销的服务。一般的TCP/UDP应用服务如下:
UDP的头部只有8个字节,首先有2个字节的源端口和2个字节的目的端口,然后是2个字节的UDP长度,最后是2个字节的校验和:
二、TCP概述
TCP作为一个可靠的连接协议最大的特点就是面向连接的,即在发送数据之间要建立连接,数据传输过程中要维护连接,数据发送完毕之后要释放连接。在此基础上TCP提供可靠的传输:
-1. 可靠交付:TCP传递的数据无差错、无丢失、无重复、且按序到达;
-2. 全双工通信:TCP通信的每一段都维护着一个发送缓存和接收缓存;
-3. 面向字节流:TCP协议把上层交付的应用层数据单纯地看成是一系列无结构的字节流;
TCP连接的端点不是主机中的应用进程,而是应用进程维护的套接字接口(socket),其基本的结构包含【IP:Port】;
三、TCP可靠传输的工作原理
TCP实现可靠传输的工作原理主要有两个,我们分别来看:
-1. 停止等待协议
这个协议说白了就是对于收到数据包后的确认机制,基本过程如下:
*1. 发送方A向接收方B发送数据分组M1;
*2. 接收方B收到分组M1后想A发送M1的确认;
*3. A接收到B发送的对于M1后的确认之后再发送分组M2;
*4. 若中间的某一个分组丢失或是延迟,则A就会使用超时计时器进行超时重传,每个分组发送时都会保留其副本并且设置超时计时器;
这里对于超时重传机制需要三点说明:
**1. A发送自己的每个分组,必须暂时保存已发送分组的一个副本,直到收到该副本的确认;
**2. 分组和确认分组都必须编号,这样才能对分组进行区分;
**3. 超时计时器设置的时间应当比数据在分组传输的平均往返时间更长一些;
上面的机制保证了在不可靠的信道上时间可靠的传输,这种机制称为自动重传请求(ARQ),即重传的请求是自动的,不需要接收方向发送方请求重传某个分组。下面的几个图来说明超时重传的机制:
-2. 连续ARQ协议
停止等待协议的优点是简单,缺点是信道利用率太低。为此我们引入了连续ARQ协议和滑动窗口协议。滑动窗口协议是TCP协议的精髓所在,这里先来介绍基本的连续ARQ协议。
*1. 发送方维持的发送窗口中可以连续发送多个分组;
*2. 接收方采用累积确认的方式,即确认N则表示N之前的包都已经正确收到;
*3. 每成功确认M个分组,发送窗口便“滑动”M个分组;
四、TCP报文段的首部格式
TCP的功能都在其首部的定义中得到体现: