06 | 嗨,别忘了UDP这个小兄弟
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
UDP与TCP是两种不同的通信协议,分别适用于不同的场景。TCP是面向连接的协议,具有重传、确认、有序传输、拥塞控制等能力,而UDP则是无连接的通信协议,不保证报文的有效传递和有序性。尽管UDP的不可靠性,但由于其简单性和适用于多种场景,如DNS服务、多人通信等,仍然具有广泛的应用价值。本文通过介绍UDP编程的主要过程和UDP服务器端、客户端的示例,让读者更好地理解UDP与TCP之间的差别。文章还提出了两个思考题,引发读者对UDP协议的深入思考。通过本文的总结,读者可以快速了解UDP协议的特点和适用场景,以及UDP与TCP之间的区别。
《网络编程实战》,新⼈⾸单¥59
全部留言(59)
- 最新
- 精选
- 何赫赫老师,UDP没有发送缓冲区这个概念吗
作者回复: 实际上不存在UDP发送缓冲区,因为发往UDP发送缓冲区的包只要超过一定阈值(值很小)就可以发往对端。所以我们一般认为UDP是没有发送缓冲区的。
2020-03-09223 - tongmin_tsai老师,UDP被IP层分包发送后,对端如何保证UDP包整个组合的?比如用UDP发送3000字节,假设拆分2个MTU发送,后一个先到服务端,前一个后到服务端,那应用层接收的时候,UDP怎么组装的?
作者回复: 很简单,1-1500为一个seq=1的包,1501-3000为seq=2的包,根据sequence组装就可以了。
2019-09-30320 - 你好多人聊天室使用UDP,消息发出后怎么保证消息可以被收到呀,UDP不是不可靠传输嘛,中间丢了消息咋办呀
作者回复: 第一,丢了就丢了,反正UDP就是不可靠的; 第二,给每条消息加个sequence,收到后再确认,一段时间内没收到,就重发。
2019-10-30410 - 旅途第一个思考题 另起一个线程进行recvfrom
作者回复: 我的本意是使用超时或者非阻塞来解
2019-12-299 - YUANudp之所以sendto要目的地址是因为他是非连接的,否则不知道将数据发给谁,recvfrom要发送方地址也是因为udp是非连接的,有了from内核就可以判定将数据上传给谁(应用进程)。是这样吗?
作者回复: 基本是这样的。
2020-10-035 - kissingers老师,TCP 流,UDP包,流的说法怎么理解?
作者回复: 流就像水流,一直持续不断的流淌,只不过流淌的是0101这样的比特流。
2019-09-0644 - 范龙dragon客户端代码的29行sendline数组之前没有初始化数组元素为0,直接用strlen应该会有问题吧,strlen不是以0作为结束标志吗?
作者回复: 好问题,fgets函数会"默默"的给我们加上\0
2019-08-1824 - zhchnchn如果不开启服务端,TCP 客户端的 connect 函数会直接返回“Connection refused”报错信息。而在 UDP 程序里,则会一直阻塞在这里。 ------------------------- 这个地方不太理解。请问老师,对TCP来说,收到“Connection refused”报错信息,表明收到了服务端的RST包,如果服务端不开启,谁负责发送RST包呢?
作者回复: 不是RST包,RST的意思是connection reset;这里connection refused是对方的TCP协议栈发送的,工作在操作系统内核中。
2019-08-1424 - 江永枫关于阻塞io,可以考虑使用多线程模型去提升性能,或者结合io多路复用来处理能力。 https://m.php.cn/article/410029.html
作者回复: 很快就会讲到了 :)
2019-08-143 - null老师好,有 3 个问题请教一下: 1. TCP 有序传输的意思是:需要等到当前发送的包 ACK 之后,才发下一个包么?还是说可以一直发消息,收到 ACK 之后再确认对应的包发送成功? 2. 关于 TCP 和 UDP 连接,我可以这么理解么? TCP 连接之后直到关闭,这期间发的消息,比如 client 发给(send 函数) server, 然后 server 回复(不知道用啥函数写回,也是 send 函数么?) client; client 又继续发给 server,继续重复刚才的步骤...., 走的都是同一个连接。 而 UDP,client 发给(sendto 函数) server 是一个连接。而 server 回复(sendto 函数) client,又是另一个连接。 3. 下面的循环发送,我甚至是可以动态更改对端 client_addr 地址和端口信息的吧? for (;;) { sendto(socket_fd, send_line, strlen(send_line), 0, (struct sockaddr *) &client_addr, client_len); }
作者回复: 1. TCP有序传输的意思是对于传送的字节流,接收端总是保证按照发送的顺序来接收; 2.TCP是面向连接的,UDP没有连接的概念; 3.当然可以,但是意义不大。
2021-03-162