udp数据包

时间:2024-05-06 16:59:38编辑:coo君

什么是UDP格式啊?

网络协议的一种. 用户数据报协议(UDP)
UDP是使用IP协议在计算机数据交换时提供一定服务的通信协议。UDP是TCP的另外一种方法,象TCP一样,UDP使用IP协议来获得数据单元(叫做数据报),不象TCP的是,它不提供包(数据报)的分组和组装服务。

而且,它还不提供对包的排序,这意味着,程序程序必须自己确定信息是否完全地正确地到达目的地。如果网络程序要加快处理速度,那使用UPD就比TCP 要好。

TFTP就使用UDP而不使用TCP。UDP提供两种不由IP层提供的服务,它提供端口号来区别不同用户的请求,而且可以提供奇偶校验。在OSI模式中,UDP和TCP一样处于第四层,传输层。
UDP不是面向连接的,仅做简单的传输

UDP是TCP/IP的子协议,只要安装TCP/IP就可以了
下面的链接有详尽的图表介绍
http://www.cnpaf.net/Class/wlxy/0551120320849952683.htm


请问UDP数据包是什么?

UDP数据包和TCP数据包一样,是一种网络协议的数据包!
UDP数据包具有较强的网络穿透能力,可以用于网络环境相对复杂的场合进行网络通信。其代表软件就是腾讯QQ
UDP数据包的缺点在与他不会像TCP包那样,发送出去后会等待接受方的验证是否收到,数据包是否合法。这样就造成UDP数据包相对TCP数据包更容易出现数据包丢失的情况。
如果对一台主机发送大量的UDP数据包,就会造成DoS攻击。现在从各个厂商的硬件防火墙来看,能够实现这种攻击的只有UDP数据包。TCP和SYN数据包大多会被拦截,无法形成攻击。


UDP数据包是什么?

UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。


为什么要使用UDP

在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和OICQ就是使用的UDP协议。

在Java中操纵UDP

使用位于JDK中Java.net包下的DatagramSocket和DatagramPacket类,可以非常方便地控制用户数据报文。

在描述它们之前,必须了解位于同一个位置的InetAddress类。InetAddress实现了Java.io. Serializable接口,不允许继承。它用于描述和包装一个Internet IP地址,通过三个方法返回InetAddress实例:

getLocalhost():返回封装本地地址的实例。

getAllByName(String host):返回封装Host地址的InetAddress实例数组。

getByName(String host):返回一个封装Host地址的实例。其中,Host可以是域名或者是一个合法的IP地址。

DatagramSocket类用于创建接收和发送UDP的Socket实例。和Socket类依赖SocketImpl类一样,DatagramSocket类的实现也依靠专门为它设计的DatagramScoketImplFactory类。DatagramSocket类有3个构建器:

DatagramSocket():创建实例。这是个比较特殊的用法,通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。

DatagramSocket(int port):创建实例,并固定监听Port端口的报文。

DatagramSocket(int port, InetAddress localAddr):这是个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,由它创建的实例仅仅接收来自LocalAddr的报文。

值得注意的是,在创建DatagramSocket类实例时,如果端口已经被使用,会产生一个SocketException的异常抛出,并导致程序非法终止,这个异常应该注意捕获。DatagramSocket类最主要的方法有4个:

Receive(DatagramPacket d):接收数据报文到d中。receive方法产生一个“阻塞”。

Send(DatagramPacket d):发送报文d到目的地。

SetSoTimeout(int timeout):设置超时时间,单位为毫秒。

Close():关闭DatagramSocket。在应用程序退出的时候,通常会主动释放资源,关闭Socket,但是由于异常地退出可能造成资源无法回收。所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。

“阻塞”是一个专业名词,它会产生一个内部循环,使程序暂停在这个地方,直到一个条件触发。

DatagramPacket类用于处理报文,它将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。应用程序在产生数据包是应该注意,TCP/IP规定数据报文大小最多包含65507个,通常主机接收548个字节,但大多数平台能够支持8192字节大小的报文。DatagramPacket类的构建器共有4个:

DatagramPacket(byte[] buf, int length, InetAddress addr, int port):从Buf数组中,取出Length长的数据创建数据包对象,目标是Addr地址,Port端口。

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):从Buf数组中,取出Offset开始的、Length长的数据创建数据包对象,目标是Addr地址,Port端口。

DatagramPacket(byte[] buf, int offset, int length):将数据包中从Offset开始、Length长的数据装进Buf数组。

DatagramPacket(byte[] buf, int length):将数据包中Length长的数据装进Buf数组。

DatagramPacket类最重要的方法就是getData()了,它从实例中取得报文的Byte数组编码。

★简单的实例说明

{接收数据的服务器}

byte[] buf = new byte[1000];

DatagramSocket ds = new DatagramSocket(12345);

//开始监视12345端口

DatagramPacket ip = new DatagramPacket(buf, buf.length);

//创建接收数据报的实例

while (true)

{

ds.receive(ip);

//阻塞,直到收到数据报后将数据装入IP中

System.out.println(new String(buf));

}

{发送数据的客户端}

InetAddress target = InetAddress.getByName("www.xxx.com");

//得到目标机器的地址实例

DatagramSocket ds = new DatagramSocket(9999);

//从9999端口发送数据报

String hello = "Hello, I am come in!";

//要发送的数据

byte[] buf = hello.getBytes();

//将数据转换成Byte类型

op = new DatagramPacket(buf, buf.length, target, 12345);

//将BUF缓冲区中的数据打包

ds.send(op);

//发送数据

ds.close();

//关闭连接


如何利用UDP协议封装一个数据包

在如何封装一个数据包上,是一个非常细致的问题,而利用UDP协议来封装的话,是比较简单,让我们一步步来分析典型的TCP/IP协议。一般来说一个典型的一个数据包,包括以太网MAC头+网络层IP数据头+传输层UDP头+要传输的数据。让我们一层层来看看这些数据头是如何构成的。1、以太网MAC头  一般情况下,以太网MAC头由14个字节构成,12个自己的MAC地址+上层协议的标识符。举个例子  如果你要发送的目标MAC位00:1d:09:10:d1:9c,而你的MAC地址为01:60:6e:11:02:0f,上层一般都是网络层,即为IP层,IP层的标识符为0x8000,那么你的以太网MAC头就为  00 1d 09 10 d1 9c 01 60 6e 11 02 0f 80 00.  8字节的前导用于帧同步,CRC域用于帧校验。这些用户不必关心其由网卡芯片自动添加。目的地址和源地址是指网卡的物理地址,即MAC地址,具有唯一性。帧类型或协议类型是指数据包的高级协议,如 0x0806表示ARP协议,0x0800表示IP协议等。  2、网络层IP头  0x45, 0x00, IPlenght_h, IPlenght_l,  0x00, 0x00, 0x00, 0x00, 0x80, 0x11,  IPchecksum4, IPchecksum5,  IPsource_1, IPsource_2, IPsource_3, IPsource_4,IPdestination_1, IPdestination_2, IPdestination_3, IPdestination_4  上面是一个简单的ip头的例子,下面一个个的来解释啊!  0x45,其中的高位0x4,表示的是版本号,ipv4的意思,而后面低字节5表示的是指明IPv4协议包头长度的字节数包含多少个32位,这里是5,也就是说协议头是5*4=20个字节的大小。  0x00,定义IP封包在传送过程中要求的服务类型,如果所有4bit均为0,那么就意味着是一般服务,具体如下:    ◆000..... (Routine): 过程字段,占3位。设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)    ◆...0....(Delay):延迟字段 ,占1位,取值:0(正常)、1(期特低的延迟)     ◆....0...(Throughput):流量字段,占1位。取值:0(正常)、1(期特高的流量)     ◆.....0..(Reliability) :可靠性字段,占1位。取值:0(正常)、1(期特高的可靠性)    ◆…..0.(ECN-Capable Transport):显式拥塞指示传输字段,占1位。由源端设置,以显示源端节点的传输协议是支持ECN(Explicit Cogestion Notifica tion,显式拥塞指示)的。取值:0(不支持ECN)、1(支持ECN)    ◆.......0(Congestion Experienced):拥塞预警字段,占1位。取值:0(正常,不拥塞)、1(拥塞)  IPlenght_h, IPlenght_l,表示的是包总长度=IP头长度+UDP头长度+数据长度,最后讲长度分为高8位和低8位。  0x00, 0x00,是上面的标志位,16个字节。每一个IP封包都有一个16位的唯一识别码。当程序产生的数据要通过网络传送时都会被拆散成封包形式发送,当封包要进行重组的时候这个ID就是依据了。  0x00, 0x00这16位是由两部分组成,包括3bit的标记位和13bit的分段偏移量。    这是当封包在传输过程中进行最佳组合时使用的3个bit的识别记号。占3位。    ◆000(Reserved Fragment):保留分段。当此值为0的时候表示目前未被使用。    ◆.0.(Don't Fragment):不分段。当此值为0的时候表示封包可以被分段,如果为1则不能被分割。     ◆..0( More Fragment):更多分段。当上一个值为0时,此值为0就示该封包是最後一个封包,如果为1则表示其後还有被分割的封包。    IP协议头格式规定当封包被分段之后,由于网路情况或其它因素影响其抵达顺序不会和当初切割顺序一至,所以当封包进行分段的时候会为各片段做好定位记录,以便在重组的时候就能够    对号入座。值为多少个字节,如果封包并没有被分段,则FO值为“0"。 占13位。   0x80表示生存时间。生存时间字段设置了数据报可以经过的最多路由器数,表示数据包在网络上生存多久。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP消息通知源主机。这样当封包在传递过程中由於某些原因而未能抵达目的地的时候就可以避免其一直充斥在网路上面。占8位。  0x11表示的是传输层的协议。如下表所示:IPchecksum4, IPchecksum5这两个是头校验和的高8位和低8位。  指IPv4数据报包头的校验和。这个数值用来检错用的,用以确保封包被正确无误的接收到。当封包开始进行传送后,接收端主机会利用这个检验值会来检验余下的封包,如果一切无误就会发出确认信息表示接收正常。与UDP和TCP协议包头中的校验和作用是一样的。占16位。  首部检验和字段是根据IP首部计算的检验和码,不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP协议在它们各自的首部中均含有同时覆盖首部和数据检验和码。  IP协议头格式规定了:计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16位进行二进制反码求和(整个首部看成是由一串16位的字组成),结果存在检验和字段中。当接收端收到一份IP数据报后,同样对首部中每个16 位进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错消息,由上层去发现丢失的数据报并进行重传。  ICMP、IGMP、UDP和TCP都采用相同的检验和算法,尽管TCP和UDP除了本身的首部和数据外,在IP首部中还包含不同的字段。由于路由器经常只修改TTL字段(减1),因此当路由器转发一份消息时可以增加它的检验和,而不需要对IP整个首部进行重新计算。   IPsource_1, IPsource_2, IPsource_3, IPsource_4,IPdestination_1, IPdestination_2, IPdestination_3, IPdestination_4这两个就表示了源IP和目标IP。3、UDP数据头0x04, 0x00,0x04, 0x00, lenght_h, lenght_l, 0x00, 0x00     0x04, 0x00表示的是UDP的源端口,这里为1024;  0x04, 0x00表示的是UDP的目标端口,这里为1024;  lenght_h, lenght_l,为整个数据包的长度,包括MAC头+ip头+UDP头+校验位。  0x00, 0x00这些是UDP协议的选项和填充位。  这两个选项较少使用,只有某些特殊的封包需要特定的控制才会利用到。这些选项通常包括:  ◆安全和处理限制:用于军事领域  ◆记录路径:让每个路由器都记下它的IP地址  ◆时间戳:让每个路由器都记下它的IP地址和时间  ◆宽松的源站选路:为数据报指定一系列必须经过的IP地址  ◆严格的源站选路:与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址。  以上这些选项很少被使用,而且并非所有的主机和路由器都支持这些选项。

IP数据包 tcp数据报 udp数据报三者有什么区别和联系? 能否解释详细点

1、
IP数据包包含 tcp数据包 udp数据包,IP是第三层(网络层)的协议,TCP与UDP都属于第四层(传输层)的协议。

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
2、关键点区分:
A。基于连接与无连接
B。对系统资源的要求(TCP较多,UDP少)
C。UDP程序结构较简单
D。流模式与数据报模式
E。TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证
3、
TCP发送的包有序号,对方收到包后要给一个反馈,如果超过一定时间还没收到反馈就自动执行超时重发,因此TCP最大的优点是可靠。一般网页(http)、邮件(SMTP)、远程连接(Telnet)、文件(FTP)传送就用TCP
UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,一般用于多点通信和实时的数据业务,比如语音广播、视频、QQ、TFTP(简单文件传送)、SNMP(简单网络管理协议)、RTP(实时传送协议)RIP(路由信息协议,如报告股票市场,航空信息)、DNS(域名解释)。注重速度流畅。

要了解TCP,一定要知道【三次握手,四次拜拜】,上网一搜就知道了 ,而所谓的三次握手,就是发送数据前必须建立的连接叫三次握手,握手完了才开始发的,这也就是面向连接的意思。


UDP数据包

防火墙提示系统被攻击
常见的个人防火墙程序所谓的“攻击”并不一定是真正的网络攻击,很多防火墙程序会将网络广播等最常见的网络访问当作攻击来提示我们并记录下来(局域网内此类的提示尤其多)。另外的“攻击”则可能是有人在扫描你计算机的端口,或者是其他人中了病毒,病毒在利用染毒的计算机扫描网络上的其他电脑。
一般这种情况,只要你定期更新了系统补丁,这些所谓的“攻击”一般是不会造成任何威胁的。
个人认为防火墙程序的这种提示也是一种变相的“广告”而已--你看我多么地有用啊,功能多强大!网络上有这么多的攻击,我都替你拦截了,用我是没有错的!--要真有了攻击,它告诉你没有拦截住,你还会用它吗?我估计你是会马上换防火墙了,对吧?


上一篇:旧手机回收网

下一篇:2012图片