特点:
1.面向无连接的协议;
2.UDP报头只有8字节。
简介:
1.传输数据前源端和终端不需要连接,当它传送数据时简单地去抓取来自应用程序的数据,并尽可能快的把它。换句话说就是,客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。
2.在发送端,UDP传送数据的速度仅仅受程序生成数据的速度、计算机能力和传输带宽的限制。
3.在接收端,UDP把每个消息放到队列中,应用程序每次从队列中读取一个消息段。
4.由于传输数据不需要建立连接,因此也就不用维护连接状态,包括收发状态等,因此一台服务器可以同时向多个客户机传输相同的消息。
5.UDP包的标题很短,只有8个字节,相对于TCP的20个字节信息包额外的开销小很多。
6.吞吐量不受拥挤算法的调节,只受应用程序生成数据的速度、传输带宽、源端和终端性能的限制。
7.UDP使用尽最大努力交付,即不保证可靠交付,所以主机不需要维护复杂的连接状态表。
8.UDP是面向报文的。发送方的UDP对应用程序交下来的报文,添加了首部后直接交给下层的IP层,既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
优点:
1.传输速率快,不需要像TCP一样建立连接,传送数据时没有确认、重传、拥塞控制等机制。
2.较安全,由于没有TCP的一些机制,被攻击的漏洞少。
缺点:
1.不可靠,不稳定,由于没有TCP的机制,在传送数据时,如果网络不好,容易出现丢包的情况。
用UDP协议通讯时怎样得知目标机是否获得了数据包?
伪造TCP的做法,每发一个UDP包时,都在里面加入一个seq序号,接收方接收到包后,将seq回复给发送方。如果在发送方指定的时间内没有收到回应,说明丢包了。
TCP与UDP的区别
TCP | UDP |
---|---|
TCP面向有连接的通信服务 | UDP非面向连接的通信服务 |
TCP提供可靠的通信传输 | UDP提供不可靠的通信传输,会丢包 |
TCP保证数据顺序 | UDP不保证 |
TCP数据无边界 | UDP有边界 |
TCP速度慢 | UDP速度快 |
TCP面向字节流 | UDP面向报文 |
TCP一对一 | UDP可以一对一,可一对多 |
TCP报文头至少20个字节 | UDP报文头8个字节 |
TCP有流量控制、拥塞控制 | UDP没有 |
问题:
为什么UDP比TCP快
1.TCP需要三次握手连接;
2.TCP有流量控制、拥塞控制。为什么TCP比UDP可靠
1.TCP是面向连接,建立连接后才发送数据;而UDP则不管对方存不存在都会发送数据。
2.TCP有确认机制,接收端每收到一个正确包都会回应给发送端;超时或者数据包不完整的时候发送端会重传。UDP没有,因此容易丢包。什么时候使用TCP
当对网络通讯质量有要求的时候。比如:把整个数据完整无误的发送给对方,这往往用于一些要求可靠的应用,如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输协议。在日常生活中,常见的TCP协议的应用有:浏览器、用HTTP的FlashFXP,用FTP的OutLook,用POP、SMTP 的Putty,用Telnet、SSH的QQ文件传输。什么时候应该使用UDP
当对网络通讯质量要求不高的时候,要求网络通信速度尽量快,这时用UDP。日常常见的使用UDP协议的应用:QQ语音,QQ视频,TFTP。TCP无边界
客户端将数据分多次发生数据给服务器,如果服务器的数据缓冲区够大,那么服务器会在客户端发送完数据后一次性接收过来,所以是无边界的。UDP有边界
保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息.也就是说存在保护消息边界,接收端一次只能接收发送端发出的一个数据包.
而面向流则是指无保护消息保护边界的,如果发送端连续发送数据, 接收端有可能在一次接收动作中,会接收两个或者更多的数据包.
客户端每发送一次,服务器端就会接收一次,也就是说发送多少次就会接收多少次,因此是有边界的。例如,我们连续发送三个数据包,大小分别是2k, 4k , 8k,这三个数据包,都已经到达了接收端的网络堆栈中,如果使 用UDP协议,不管我们使用多大的接收缓冲区去接收数据,我们必须有 三次接收动作,才能够把所有的数据包接收完.而使用TCP协议,我们 只要把接收的缓冲区大小设置在14k以上,我们就能够一次把所有的 数据包接收下来.只需要有一次接收动作。
参考:TCP与UDP