面试题,为什么TCP可以保证发包顺序而UDP不行?

女神打Boss 2014-11-10 04:06:32
我的答案是TCP可以保证一直连接而UDP不能保证一直连接。不知我的答案对不对

另外为什么TCP可以保证一直连接,UDP为什么不能保证一直连接。
...全文
1343 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
女神打Boss 2014-11-16
  • 打赏
  • 举报
回复
找到一个关于这方面的文章,大家可以看看 http://blog.csdn.net/ggxxkkll/article/details/7894112
双杯献酒 2014-11-14
  • 打赏
  • 举报
回复
TCP之所以能保证发包顺序, 是因为它把每个包编号, 然后接收那边不管是按哪个顺序接收到数据, 都按编号重新排好顺序再让你读的. UDP没有做这些, 所以不能保证顺序. 这也是为何有人说UDP比TCP快的原因.
ZenZenZ 2014-11-14
  • 打赏
  • 举报
回复
引用 17 楼 kee131 的回复:
TCP建立可靠连接,建立TCP链接需要经过三次握手,在断开连接时需要四次挥手。 可以比喻为打电话过程: 1、A:拨号 B: 接电话,“喂,你好” 2、 A:“你好,是B吗?,我是A” B:“你好,我是B” 3、A:“好的,找到你了,建立连接吧” B: “好的” 大致就这个意思,断电话时也类似。 UDP建立不需要握手过程。好比邮局,直接把信放到你家的邮箱盒子里边,其余的什么也不问不管。
关于发包顺序在网络数据里边有申请序列号和回复序列号(ack/syn),序号是按照一定规则来编写的。(详见《TCP/IP协议详解》卷一)
ZenZenZ 2014-11-14
  • 打赏
  • 举报
回复
TCP建立可靠连接,建立TCP链接需要经过三次握手,在断开连接时需要四次挥手。 可以比喻为打电话过程: 1、A:拨号 B: 接电话,“喂,你好” 2、 A:“你好,是B吗?,我是A” B:“你好,我是B” 3、A:“好的,找到你了,建立连接吧” B: “好的” 大致就这个意思,断电话时也类似。 UDP建立不需要握手过程。好比邮局,直接把信放到你家的邮箱盒子里边,其余的什么也不问不管。
majia2011 2014-11-14
  • 打赏
  • 举报
回复
明显是在问协议细节呢 直接告诉他,tcp有seq和ack,高兴的话就扩展着讲讲协议为什么这么设计,怎么执行的。 如果有水平,可以现场设计个协议给他,讨论呗
applewqj 2014-11-14
  • 打赏
  • 举报
回复
这跟TCP UDP 发送的数据格式有关
赵4老师 2014-11-11
  • 打赏
  • 举报
回复
《TCP/IP详解卷一:协议》
ithiker 2014-11-11
  • 打赏
  • 举报
回复
其实我推荐看看谢希仁的《计算机网络》,已经出到第五版了,这本更适合初学者些!
starytx 2014-11-11
  • 打赏
  • 举报
回复
没有“一直连接”这种说法吧,这里应该是逻辑上的连接。TCP通信连接建立后,拔掉网线再插上不影响连接的
  • 打赏
  • 举报
回复
2楼,5楼正解
linjiagao052 2014-11-11
  • 打赏
  • 举报
回复
引用 8 楼 truelance 的回复:
这么基本的问题你应该看书。 简单说就是协议中定义的报文头不一样,在TCP头中有发送帧序号和期望接收的帧序号,收发双方通过滑动窗口协议保证仅收到下一个需要的帧时才提交给上层应用。 一直保持连接是在TCP协议层中有保活定时器,超过一段时间没有发送的应用报文,TCP层会自动发送一个握手帧告诉对方我还在正常工作。 UDP的协议简单,这些东西都没有。因此UDP的开销也比TCP小。
++ 协议性质决定的。 所谓的一直连接,是对上层来说的。一个一个的以太包,上层不同的解析。
luciferisnotsatan 2014-11-11
  • 打赏
  • 举报
回复
《TCP/IP详解卷一:协议》 是否保证顺序,这个不就是TCP和UDP的一大区别,有什么好问为什么的。 这个问题应该问“如何”才对,不该问“为什么”。
xiaohuh421 2014-11-11
  • 打赏
  • 举报
回复
一个是有连接, 一个是无连接. 设计如此, 如果都一样, 那还分TCP, UDP做什么.
熊熊大叔 2014-11-11
  • 打赏
  • 举报
回复
这么基本的问题你应该看书。 简单说就是协议中定义的报文头不一样,在TCP头中有发送帧序号和期望接收的帧序号,收发双方通过滑动窗口协议保证仅收到下一个需要的帧时才提交给上层应用。 一直保持连接是在TCP协议层中有保活定时器,超过一段时间没有发送的应用报文,TCP层会自动发送一个握手帧告诉对方我还在正常工作。 UDP的协议简单,这些东西都没有。因此UDP的开销也比TCP小。
wxgchrome123 2014-11-10
  • 打赏
  • 举报
回复
看看计算机网络 补下
碼上道 2014-11-10
  • 打赏
  • 举报
回复
TCP每个报文都是有序号的
healer_kx 2014-11-10
  • 打赏
  • 举报
回复
这么设计的。
勤奋的小游侠 2014-11-10
  • 打赏
  • 举报
回复
引用 楼主 CKRGD 的回复:
我的答案是TCP可以保证一直连接而UDP不能保证一直连接。不知我的答案对不对 另外为什么TCP可以保证一直连接,UDP为什么不能保证一直连接。
不对,”保证一直连接“是“保证发包顺序”的果,而不是因。 保证发包顺序是通过给每个包编号来实现的。接了包一,就一定要接包二,如果包二一直不发过来。接收端就会不停地叫发送端发包二过来。
mujiok2003 2014-11-10
  • 打赏
  • 举报
回复
保持连接是逻辑上的, 不是物理上的。TCP协议使用TCP头部的seq num + ack机制可以保证顺序性。
mymtom 2014-11-10
  • 打赏
  • 举报
回复
这是TCP和UDP的本身的特性决定的呀。 SOCK_STREAM Provides sequenced, reliable, bidirectional, connection-mode byte streams, and may provide a transmission mechanism for out-of-band data. SOCK_DGRAM Provides datagrams, which are connectionless-mode, unreliable messages of fixed maximum length.

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧