今天在阅读阮一峰老师的网络基础应用二这篇文章中,他在解释 DHCP 的作用时,提到了如下解释:
。
文中说到了这句话:
DHCP 是应用层协议,它建立在 UDP 协议之上
问题:
UDP 不是传输层协议吗? 为什么这句话要特指 "UDP" 协议呢?这句话为什么不可以说成 “DHCP是建立在传输层协议之上”呢?
不是很懂你的想法 传输层协议除了UDP还有TCP和其他的 如果说成 “DHCP是建立在传输层协议之上” 就不能知道它具体是建立在哪一个协议上面的 可能是TCP?可能是UDP?这不就把范围给扩大了吗
就好像你说“我中午吃了饭”和“我中午吃了鱼香肉丝”的区别一样
这个是特指。
DHCP 是 TCP/IP 的一套协议里用来分配 IP 的,所以自然底层用的也是 TCP/IP 里的 UDP 协议。
这句话"DHCP是建立在UDP协议之上"的意思是,DHCP协议使用UDP作为其传输层协议。换句话说,当DHCP协议需要在网络上发送或接收数据时,它使用UDP来负责数据的可靠传输。
UDP(用户数据报协议)是TCP/IP协议栈中的一个传输层协议,它提供了一种无连接的、不可靠的数据传输服务。DHCP协议需要这样的服务来在网络中广播其请求和响应,以便找到可用的IP地址和其他网络配置信息。
虽然DHCP协议是建立在传输层协议之上的,但它特别选择了UDP而不是TCP。这是因为DHCP协议不需要TCP提供的那些特性,如可靠的、有序的、面向连接的数据传输。相反,DHCP协议更关心的是快速和高效地找到网络配置信息,而UDP正好能够满足这个需求。
因此,将DHCP描述为“建立在UDP协议之上”比简单地描述为“建立在传输层协议之上”更为准确和具体。这有助于我们理解DHCP协议是如何在网络中进行数据传输的,以及为什么它选择了UDP作为其传输层协议。
在workerman中建立udp服务很简单,类似如下代码 $udp_worker = new Worker('udp://127.0.0.1:9090'); $udp_worker->onMessage = function($connection, $data){ var_dump($data); $connection->send('get'); }; Worker::runA
我运行了一个模拟测试,以了解UDP通信面临的问题。 我有一个主机,其中有4个UDP客户机正在运行,每个客户机都有自己的线程(T1、T2、T3和T4)。T1和T2共享一个名为socket的DatagramSocket对象,而T3和T4共享一个名为socket2的DatagramSocket对象。 T1和T2正在发送和接收来自IP(例如)udpServer1的UDP服务器的回波,而T3和T4正在与ud
在workerman中建立udp服务很简单,类似如下代码 $udp_worker = new Worker('udp://127.0.0.1:9090'); $udp_worker->onMessage = function($connection, $data){ var_dump($data); $connection->send('get'); }; Worker::runA
到目前为止,你应该已经有办法使用 Git 来完成日常工作。 然而,为了使用 Git 协作功能,你还需要有远程的 Git 仓库。 尽管在技术上你可以从个人仓库进行推送(push)和拉取(pull)来修改内容,但不鼓励使用这种方法,因为一不留心就很容易弄混其他人的进度。 此外,你希望你的合作者们即使在你的电脑未联机时亦能存取仓库 — 拥有一个更可靠的公用仓库十分有用。 因此,与他人合作的最佳方法即是建
我正试图使Web服务与protobuf和json一起工作。问题在于,为了构建我的proto,我需要能够读取inputStream(至少我没有看到其他方法)。 我为protobuf创建了一个转换器: 在我的Spring配置中使用: 我的控制器: 问题是,如果我让控制器这样做,我会得到一个错误,因为我的webservice不支持application/octet流。 [main]信息组织。日食码头。服
UDP协议是一个简单的面向数据报的传输层协议,它是一种不可靠数据报协议。由于缺乏可靠性且属于非连接导向协定,UDP应用一般必须允许一定量的丢包和出错。 Chrome提供sockets.udp接口使Chrome应用可以进行UDP通信。要使用sockets.udp接口需要在sockets域中声明udp权限: "sockets": { "udp": { "send": ["192