Java网络编程之传输控制协议 - 编程入门网
Java网络编程之传输控制协议时间:2010-12-16 天极 陶刚传输控制协议是一种基于流的网络通讯方法,它与其它的任何协议都有很大 的不同。本文讨论TCP流以及在Java中怎样操作它。 一、概述 TCP提供的网络通讯接口与用户数据报协议(UDP)截然不同。TCP的特性使网 络编程很具魅力,而且它删除了UDP的很多干扰部分(例如数据包的排序和丢失 ),简化了网络通讯。UDP关心的是数据包的传输,而TCP关注的是建立网络连接 ,并在网络连接中发送和接收字节流。 数据包可以通过网络用多种方法发送,并且它们到达的时间可能不同。这有 利于性能的提高和程序的健壮性,因为单个包的丢失不一定干扰其它包的传输。 但是,这样的系统使程序员必须作更多的工作,他们必须保证数据的送达 (delivery)。TCP通过对发送和次序的保证消除了这些额外的工作,为客户端 和支持两路(two-way)通讯的服务器之间提供了可靠的字节通讯流。它在两台 计算机之间建立了"虚拟连接",可以通过虚拟连接发送数据流。 图1:TCP建立虚拟连接传输数据 TCP使用更低层的(lower-level)的IP通讯协议在两台计算机之间建立连接 。这种连接提供了一个允许字节流发送和接收的接口,并且采用透明的方式把数 据转换为IP数据报。数据报(datagram)的问题之一是不能保证数据包到达目的 地。TCP解决了这个问题,它提供了有保证的数据字节的送达。当然,网络错误 影响了送达也是可能的,但是TCP通过类似重新发送数据包解决了这种实现的问 题,并且只在情况很严重(例如没有到网络主机的路由或连接丢失了)的时候才 提醒程序员。 两台计算机之间的虚拟连接表现为套接字(socket)。套接字允许数据的发 送和接收,但是UDP套接字和TCP套接字之间有本质的区别。首先TCP套接字连接 到单个计算机,然而UDP套接字可以向多台计算机传输或接收数据;其次,UDP套 接字只能发送和接收数据包,然而TCP允许通过字节流的数据传输(表现为输入 流(InputStream)和输出流(OutputStream))。为了在网络上传输,它们被 转换为数据包,不需要程序员干涉(如图2所示)。 图2:TCP把数据流处理为协议的命令,但是 为在网络上传输把流转换为IP数据报 1、UDP(用户数据报协议)上的TCP 的优点 ⑴自动化地错误控制 TCP流上的数据传输比通过UDP的信息 包的传输更可靠。在TCP下层,通过虚拟连接发送的数据包括一个检查机制以确 保它们没有被破坏(与UDP类似)。但是,TCP保证了数据的送达--在传输过程中 丢失的数据包将被重新传输。 你也许想知道这是如何实现的--实际上, IP和UDP不保证送达,当数据包丢失的时候它们也不会发出任何警告。在TCP使用 数据包发送了某个数据集合的时候就会启动一个计时器。在UDP中,我们使用 DatagramSocket.setSoTimeout为receive()操作启动一个计时器。在TCP中,如 果接收者发送一个肯定的应答就禁止计时器,但是如果在超时前还没有收到肯定 的应答,数据包就被重新传输。这意味着写入某个TCP套接字的任何数据将到达 另一方而不需要程序员的进一步干涉(除非发生大的事故造成整个网络瘫痪)。 错误控制的代码都由TCP处理了。 ⑵可靠性 因为在TCP连接中有多 方参与的两台计算机之间发送的数据通过IP数据报传输,数据包到达的次序可能 经常出现不同。这可能需要使用一个循环从TCP套接字读取信息,因为字节流的 次序可能被打乱并且频繁遇到不可靠的问题。幸运的是,次序等问题已经被TCP 处理好了--每一个数据包都包含一个用于排序的序列号。后发送、先到达的数据 包将保持在一个队列中,直到排好次序的数据可以使用为止。接着数据就可以通 过套接字的接口传递到应用程序中。 ⑶易于使用 尽管把信息存储 为数据包的确没有超越程序员的范围,但这不 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |