首页 理论教育 传输层协议:计算机网络基础

传输层协议:计算机网络基础

时间:2023-11-01 理论教育 版权反馈
【摘要】:TCP 是面向连接的端到端的可靠协议。UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP 仍然不失为一项非常实用和可行的网络传输层协议。根据OSI参考模型,UDP 和TCP 都属于传输层协议。UDP 协议的主要作用是将网络数据流量压缩成数据报的形式。

传输层协议:计算机网络基础

1.传输层的基本功能

TCP 协议主要为了在主机间实现高可靠性的包交换传输协议。TCP 协议主要在网络不可靠的时候完成通信,这对军方可能特别有用,对于政府和商用部门也适用。TCP 是面向连接的端到端的可靠协议。它支持多种网络应用程序。TCP 对下层服务没有多少要求,它假定下层只能提供不可靠的数据报服务,它可以在多种硬件构成的网络上运行。TCP 的下层是IP协议,TCP 可以根据IP 协议提供的服务传送大小不定的数据,IP 协议负责对数据进行分段、重组,在多种网络中传送。

2.传输控制协议(TCP)

(1)TCP 的服务。尽管TCP 和UDP 都在相同的网络层(IP),TCP 却向应用层提供与UDP 完全不同的服务。

TCP 提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP 的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP 连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。

两个应用程序通过TCP 连接交换8 bit 字节构成的字节流。TCP 不在字节流中插入记录标识符。我们将这称为字节流服务(Byte Stream Service)。如果一方的应用程序先传10 字节,又传20 字节,再传50 字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分4 次接收这80 个字节,每次接收20 字节。一端将字节流放到TCP 连接上,同样的字节流将出现在TCP 连接的另一端。

另外,TCP 对字节流的内容不做任何解释。TCP 不知道传输的数据字节流是二进制数据,还是ASCII 字符、EBCDIC 字符或者其他类型数据。对字节流的解释由TCP 连接双方的应用层负责。

这种对字节流的处理方式与Unix 操作系统对文件的处理方式很相似。Unix 的内核对一个应用读或写的内容不做任何解释,而是交给应用程序处理。对Unix 的内核来说,它无法区分一个二进制文件与一个文本文件。

(2)TCP 握手协议。在TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn 包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn 包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN 包(syn=k),即SYN+ACK 包,此时服务器进入SYN_RECV 状态;第三次握手:客户端收到服务器的SYN+ACK 包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED 状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据。

3.流量控制

流量控制:可以保证数据的完整性。可以防止发送方的数据在接收方的缓冲区溢出。当接收方在接到一个很大或速度很快的数据时,它把来不及处理的数据先放到缓冲区里,然后再处理。缓冲区只能解决少量的数据,如果数据很多,那么后来的数据将会丢失。使用流量控制,接收方不是让缓冲区溢出,而是发送一个信息“我没有准备好,停止发送”给发送方,这时,发送方就会停止发送。当接受方能再接收数据时,就会再发送一个信息,“我准备好了,请继续发送”,那么发送方就会继续发送数据。

比如发送端能发送5 个数据,接收端也能收到5 个数据,给个确认(ACK)给发送端,确认收到5 个数据。

如果网络通信出现繁忙或者拥塞的时候,接收端只能收到3 个数据,接收端给个确认“我只能收3 个数据”,那么发送端就自动调整发送的窗口为3,当线路又恢复通畅的时候,接收端又可以受到5 个数据,那它会给确认给发送端,告诉它“我的窗口为5”,那发送端就把窗口又调整会5,就这样进行流量控制。

比如说发送端窗口为3,发送到接收端,接收端的接收窗口为5,接收端接收数据,并且会给发送端一个ACK(确认)告诉发送端“我的窗口为5”,发送端收到确认后会把自己的发送端窗口调整为5,这样就可以加速数据传输了。

发送端窗口大小取决于接收端窗口大小和网络传输能力两者中的最小者。

4.拥塞控制

拥塞控制与流量控制有密切关系,但也有区别,可以这样理解,拥塞控制是使网络能够承受现有的网络负荷,是一个全局变量;而流量控制往往只是指点对点之间对通信量的控制。

5.用户数据报协议(UDP)(www.xing528.com)

UDP 协议是英文User Datagram Protocol 的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多客户/服务器模式的网络应用都需要使用UDP 协议。UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP 仍然不失为一项非常实用和可行的网络传输层协议。

与我们所熟知的TCP(传输控制协议)协议一样,UDP 协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互联)参考模型,UDP 和TCP 都属于传输层协议。

UDP 协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8 个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

UDP 报头由4 个域组成,其中每个域各占用2 个字节,具体如下:

端口号、目标端口号、数据报长度、校验值。

数据报的长度是指包括报头和数据部分在内的总的字节数。

因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65 535 字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8 192字节。

UDP 协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP 协议可以检测是否出错,这与TCP 协议是不同的,后者要求必须具有校验值。

UDP 和TCP 协议的主要区别:

两者在如何实现信息的可靠传递方面不同。TCP 协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其他信息,否则将一直等待直到收到确认信息为止。

与TCP 不同,UDP 协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把 UDP协议称为不可靠的传输协议。所以此协议常用于小信息量的通信和小文件传输,如QQ 软件就是一个例子。

相对于TCP 协议,UDP 协议的另外一个不同之处在于如何接收突发的多个数据报。不同于TCP,UDP 并不能确保数据的发送和接收顺序。例如,一个位于客户端的应用程序向服务器发出了以下4 个数据报:D1、D22、D333、D4444;但是UDP 有可能按照以下顺序将所接收的数据提交到服务端的应用:D333、D1、D4444、D22。事实上,UDP 协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生。

也许有的读者会问,既然UDP 是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP 协议可能会变得非常有用,因为UDP 具有TCP 所望尘莫及的速度优势。虽然TCP 协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP 由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

包括视频电话会议系统在内的许多应用都证明了UDP 协议的存在价值。因为相对于可靠性来说,这些应用更加注重实际性能,所以为了获得更好的使用效果(例如,更高的画面帧刷新速率)往往可以牺牲一定的可靠性(例如,画面质量)。这就是UDP 和TCP 两种协议的权衡之处。根据不同的环境和特点,两种传输协议都将在今后的网络世界中发挥更加重要的作用。

6.常用协议及端口

UDP 和TCP 协议使用端口号为不同的应用保留其各自的数据传输通道,由于使用这一机制实现了对同一时刻内多项应用同时发送和接收数据的支持。

数据发送方(可以是客户端或服务器端)将UDP 数据报通过源端口发送出去,而数据接收方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口,而另外一些网络应用则可以使用未被注册的动态端口。因为UDP 报头使用两个字节存放端口号,所以端口号的有效范围是从0~65 535。一般来说,大于49 151 的端口号都代表动态端口。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈