问题描述:
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主机才能通讯,其它的一律过滤掉。
版权宣告:本文转载自公众号“chexiaopangnetwork”,版权归原作者所有,转载请保留此字段,感谢!