UDP——python网络编程笔记

Ip协议:数据包传至正确的机器:主机定位

 

维护两个程序的会话

1.区别同一主机上不同程序的数据包:多路复用

2.修复数据包的错误:丢失重传,错序重组,丢弃冗余:可靠传输

 

UDP:提供端口号,多路分解。原始数据包的多路复用

消息队列

 

数据包提供端口号:源端口,目标端口

 

客户端查询服务器:

内存中构造查询

OS:将查询封装为UDP数据包

目标地址:识别客户端,返回响应

客户端没有显式声明端口号——OS自动分配

socket.getservbyname('域名'):查询域名服务端口号

0-1023知名端口

socket.getaddinfo()解析端口

 

API设计

python标准库封装了:兼容posixOS网络操作底层系统调用。封装后的函数名原始调用名

为原始调用提供了基于对象的接口

 

网络操作背后的系统调用围绕着socket套接字进行

套接字:通信端点,OS用整数标识。python用socket.socket对象表示,内部维护OS分配的整数(fileno)

 

调用socket.socket对象的方法,请求使用套接字的系统调用时,自动使用内部维护的整数标识符。

 

fileno整数,也是一个文件描述符。从表示所有打开文件的整数池中获取

os.read/.write  文件描述符就是套接字

 

调用一次socket.socket()返回socket对象,之后在这个套接字对象上调用

 

创建空套接字,指定协议族与数据报(datagram)类型。

 

数据报(datagram)应用层数据块传输

 

OS网络栈不保证数据包是单个数据报

 

bind,绑定UDP网络地址:python二元组:IP+端口

.getsockname获取二元组信息

 

recvfrom 接收数据报,返回

发送者的客户端地址

数据包内容

 

sendto

要发送的信息与目标地址(自身地址如何被服务器识别?如需通信,要包含自身地址与端口)

 

没有检查数据报的源地址

 

不考虑地址是否正确,接收并处理所有收到的数据包的网络监听客户端:混杂客户端

服务器是混杂客户端?

解决方法:

1.唯一标识符  客——服——客

2.检查地址   

 

UDP提供寻址方案,但不提供自身地址打包?

 

connect阻止其他地址向客户端发送数据包

 

客户端与服务器:

请求与响应是相对的?绝对的?

 

UDP客户端:不可靠性,需要在循环内发送请求,无法区分以下事件:

1.响应时间长,但终会传至客户端

2.请求/响应在传输中丢失

3.服务器宕机,无法做出响应

 

UDP客户端选择等待时间,超时重发请求。否则无限等待

 

socket.timeout,中断recv调用

 

recv调用阻塞调用方

 

丢包主要原因:网络拥堵,重发只会恶化,选择合适的间隔时间,避开阻塞

 

指数退避

 

长连接UDP:先验:最近几次响应时间

 

无法区分:不能被观测到的事物与不存在的事物

 

显式bind:服务器

隐式bind:客户端:OS分配临时端口

 

connect:指定send目标位置(IP+端口),按地址过滤数据包的来源

只能绑定一个目标地址,重复绑定覆写

解决客户端混杂性

getpeername

connect没有实际网络操作

 

可以伪造数据包的地址为其他服务器地址

 

 

请求ID(每次不同)

将响应与重复发送的请求对应

 

攻击者得到请求数据包——安全性失效

服务器响应先到——有效

 

2.3绑定接口

服务器bind绑定可使用

127.0.0.1 本机数据包

‘’通配符 任何网络接口收到的数据包

 

服务器绑定到外部IP,限制可与服务器通信的外部主机

同机器客户端自环接口连接服务:服务器不会响应

客户端连接到外部IP,可以通信

 

同一机器多个服务器:

一个连接自环接口

一个连接外部IP

UDP套接字名是二元组,可以不同IP指定相同端口

 

服务器绑定到自环端口,防止接受外部数据包

 

实际取决于OS的选择与配置?

 

2.4UDP分组

UDp发送原始数据报。被封装成IP数据包,加入信息:发送方与接收方的端口。

 

UDP大数据报——分成小数据报——单独IP数据包——网络传输

大数据包容易丢包、数据兼容差

 

2.5套接字选项

setsocketopt,getsocketopt  获取,设置套接字选项

SO_BROADCAST

SO_DONTROUTE:只向与本机连接的子网内主机发送数据包

SO_TYPE:套接字类型,传给getsocket查询

 

2.6广播

 

接受广播数据包的服务器(多个)

发送广播数据包的客户端

 

UDP适用场景:每次发送一条消息然后等待响应

 

多条消息:智能消息队列:信息打包

TCP实现:传输负载分组

 

时间要求苛刻的媒体流,丢包可接受

 

posted on 2018-06-22 11:10  秦梦超  阅读(176)  评论(0编辑  收藏  举报

导航