代码之家  ›  专栏  ›  技术社区  ›  Danny_Kim

为什么UDP套接字通信中不发生错误?

  •  0
  • Danny_Kim  · 技术社区  · 8 年前

    我是一名学习计算机网络的学生。 我在Ubuntu上用C语言编写了非常简单的服务器-客户端套接字通信程序,使用UDP协议。 我在书中读到,UDP是不可靠的数据传输协议,而TCP是可靠的数据传送协议。原因是UDP只是发送数据包,而TCP正在发送并等待接收相应的ack消息。

    虽然设置了UDP,但套接字库是否有纠错方案?

    作为参考)我对套接字函数使用了sys/socket头。我用fopen、fread和fwrite复制文件。

    2 回复  |  直到 8 年前
        1
  •  4
  •   datenwolf    8 年前

    send() write() 在套接字上,围绕数据构建包描述符结构;这种结构在编写过程中“存在”,只有指向它的指针才会传递给接收它的人。如果这是另一个进程,则会有效地导致IPC(如果使用正确的套接字操作,则甚至会导致零拷贝数据传输)。只有当数据包描述符在网络接口驱动程序中结束时,才会传递不仅仅是指针。

    在本地网络上,也几乎不可能丢失数据包,因为冲突检测发生在链路层,现代交换机是存储转发架构。这需要一个 巨大的 用于通知任何形式的数据包丢失背压的网络负载量。

    要使数据包丢失变得明显,您必须使用竞争激烈的共享介质网络(例如,有许多客户端争夺的W-LAN),或者至少通过一个接近其带宽容量的路由器。

    虽然设置了UDP,但套接字库是否有纠错方案?

        2
  •  0
  •   AhmadWabbi    8 年前

    在当今的网络中,出错的概率非常小,尤其是在局域网或同一台机器上。也就是说,在出现错误之前,您可能需要多次尝试发送文件。