在接口级别,DCCP 类似于 TCP:您连接然后发送/接收字节。
我想知道是否可以通过仅调整 tcp 的包装器来扭曲 dccp 连接...
根据示例代码(如下),需要更改的是:
- 在套接字实例化时:使用不同的参数
- 在使用套接字之前:设置一些选项
那么其他一切都将是一样的......
提示:我已经发现addressFamily
了socketType
扭曲的来源,但我不知道如何在协议工厂中干净地设置它们。此外,协议号,这里的第三个参数,IPPROTO_DCCP
始终保持默认值。我也不知道如何访问要调用的套接字setsockopt
import socket
socket.DCCP_SOCKOPT_PACKET_SIZE = 1
socket.DCCP_SOCKOPT_SERVICE = 2
socket.SOCK_DCCP = 6
socket.IPPROTO_DCCP = 33
socket.SOL_DCCP = 269
packet_size = 256
address = (socket.gethostname(),12345)
# Create sockets
server,client = [socket.socket(socket.AF_INET, socket.SOCK_DCCP,
socket.IPPROTO_DCCP) for i in range(2)]
for s in (server,client):
s.setsockopt(socket.SOL_DCCP, socket.DCCP_SOCKOPT_PACKET_SIZE, packet_size)
s.setsockopt(socket.SOL_DCCP, socket.DCCP_SOCKOPT_SERVICE, True)
# Connect sockets
server.bind(address)
server.listen(1)
client.connect(address)
s,a = server.accept()
# Echo
while True:
client.send(raw_input("IN: "))
print "OUT:", s.recv(1024)
有关 DCCP 的更多信息: https ://www.sjero.net/research/dccp/ https://wiki.linuxfoundation.org/networking/dccp
TL;DR:dccp 是一种提供拥塞控制(如 tcp)但不保证数据的可靠性或按顺序交付(如 udp)的协议。标准的 linux 内核实现了 dccp。