zoukankan      html  css  js  c++  java
  • UNP学习第八章udp

    一、基本UDP套接口编程

    #include <sys/socket.h>
    
    ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags,
                    struct sockaddr *from, socklen_t *addrlen);
    ssize_t sendto(int sockfd, const void *buff, size_t nbytes, int flags,
                    const struct sockaddr *to, socklen_t addrlen);
    返回:成功读写字节数,出错-1
    socket:套接字文件描述符
    buff:缓存
    nbytes:缓存长度
    flags:简单UDP中不需要,recv、send、recvmsg和sendmsg时使用
    from,to:协议地址
    addrlen:协议地址长度

    类似于标准的read,write。

    recvfrom最后两个参数类似于accept,返回时套接口地址结构内容告诉我们是谁发送了数据报(UDP情况下)或是谁发起了连接(TCP情况下)。

    sendto最后两个参数和connect类似,我们用数据报将发往(UDP情况下)或与之建立连接(TCP情况下)的协议地址。

    二、数据报的丢失

    如果客户数据报到达服务器,但服务器应答丢失了。客户永远阻塞于recvfrom调用。

    唯一的解决方法时给客户recvfrom调用设置一个超时。

    仅仅为了调用recvfrom而设置超时并不是一个完整的办法。例如,如果我们超时了,我们无法辨别超时原因是数据报没有到达服务器,还是服务器应答没有回到客户。

    三、验证接收到的响应

    知道客户临时端口号的任何进程都可往客户发送数据报,且这些数据报会与正常的服务器应答混淆。

    对recvfrom调用以返回发送响应者的IP地址和端口号,并忽略不是来自我们的数据报所发往服务器的任何数据报。

    首先我们注意到,在客户主机可以往服务器主机发UDP数据报之前,要求有ARP请求和应答。

    端口不可能ICMP消息,不会返回客户。并永远阻塞在recvfrom调用。

    ICMP是异步错误,直到很晚才返回。

    四、UDP缺乏流量控制

    UDP没有流量控制,它是不可靠的。UDP发送方比DUP接收方运行速度快时造成数据报丢失的一个重要原因。

    由服务器接收的数据报的数目时不确定的,他依赖于需要因素,如网络负载、客户主机的处理负载遗迹服务器主机的处理负载。

    UDP套接口接收缓冲区

    在BSD/OD 2.1中,套接口接收缓冲区的最大大小缺省为262144字节(256*1024),但由于缓冲区分配机制的影响,真实的限制是246723字节。

    UDP中外出接口的确定

    已连接UDP套接口还可用来确定用于特定目标的外出接口,connect被应用到UDP套接口的副作用。

    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    四、分布式账本技术对比
    二、主流区块链技术特点及Hyperledger Fabric V0.6版本特点
    一、Bitcoin比特币与BlockChain区块链技术
    java-信息安全(十七)-*.PFX(*.p12)&个人信息交换文件
    java-信息安全(十五)-单向认证
    java-信息安全(十六)-双向认证
    java-信息安全(十四)-初探SSL
    java-信息安全(十二)-数字签名【Java证书体系实现】
    java-信息安全(十三)-数字签名,代码签名【Java证书体系实现】
    移动端网页 rem css书写
  • 原文地址:https://www.cnblogs.com/ch122633/p/8474362.html
Copyright © 2011-2022 走看看