14丨UDP也可以是“已连接”?
该思维导图由 AI 生成,仅供参考
从一个例子开始
- 深入了解
- 翻译
- 解释
- 总结
UDP协议中的“已连接”概念是本文的重点。通过具体的例子和解释,作者深入浅出地介绍了UDP connect的作用,即为了让应用程序能够接收“异步错误”的信息。文章还讨论了收发函数的使用和服务器端connect的例子。通过对UDP套接字调用connect方法的深入分析,读者可以了解到UDP使用connect的目的是为了让程序快速获取异步错误信息的通知,并获得一定性能上的提升。此外,文章还提出了两个思考题,引发读者思考和讨论。总的来说,本文通过具体案例和技术分析,帮助读者快速了解UDP协议中“已连接”的概念,以及使用connect方法的意义和优势。
《网络编程实战》,新⼈⾸单¥59
全部留言(32)
- 最新
- 精选
- Geek_63bb29老师,面试过程中问道udp如何实现可靠性,这个怎么答呀。要求具体每部实现
作者回复: 我能想到的: 1.udp可以增加消息编号; 2.对每个消息编号提供ACK,在udp应用层增加应答机制; 3.没有应答的增加重传机制 4.增加缓存,ACK完的才从缓存中清除
2020-08-21326 - Sancho老师,你好。我有两个疑问: 1.不进行connect操作,UDP套接字与服务端的地址和端口就没有产生关系,那recvfrom是怎么收到对应的报文呢? 2.UDP的connect操作,会引发内核的ICMP报文发送?如果不是,ICMP是在什么时机下发送的?
作者回复: 1.是通过sendto函数来绑定服务端地址的,之后再通过recvfrom引用到之前的socket,这样收到的报文就是指定的服务地址和端口了; 2.不是connect导致ICMP报文,而是对应的地址和端口不可达时,一个 ICMP 报文会返回。connect只是将这个信息传递变得可能了。
2020-07-0916 - GeekAmI问题1:亲测可以; 问题2:可以参考https://yq.aliyun.com/articles/523036。
作者回复: 👍
2019-10-2229 - 🐗Jinx对于广播的话,先把广播的option打开。然后再 connect 255.255.255.255 对吗?
作者回复: 是的。UDP的广播地址是固定的为255.255.255.255。
2020-12-207 - Liam按照老师的说法,只有connect才建立socket和ip地址的映射;那么,如果不进行connect,收到信息后内核又是如何把数据交给对应的socket呢
作者回复: 在答疑篇里统一回复了。
2019-09-0246 - 沉淀的梦想还是不太理解为什么UDP的sendto方法会有一个"连接"过程的性能损耗,直接按照目标地址发过去不就可以了吗?我的理解是操作系统会先用ICMP协议探一探目标地址是否存在,然后再用UDP协议发送具体的数据,不知道理解的对不?
作者回复: 我不觉得会发ICMP来探一谈。ICMP是用的时候才触发的。 这里我想表达的是操作系统协议栈在每次sendto的时候都会需要一个地址初始化的过程,如果这个过程省略掉了,是可以得到一点点性能的提升的。当然,其实这个是没有那么大的。
2019-09-044 - duckmanconnect 将一个socket绑定到一个udp的客户端进程,其他的udp客户端进程想要再次绑定该socket(4元组)发送数据的时候就会报错。所以connect起到了 "声明式"独占的作用?
作者回复: 也可以这么说。
2020-12-072 - 传说中的成大大udp 连接套接字 这个是什么过程? 断开套接字这又是什么过程呢?
作者回复: 没有断开,这里都是一个系统调用,告诉了一些系统内核信息而已。
2019-09-022 - 孙升发现在输入完goodbye之后,服务端执行exit,后面client再去请求的时候又会被阻塞而不是返回错误,是因connect是单次操作吗?
作者回复: 是因为之前发送成功了,所以没有ICMP不可达的报文收到,因而进入了阻塞状态。
2021-12-161 - 一个戒老师,请问第一个程序中,在没有开启服务端的情况下开启客户端,不会在第20行connect的时候就error报错了吗?为什么还能接收标准输入并send出去?
作者回复: 这个是UDP哦,不是TCP。 通常在服务器端不开启的情况下,UDP客户端程序是不会报错的,程序只会阻塞在 recvfrom 上,等待返回(或者超时)。UDP的connect并不是真正的conncect操作,它只是给UDP 套接字建立了“上下文”。
2020-11-291