python发送udp报文并修改源ip

python发送udp报文并修改源ip,第1张

python发送udp报文并修改源IP地址

```

import socket

import struct

# 创建udp套接字

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定源IP地址

s.bind(('192.168.0.1', 0))

# 设置报文信息

data = 'hello world!'

dst_addr = ('192.168.0.2', 80)

# 修改源IP地址

src_addr = ('192.168.0.3', 0)

s.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(src_addr[0]))

# 发送报文

s.sendto(data.encode('utf-8'), dst_addr)

```

计算机里的UDP报文协议只在 IP 的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及差错检测的功能。

UDP的主要特点是:

(1)UDP 是无连接的。即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。

(2)UDP 使用尽最大努力交付。即不保证可靠交付,因此主机不需要维护复杂的连接状态表(这里面有许多参数)。

(3)UDP 是面向报文的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不分拆,而是保留这些报文的边界。这就是说,应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文,如图 5-4 所示。在接收方的 UDP,对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程。也就是说,UDP 一次交付一个完整的报文。因此,应用程序必须选择合适大小的报文。若报文太长,UDP 把它交给 IP 层后,IP 层在传送时可能要进行分片处理,这会降低 IP 层的效率。反之,若报文太短,UDP 把它交给 IP 层后,会使 IP 数据报的首部的相对长度太大,这也降低了 IP 层的效率。

(4)UDP 没有拥塞控制。因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多的实时应用(如:IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络出现拥塞时丢失一部分数据,但却不允许数据有太大的时延。UDP 协议正好适合这种要求。

(5)UDP 支持一对一、一对多、多对一和多对多的交互通信。

(6)UDP的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12048738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存