python发送二层报文_tcp和udp发送接收的细节

python tcp和udp编程时,有一些发送和接收数据方面的细节,需要好好研究一下。

UDP(package)

udp的sendto接口,最大一次大概发就是65000左右个字节,在大就会有raise,说数据太大了。

而udp的recvfrom接口,要给一个缓冲区大小,这个缓冲区大小不能太小,如果小于对方发送的数据,直接数据丢失。udp的recvfrom,只有一次机会,下一次在recvfrom,就直接阻塞了。

udp报文很大的时候,IP层会对齐进行分片处理,接收侧合并所有分片后,在同时udp层处理。失败就失败了,udp传输没有确认机制。

如果udp发送端在接收端两次recvfrom之间,连续sendto了好几次数据,假设缓冲区足够大,recvfrom每一次还是只能够获得一个udp的数据报文,要连续好几次才能收完数据。udp通信以报文为单位,每一次收一个报文。

UDP报文头

网络上又说UDP头的校验是可选的,不是很确定?

TCP(stream)

tcp的send接口,就可以一下子发送超大的数据,我测试过一次发10万个字节,不会raise。

tcp 的recv接口,不管你设置多大的缓冲区都没关系,只要数据还没有收完,下一次recv接着收。

python系统默认给tcp接收最大缓冲区是65536字节,发送一个10万字节的消息,接收端会先收65536字节,下一次recv时在接着收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值