udp没有连接就会生成socket吗?

admin 2025年3月11日19:24:01评论7 views字数 1064阅读3分32秒阅读模式

按照题主说的,UDP还分为2个阶段:

阶段1,还没有连接(Disconnected)的UDP状态。

阶段2,建立连接(Connected)的UDP状态。

UDP是一个天生(Native无连接(Connectionless传输层协议!

问题就变成了:UDP通信需要生成Socket吗”?

是的,一定会生成UDP Socket,使用socket()系统调用生成。

操作系统返回一个FDFile Descriptor),一个整数。这个整数一般从3开始,因为012分别被inputoutputexception所占用。

接下来用该UDP Socket发送数据,只要携带input参数FDPeer AddressPeer PortData_buffer调用sendto()即可完成发送。

sendto()调用返回时,这个被发送的UDP Packet逗留在UDP Send Buffer一会?

不会,因为UDP压根没有Send Buffer^_^

UDP PacketUDPIP封装处理、IP路由,找到outgoing interface,然后调用

outgoing interfacesoutput()函数,三种结果。

  • 如果outgoing interface send queue 满了,丢弃。

  • 否则将packet放在outgoing interface send queue末尾,此时网卡正处于发送Active状态,发完queue前面的packets,最后发送该UDP packet

  • 如果outgoing interface send queue空,udp packet放入send queue,调用outgoing interfaces start()发送该packet,如果发完该packet之后,queue里依然还有后续的packet进入,死循环发送,直到queue清空。

最后,当用户手动创建一个socket成功的背后,背后产生多少个结构体?

大概是这个样子的,这里还忽略了INPCBInternet Protocol Control Block),和socket有瓜葛的struct。这样无论数据从上层到下层流动,还是下层到上层流动,都可以找到socket

udp没有连接就会生成socket吗?

上层--->下层

proc->p_fd->fd_ofiles->file[FD]->socket

下层--->上层

Protosw ---- INPCB ---socket

而用户需要传入的和socket有关的参数,仅仅是上文加亮的FD

原文始发于微信公众号(车小胖谈网络):udp没有连接就会生成socket吗?

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月11日19:24:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   udp没有连接就会生成socket吗?https://cn-sec.com/archives/3829444.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息