TCP/IP协议族为运输层指明了两个协议:TCP和UDP。它们都是作为应同程序和网络 *** 作的中介物。
运输层协议通常具有几种责任。一种是创建进程到进程的通信;UDP和TCP使用端口来完成这种通信。另一种责任就是在运输层提供控制机制。UDP在一个非常低的水平上完成这个功能。UDP没有流量控制机制,在收到分组时也没有确认。但是,UDP提供了某种程度的差错控制。如果UDP检测出在收到的分组中有差错,它就悄悄地丢弃这个分组。而TCP使用滑动窗口协议来完成流量控制。TCP使用确认分组,超时和重传来完成差错控制。
运输层还应负责为应用程序提供连接机制。这些应用程序应当能够向运输曾发送数据流。在发送站运输层分责任是和接收站建立连接,把数据流分割成可运输地单元,把它们编号,然后逐个发送它们。运输层在接收端的责任是等待属于同一个进程的所有不同单元的到达,检查并放过那些没有差错的单元,并以流的方式把它们交付给接收进程。当全部的流都发送完毕后,运输层应当关闭这个连接TCP完成所有上面的工作,而UDP不完成!
UDP叫做无连接的、不可靠的运输协议。TCP叫做面向连接的、可靠的运输协议,它给IP服务提供了面向连接和可靠性的特点。
TCP/IP协议族为运输层指明了两个协议:TCP和UDP。它们都是作为应同程序和网络 *** 作的中介物。
运输层协议通常具有几种责任。一种是创建进程到进程的通信;UDP和TCP使用端口来完成这种通信。另一种责任就是在运输层提供控制机制。UDP在一个非常低的水平上完成这个功能。UDP没有流量控制机制,在收到分组时也没有确认。但是,UDP提供了某种程度的差错控制。如果UDP检测出在收到的分组中有差错,它就悄悄地丢弃这个分组。而TCP使用滑动窗口协议来完成流量控制。TCP使用确认分组,超时和重传来完成差错控制。
运输层还应负责为应用程序提供连接机制。这些应用程序应当能够向运输曾发送数据流。在发送站运输层分责任是和接收站建立连接,把数据流分割成可运输地单元,把它们编号,然后逐个发送它们。运输层在接收端的责任是等待属于同一个进程的所有不同单元的到达,检查并放过那些没有差错的单元,并以流的方式把它们交付给接收进程。当全部的流都发送完毕后,运输层应当关闭这个连接TCP完成所有上面的工作,而UDP不完成!
UDP叫做无连接的、不可靠的运输协议。TCP叫做面向连接的、可靠的运输协议,它给IP服务提供了面向连接和可靠性的特点。
UDP分组叫做用户数据报。有8个字节的固定首部,源端口号、目的端口号、长度和检验和各2个字节。
UDP长度
=
IP长度
-
IP首部长度
下面是UDP的某些用途:
UDP适用于这样的进程,它需要简单的请求-响应通信,而较少考虑流量控制和差错控制。对于需要传送成块数据的进程,如FTP,通常不使用UDP。
UDP适用于具有内部流量控制和差错控制机制的进程。例如,简单文本传送协议(TFTP)的进程就包括流量控制和差错控制。它能够很容易地使用UDP。
对多播和广播来说,UDP是个合适的运输协议。多播和广播能力已经嵌入在UDP软件中,但没有嵌入在TCP软件中。
UDP可用于管理进程,如SNMP
UDP可用于某些路由选择更新协议,如路由信息协议(RIP)
1、TCP要求系统资源较多,UDP较少。
2、UDP程序结构较简单。
3、流模式(TCP)与数据报模式(UDP)。
4、TCP保证数据正确性,UDP可能丢包。
5、TCP保证数据顺序,UDP不保证。
6、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
7、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
总之,TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议。
网络是由节点和连线构成,表示诸多对象及其相互联系。在数学上,网络是一种图,一般认为专指加权图。网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型。
在计算机领域中,网络是信息传输、接收、共享的虚拟平台,通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。网络是人类发展史来最重要的发明,提高了科技和人类社会的发展。
网络会借助文字阅读、查看、影音播放、下载传输、游戏、聊天等软件工具从文字、、声音、视频等方面给人们带来极其丰富的生活和美好的享受。
传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol)。
为了简化问题说明,本课程以Telnet为例描述相关技术。设备支持通过Telnet协议和Stelnet协议登录。使用Telnet,Stelnet v1协议存在安全风险,建议你使用STelnet v2登录设备。
为了简化问题说明,本课程以FTP为例来描述相关技术。设备支持通过FTP协议,TFTP以及SFTP传输文件。使用FTP,TFTP,SFTP v1协议存在风险,建议使用SFTP v2方式进行文件 *** 作。
TCP是一种面向连接的传输层协议,提供可靠的传输服务。
TCP是一种面向连接的端到端协议。TCP作为传输控制协议,可以为主机提供可靠的数据传输。TCP需要依赖网络协议为主机提供可用的传输路径。
TCP允许一个主机同事运行多个应用进程。每台主机可以拥有多个应用端口,没对端口号,源和目标IP地址的组合唯一地标识了一个会话。端口分为知名端口和动态端口。有些网络服务会使用固定的端口,这类端口称为知名端口,端口号范围为 0~1023 。
比如:FTP,>
摘 要本文介绍了UDP Sockets的基本概念和IP多点传送的原理 详细讨论了Java中的相关类及使用方法 提供了一个IP多点传送的开发流程 关键词Java UDP Sockets
一 IP多点传送IP多点传送(multicast delivery)是针对点到点的传送和广播传送两种方式而言的 它是指在一定的组内对其成员进行的广播 是一种有限的广播 组中的某个成员发出的信息 组中的其它所有成员都能收到 它是UDP Sockets的一个分支 IP多点传送特别适合与高带宽的应用 例如在网络上发送视频和音频 随着网络带宽的不断提高和网络通讯质量的不断改善 IP多点传送还将广泛地被应用于网上聊天及网上会议 分布式数据存储 联机事务处理 交互式游戏等方面 另外 多点传送还可以被客户机用于在网络上寻找相应的服务器 客户机发送一个多点传送的请求 任何监听服务器都可以与客户机连接并开始一个事务
二 UDP Socket基础 使用用户数据报协议(User Datagram Protocol 简称UDP)进行会话必须将信息装配成一定尺寸的小报文 当发送一条信息 接收方能否收到并返回信息永远是不确定的 如果无法收到返回信息 我们就无法确定我们发送的信息是否被接收——它可能在途中丢失 接收者返回的响应信息也可能丢失 另外 接收者也可能忽略我们的信息 因此 UDP被描述为不可靠的 无连接的和面向消息的 创建UDP sockets非常象创建一个邮箱 邮箱是使用地址来识别的 但是 我们不需要为每个发送信息的人构造一个新的邮箱 可以在含有发送信息的明信片上写上目的地址 将其放在邮箱中并发送出去 接收者可能会长久的等待 直到含有信息的明信片到达它的邮箱 而明信片上标识了发送者的返回地址
三 IP多点传送的原理 为了支持IP多点传送 某些范围的IP地址被单独留出专门用于这个目的 这些IP地址是D类地址 其地址的最高四比特的位模式为 即IP地址的范围在 和 之间 它们中的每一个IP地址都可以被引用作为一个多点传送组 任何以该IP地址编址的IP报文将被该组中的其它所有机器接收 也就是说 一个IP地址就相当于一个邮箱 另外 组中的成员是动态的并随时间而改变 对于IP多点传送 网间网组管理协议(Internet Group Management Protocol 简称IGMP) 用于管理多点传送组中的成员 支持多点传送的路由可以使用IGMP决定本地的机器是否赞成加入某个组 一个多点传送路由可以决定是否转发一个多点传送报文 影响多点传送报文的一个重要参数是time-to-live(TTL) TTL用于描述发送者希望传送的信息能通过多少不同的网络 当报文被路由器转发 报文中的TTL将减一 当TTL为零时 报文将不再向前发送 在实际使用中 我们必须注意下面几点 这些IP地址只能作为信宿地址使用 绝对不能出现在任何信源地址域中 也不能出现在源路径或记录路径选项中 由于IP多点传送是一对多的传送 因此 不能利用差错与控制报文协议(Internet Control Message Protocol 简称ICMP)产生出错报文 发送一个信息到一个组 发送主机可以不是组中的成员 一些组被Internet Assigned Numbers Authority(IANA)分配 保留用于特殊的目的 详情参见 ftp://ftp internic net/rfc/rfc txt 另外 避免使用一些保留组 从 到 仅限于本地子网使用 建议在 和 之间任意选取一个IP地址 如果我们选取的组已经被使用 与其他机器的通讯将会混乱 一旦发生 可以退出应用 试试其他的地址 当一个机器加入一个多点传送组 它将开始接收该IP多点传送地址的信息 如果多点传送报文分发到网络上 任何监听该信息的机器都会有机会接收它 对于IP多点传送 没有一个机制对相同网络上的机器能否加入该多点传送组加以限制 因此 安全性是我们必须考虑的问题之一 选择的TTL参数应尽可能小 一个大的TTL值会不必要地占用Internet带宽 此外 还可能破坏不同区域使用相同组的其它的多点传送通讯
四 Java中与IP多点传送相关的类 java net包中含有UDP通讯所需要的工具 其中包括IP多点传送
1 DatagramPacket类 我们可以使用DatagramPacket类创建一个用于发送的数据报 而当接收UDP数据报时 可以使用DatagramPacket类读取数据报中的数据 发送者及其它信息 为了创建一个数据报并发送到远地系统 可以使用下面的构造器 Public DatagramPacket(byte ibuf int length InetAddress iaddr int iport ); ibuf是编码信息数据的字节数组 它的长度length就是数据报放在其中的字节数组的长度 iaddr是一个InetAddress对象 存储著接收方的主机名和IP地址等信息 iport标识数据报发送到接收主机的端口 为了接收数据报 必须使用DatagramPacket构造器 其原型为 public DatagramPacket(byte ibuf int ilength);ibuf是指接收的数据报的数据部分 ilength是该部分数据的长度 如果 ilength 小于机器接收的UDP数据报的尺寸 多余的字节将被Java忽略 另外 类中有一些方法(method)可以让我们得到一些相关的信息 public int getLength(); //得到数据报中数据块的字节尺寸 public bytegetData();//得到接收数据报中的数据 public InetAddress getAddress(); //为发送者提供一个 InetAddress对象 public int getPort(); //得到UDP端口 值得注意的是 TCP sockets的编程中 我们无须将传送的数据分块 然而 当我们创建一个基于UDP的网络通讯应用程序时 必须创建一套方法 在运行时刻决定需分割的数据报的长度 对于TCP/IP 最大的数据报可以含有 字节的数据 然而 主机仅能接收最多 字节的数据 支持 字节的大数据报的平台是利用IP层对数据报进行分割的 如果在传送期间 任何含有IP报文的一个数据块丢失 都会造成整个UDP数据报的丢失 因此 我们在确定应用中数据报尺寸时 对其尺寸的合理性一定要谨慎 下面就是分割数据的一个例子 //循环地从输入流input中读一行数据 while((nextLine=input readLine())!=null){ //定义一个空数据报 其尺寸为 mcastBuffer=new byte[ ]; //如果读入的数据的长度大于定义的数据报的长度 //则使用定义的长度 否则使用读入数据的长度 if(nextLine length()>mcastBuffer length){ sendLength=mcastBuffer length; }else { sendLenth=nextLine length(); } //将读入的数据转换为byte类型 lineData=nextLine getBytes(); //将数据复制到用于创建数据报的byte数组 for(int i= ;i mcastBuffer[i]=lineData[i]; } ……创建数据报 发送或接收…… }
2 MulticastSocket类 Java的 MulticastSocket类是实施IP多点传送网络特征的关键 它允许我们使用多点传送IP发送或接收UDP数据报 MulticastSocket的构造器为 public MulticastSocket () throws IOException;//创建一个多点传送socket public MulticastSocket(int port)throws IOException;//在指定端口创建一个多点传送socket 另外 类中其它常用的方法有 public void joinGroup(InetAddress mcastaddr)throws IOException{} //加入多点传送组 public void leaveGroup(InetAddress mcastaddr)throws IOException{} //离开多点传送组 public synchronized void send(DatagramPacket p byte ttl) throws IOException{}//发送数据报 public synchronized void receive(DatagramPacket p byte ttl) throws IOException{} //接收数据报 创建一个DatagramPacket对象之后 我们必须相应地创建一个 MulticastSocket对象 这样 数据报就可以使用send()方法发送了 下面的代码演示了如何创建 MulticastSocket 发送和接收IP多点传送数据报 int multiPort= ; //定义端口号 非超级用户应使用 以上的端口 int ttl= ; //设定TTL值 InetAddress multiAddr=InetAddress getByName(″ ″)//设定多点传送IP byteSmultiBytes={ H e O }; //定义一个内容为 Hello 的数据报 //创建多点传送数据报 DatagramPacket SmultiDatagram new Datagram Packet(SmultiBytes SmultiBytes length multiAddr multiPort); MulticastSocket multiSocket=new MulticastSocket();//创建多点传送socket multiSocket send(SmultiDatagram ttl)//发送数据报(不加入到组中) …… byteRmultiBytes=new byte[ ]; //定义一个空数据报 长度为 字节 //创建接收数据报 DatagramPacket RmultiDatagram=new DatagramPacket(RmultiBytes RmultiBytes length); multiSocket joinGroup(multiAddr); //加入到多点传送组中 multiSocket receive(RmultiDatagram);//接收UDP数据报
…… multiSocket leaveGroup(multiAddr); //离开多点传送组 multiSocket close();//关闭多点传送 socket 当调用joinGroup()方法时 机器将关注沿着网络传送属于特定多点传送组的任何IP报文 也就是说 机器拥有了一个邮箱 主机还应使用IGMP相应地报告组的使用 对于多IP地址的机器 应配置数据报发送的接口 setInterface(oneOfMyLocalAddrs); 在DatagramSocket中没有类似 setSo Timeout()的方法设置超时
五 IP多点传送应用程序的开发流程 由于IP多点传送主要用于同组中成员的交流 因此 应用程序的开发流程大体如下 创建一个需发送的按规定编址的数据报DatagramPacket; 建立一个用于发送和接收的MulticastSocket; 加入一个多点传送组 将数据报放入MulticastSocket中传送出去 等待从MulticastSocket接收数据报 解码数据报提取信息 根据得到的信息作出回应 重复 — 步 离开该多点传送组 关闭MulticastSocket
lishixinzhi/Article/program/Java/hx/201311/27230
UDP(用户数据报协议)是一种面向无连接的传输协议,不像TCP(传输控制协议)那样具有可靠性和流量控制功能。UDP没有默认的程序来处理它的通信。UDP消息是在应用程序中直接发送和接收的,因此,如果应用程序需要使用UDP通信,那么就需要直接对UDP进行编程,使用相关的UDP API进行通信,例如BSD sockets、Winsock、Java sockets等。因此,UDP通信需要通过应用程序实现,无法在 *** 作系统中通过默认程序进行处理。
以上就是关于udp 协议 如何实现 局域网 一对多的通信他们对应的原理是什么腾讯qq 是用tcp还是udp求教高手详解谢谢全部的内容,包括:udp 协议 如何实现 局域网 一对多的通信他们对应的原理是什么腾讯qq 是用tcp还是udp求教高手详解谢谢、传输层(TCP,UDP)、TCP和UDP分别指的是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)