UDP点滴

1、UDP(user datagramprotocol):用户数据包协议,是一个传输层协议。

2、UDP是无连接的。UDP的客户端和服务器没有固定的绑定关系。言下之意,同一个UDP 客户端 socket可以向多个不同UDP服务器socket发包,同一个UDP服务器socket可以接收来自多个不同UDP客户端socket的数据包。

3、UDP是一个不可靠的传输层协议,没有丢包重传机制。

4、UDP的每一个数据包,都是有包边界的,不像TCP是面向字节流的协议。

5、未连接UDP socket不能收到“端口不可达之类的icmp消息”

6、UDP socket也可以调用connect函数。对于UDPsocket来说,调用connect并不会有类似TCP一样的“三次握手”机制,仅仅是绑定“目的IP地址,目的端口号”。关键点:UDP socket的connect,不会向对端发送任何数据包!!!!!!!

7、已连接的UDP socket,发包的时候,可以用send,sendto。对于sendto,目的地址指针参数必须为NULL,目的地址长度参数必须是0。

8、已连接的UDP socket,接收数据包的时候,可以用recv,recvfrom。对于recvfrom,源地址指针参数必须为NULL,源地址长度参数必须是0。

9、已连接的UDP socket可以接收到类似“端口不可达,之类的icmp消息”

10、已连接的UDP socket只能收,“源IP地址和源端口号”与“绑定的IP地址和端口号”相匹配的数据包。例如,客户端UDP socket 调用了connect连接了服务端UDP socket,那么客户端只能收到数据包的“源IP地址、源端口号”与“调用connect绑定的IP地址、端口号”匹配的数据包。

11、对于已连接的UDP socket,在以下两种情况下,可以继续调用connect函数

1)绑定一个新的“目的端口号和IP”

2)取消已有的连接。可以通过把socket 地址结构的sin_family字段值设为AF_UNSPEC

12、对于已连接的UDP socket,只有在调用send或者sendto发送第一个数据包的时候,才能收到“类似icmp端口不可达的错误”。因为,UDP connect的时候,不会有发包行为。

13、对于UDP socket,调用connect,内核会同时绑定本地的ip地址和端口号。(注意,sun solaris不支持)

14、UDP可以支持“单播、广播、组播”,TCP只能支持“单播”

15、调用UDP的recvmsg函数,可以得到辅助数据。例如,数据包的目的IP,目的端口。

16、当调用UDP的recvfrom函数的时候,如果接收的数据包大小超过了接收数据缓冲的大小,那么多余的数据就会被内核丢弃。并且,设置MSG_TRUNC标志。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值