UDP通信的诸多误区

来自:车小胖谈网络 (微信号:chexiaopangnetwork),作者:车小胖谈网络

问题描述

UDP协议是不需要建立链接的,那我就可以随意链接其他人发数据了啊?

如果udp是无连接的,那可以向任何人发送数据了么?如果他只写接受函数不就是随意通信了么?

还有就是通讯方面消息的接收端是如何知道消息的是什么时候发送的,如何实时接受的。是监听么?还是还有其他的办法?求大佬解决疑问。

 


正文

 

这是一个人人认为自己会,但往往又会有很多误区的话题。

 

UDP无连接到底意味着什么?

 

  • 通信无需任何前戏,而是直奔主题通信。每一个报文里都会携带用户数据,话糙理不糙的表达方式就是:“不要绕弯子,有屁快放”!

 


  • UDP传输层、IP网络层、以太网链路层、硬件物理层、互联网不会对报文做复制操作,潜台词就是,万一UDP报文有丢失的情况发生,它们统统没有报文的Copy,所以它们不会重传。


 

  • 只有应用程序存有数据的Copy,只有应用程序才具有有数据重传的可能性。

 

 

UDP的无状态是否意味着整个基础网络架构,不会维护UDP的任何状态?

在没有NAT发明之前可以这么说,自从NAT的诞生,就不能那么说了,NAT其实会把UDP通信看做类似TCP的连接,所以会维护连接状态。但是,NAT同样也不会存有数据的Copy

 

UDP类似于给对方寄信,一般情况下,收件人默认是收所有的人的信。以前美国反恐时,小布什经常会收到恐怖组织的危险邮件,没有设置白名单或黑名单制度的UDP通信,是最容易被攻击的。

 

但是这里有一个前提,收件人一定是活着的,这样才有通信的意义。对应到UDP的世界里,意味着UDP报文的接收方要处于侦听(Listening)状态。

 

侦听状态意味着什么?

负责域名查询的DNS解析程序,就是在UDP 53端口侦听,来自世界任何角落的查询请求。

 

消息通知模式

DNS解析程序向TCP/IP协议栈注册了一个消息:“使53号端口,如果有发到53端口的报文,烦请老总通知我一声,我的进程号是12345

 

一会儿果然有UDP目的端口= 53的报文到达,门卫老总立马给进程号=12345”发个消息,“有邮件,速取”,DNS解析程序听到了立马取走,这是消息通知模式。

 

Callback模式

DNS程序是个宅男,觉得老往传达室跑效率太低,向门卫打个招呼(注册),王老总,以后有发到53端口的报文,请直接扔到我家窗户(Callback函数)里就好了,谢谢啊!

 

这是服务器侧的情况,那客户端呢?

 

小明给小美写一封情书,小明能知道小美什么时候给自己回信吗?不能!

 

查询模式

小明又很焦急,怎么办呢?小明一天跑三次传达室,看看有没有小美的回信,这是UDP查询模式。

 

消息通知模式

门卫王看不下去了,小明啊,快回去吧,小美的信到了,我会打电话通知你来取。

 

UDP不连接的通信模式,给伪造报文DoS攻击提供了便利。为了应对这个挑战,应用程序通常会使用Cookie来过滤掉所有伪造的源主机。

 

此外,UDP可以使用白名单过滤列表,只有明确允许的源IP主机才能通信,其它的一律过滤掉。

推荐↓↓↓
程序员的那点事
上一篇:局域网,广域网,因特网之间的区别和联系? 下一篇:新版IE认证之交换技术