UDP的分析与UDP一次性能发多大的数据

UDP的分析与UDP一次性能发多大的数据_第1张图片

UDP的过程比较简单,当只有一方进行了bind显示绑定端口,则这一方(假设为A)要先作为接收方接受信息,因为不知道对方(假设为B)的端口号是多少。而对方作为发送方进行发送数据通信的时候,底层会为它自动随机分配一个端口号,然后A方则能从&addr中获取B的端口,从而能够紧接着进行发送信息。
当然我们也可以对A,B双方都进行显示的bind来进行绑定端口。

#include

int sendto(int sockfd, const void* msg, int len, unsigned int flags, struct sockaddr* toaddr, int* addrlen);
参数sockfd为套接口的描述符
msg为指向数据发送缓冲区的指针
len表示将要发送的字节数
flags一般设置为0
toaddr为指向数据发送的套接口地址数据结构的指针
addrlen指向套接口数据结构的长度


int recvfrom(int sockfd, void* buf, int len, unsigned int flags, struct sockaddr* fromaddr, int* addrlen);
参数buf指向数据接收缓冲区的指针
fromaddr为指向数据接收的套接口地址结构的指针
其他参数和sendto意义相同


就具体函数而言:

    用UDP协议发送时,用sendto函数最大能发送数据的长度为:65535- IP头(20) – UDP头(8)=65507字节。用sendto函数发送数据时,如果发送数据长度大于该值,则函数会返回错误。(丢弃这个包,不进行发送) 

    用TCP协议发送时,由于TCP是数据流协议,因此不存在包大小的限制(暂不考虑缓冲区的大小),这是指在用send函数时,数据长度参数不受限制。而实际上,所指定的这段数据并不一定会一次性发送出去,如果这段数据比较长,会被分段发送,如果比较短,可能会等待和下一次数据一起发送。

你可能感兴趣的:(Linux网络学习)