计算机网络(第7版) 第5章 运输层
1.进程之间的通信
从通信和信息处理的角度看,运输层向它上面的应用层提供信息服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。
有了IP层,IP协议能把分组发送到目的主机,为啥还需要运输层呢?
IP协议虽然把分组送到了目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用程序;从运输层的角度看,通信的真正端点并不是主机,而是主机中的进程,即端到端的通信是应用进程之间的通信。
2.运输层提供应用程序间的逻辑通信
逻辑通信的意思是:从应用层来看,只要把应用层报文交给下面的运输层,运输层就可以把这报文传送到对方的运输层,好像这种通信就是沿水平方向直接传送数据(哪怕双方相距几千里)。但事实上这两个运输层之间并没有一条水平方向的物理连接,数据的传送是沿着途中的虚线方向(经过多个层次)传送的。
网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
3.运输层的两个主要协议
1)用户数据报协议UDP
UDP在传送数据之前不需要先建立连接。远地主机的运输层在接收到UDP报文后,不需要给出任何确认,虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。
2)传输控制协议TCP
TCP则提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接,TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多开销,如确认、流量控制、计时器以及连接管理等,这不仅使协议数据单元的首部增大了很多,还要占用许多的处理机资源。
4.运输层的复用和分用
复用:应用层的所有应用进程,都可以通过运输层再传送到IP层(网络层)。
分用:运输层从IP层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程。
5.运输层的端口
给应用层的每个应用进程赋予一个非常明确的标志是至关重要的。
为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法(而这种方法必须与特定的操作系统无关)对TCP/IP体系的应用进程进行标志。
解决这个问题的方法就是在运输层使用协议端口号,通常简称为端口。
注意:在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是完全不同的概念,硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。不同的系统具体实现端口的方法可以是不同的(取决于系统使用的操作系统)。
tcp/ip的运输层用一个16位端口号来标志一个端口,但是端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口,在互联网不同计算机中,相同的端口号是没有关联的。
6.用户数据报协议UDP
1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。
2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
3)UDP是面向报文的。
4)UDP没有拥塞控制,因此网络出现的拥塞不会是源主机的发送速率降低。
5)UDP支持一对一、一对多、多对一和多对多的交互通信。
6)UDP的首部开销小,只有8个字节(TCP有20个首部字节)。
7.传输控制协议TCP
1)TCP是面向连接的运输层协议,应用程序在使用TCP协议之前,必须先建立TCP连接,在传输数据完毕后,必须释放已建立的TCP连接。
2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)。
3)TCP提供可靠交付的服务。可靠交付:无差错、不丢失、不重复、按序到达。
4)TCP提供全双工通信。TCP允许通信双方的应用程序在任何时候都能发送数据。
5)面向字节流。TCP中的“流”指的是流入到进程或从进程流出的字节序列。面向字节流的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流,TCP并不知道所传送的字节流的含义。
8.TCP的连接
TCP把连接作为最基本的抽象。
TCP连接的端点叫做套接字(socket)或插口。端口号拼接到IP地址即构成了套接字。
每一条TCP连接唯一地通信两端的两个端点(即两个套接字)所确定,如,
9.可靠传输的工作原理
理想的传输条件有以下两个特点:
1)传输信道不产生差错
2)不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。
然后实际的网络都不具备以上两个理想条件,但我们可以使用一些可靠传输协议,当出现差错时让发送方重传出现差错的数据,同理,在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速度,从而使本来不可靠的传输信道实现可靠传输。
10.停止等待协议
11.TCP连接的建立
TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段,
客户A向服务器B发送请求,服务器B向客户A发送请求的确认,客户A向服务器B发送请求的确认的确认。
第三次请求的确认的确认,意义在于,避免由于网络延时的问题,导致客户A多次向服务器发送了请求,最后请求到达了服务器B,服务器B对请求进行确认,而客户A真正只需要一个连接即可,如果服务器B不需要客户A对请求的确认再进行确认就建立一个连接,很容易造成资源的浪费(因为这种连接又无法关闭)。
12.TCP连接的释放
TCP连接释放过程是四报文握手。
客户A向服务器B发送连接释放的请求,服务器B发送请求的确认后,这时的TCP连接处于半关闭状态,即客户A已经没有数据要发送了,但服务器B若发送数据,客户A仍要接收。
若服务器B已经没有要向客户A发送的数据,其应用进程就通知TCP释放连接的请求,客户A对请求进行确认,然后等待2MSL就关闭连接,服务器B在接到请求的确认后就关闭连接。
等待2MSL,是为了确保客户A对服务器B释放连接的请求的确认能够到达服务器B,如果没有到达,服务器B会重新发送连接释放的请求,客户A接收到请求后,等待计时重新回到2MSL,同时也可以实现本连接持续的时间内所产生的所有数据报文都从网络中消失,这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
本章小结