码迷,mamicode.com
首页 > 其他好文 > 详细

TCP、UDP原理及比较

时间:2014-11-02 23:54:51      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   使用   java   sp   strong   文件   数据   

TCP、UDP基础知识

  TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送,可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP对应的则是可靠性要求低,传输经济的应用。TCP支持的应用层协议主要有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。

面向连接的TCP

  "面向连接"就是在正式通信前必须与对方建立连接。比如你给别人打电话,必须等线路接通了,对方拿起话筒才能相互通话。TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次"对话"才能建立起来,其中的过程非常复杂,这里只做简单、形象的介绍,只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:"我想给你发送数据,可以吗?",这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:"可以,你什么时候?",这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:"我现在就发,你接着吧!",这是第三次对话。三次"对话"的目的是使数据包的发送和接收同步,进过三次"对话"之后,主机A才向主机B正式发送数据。

面向非连接的UDP

  "面向非连接"就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。与手机短信非常相似:你在发短信的时候,只需要输入对方号码就OK了。

  UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过来!

  UDP适用于一次只传少量数据,对可靠性要求不高的应用环境。比如,经常使用"ping"命令来测试两台主机之间TCP/IP通信是否正常,其实"ping"命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

TCP与UDP区别

  

  TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠的 不可靠的
应用场合 传输大量的数据 少量数据
速度

Java中实现TCP和UDP

  在Java的API中,Socket是连接套接字,Java分别为TCP和UDP提供了相应的类,TCP是java.net.ServerSocket(用于服务器端)和java.net.Socket(用于客户端);UDP是java.net.DatagramSocket。在API明显的区别是:UDP的Socket编程是不提供监听功能的,也就是双方更为平等,面对的接口是完全一样的。但是为了用于UDP实现C/S结构,在使用UDP时可以使用DatagramSocket.receive()来实现类似于监听的功能。因为receive()是阻塞的函数,即等待数据接收,如果没有收到数据就会进入等待状态,程序停在receive()函数这里,如果接收数据,程序就会继续执行。因而可以根据读入的数据报来决定下一步的动作,这就达到了跟网络监听相似的效果。

  UDP不连接就send()和receive(),TCP需要获得一个OutputStream和InputStream才能读写,在获得流时就等于在建立连接。

  在DatagramSocket方法中有connect(SocketAddress addr)和disconnect()。

  • connect()方法实际不建立TCP意义上的连接。这里连接只是将DatagramSocket指定远程主机和远程端口发包。此时试图向另外的主机和端口发包将会抛出异常IllegalArgumentException异常。
  • disconnect():中止已连接DatagramSocket的"连接",这样可以再次收发任何主机和端口的包。

TCP、UDP原理及比较

标签:style   io   ar   使用   java   sp   strong   文件   数据   

原文地址:http://www.cnblogs.com/chuji1988/p/4070081.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!