• 请不要在回答技术问题时复制粘贴 AI 生成的内容
woahishui
V2EX  ›  程序员

TCP 和 UDP 的区别

  •  
  •   woahishui · Jul 24, 2019 via Android · 7252 views
    This topic created in 2668 days ago, the information mentioned may be changed or developed.
    昨天被问了这个问题,想想挺无奈的说有区别吧,反正概念上都说有,但是写代码的时候确实没感觉啊。
    Supplement 1  ·  Jul 24, 2019
    谢谢各位,以为写点 TCP 的就算懂了,呵呵,我在多看看
    42 replies  •  2019-07-25 09:48:39 +08:00
    d5
    d5
    Jul 24, 2019❤️1
    1
    udp 是尽力而为的传输,tcp 要先握手,就算不记得专业词汇,也总能说上点什么吧。
    wysnylc
    wysnylc
    Jul 24, 2019
    2
    百度的已经够详细了
    SilencerL
    SilencerL
    Jul 24, 2019❤️27
    3
    TCP:
    你想听一个关于 TCP 的笑话吗
    你想听一个关于 TCP 的笑话吗
    你想听一个关于 TCP 的笑话吗

    UDP:
    你想一个于 UP 笑吗

    // ?可能举的例子不太严谨
    frozenway
    frozenway
    Jul 24, 2019
    4
    一个是打电话,一个是发短信
    Chenamy2017
    Chenamy2017
    Jul 24, 2019
    5
    你都写代码了,应该清楚他们的区别。
    FelixLiu
    FelixLiu
    Jul 24, 2019
    6
    @SilencerL 我觉得 UDP 改成这样更好:
    你想个一于 UP 笑吗
    //加了包乱序,手动沟通
    cheeto
    cheeto
    Jul 24, 2019
    7
    @SilencerL 哈哈哈哈哈哈哈哈哈
    CallMeReznov
    CallMeReznov
    Jul 24, 2019
    8
    TCP 是制导导弹,UDP 是射后不管
    FelixLiu
    FelixLiu
    Jul 24, 2019❤️2
    9
    代码写的不多吧,写多了就能发现很多不同
    1.UDP 适合多点传输,因为不需要连接,适合服务器转发给多个主机
    2.实时视频流传输 UDP,你懂的
    3.UDP 怎么处理包乱序,毕竟 TCP 不需要
    4.UDP 包要多大才合适?你知道 UDP 分片丢一个,整个 UDP 包就作废,so。。。。
    5.TCP 大多时候是比 UDP 高效的,so。。。
    laojiaqing
    laojiaqing
    Jul 24, 2019
    10
    建议你多看看书
    wweir
    wweir
    Jul 24, 2019 via Android❤️1
    11
    udp 这例子不太好吧,udp 是丢包,又不是没有校验。
    单包内部的正确性,还是值得信任的。

    还有,TCP 不是无故重传,是没收到 ack 或者包出问题才重传
    Buges
    Buges
    Jul 24, 2019 via Android❤️1
    12
    虽然协议分层让你可以不关心下层具体内容,但你总不能真就一无所知就上岗吧…
    xnode
    xnode
    Jul 24, 2019
    13
    tcp 是彬彬有礼的表白
    udp 是直接脱裤子就上
    jasonyang9
    jasonyang9
    Jul 24, 2019
    14
    @wweir 假设每个字一是个包
    q397064399
    q397064399
    Jul 24, 2019
    15
    一个是可靠性传输

    一个是不可靠性传输, 有根本性的区别吧,平时写代码不考虑 udp 的丢包情况?
    caola
    caola
    Jul 24, 2019
    16
    草案中的 HTTP3 就是基于 UDP,草案一但通过,应该用不久就会代替 TCP 成为主流
    mattx
    mattx
    Jul 24, 2019
    17
    没写过 udp 代码吧? 写 udp 连接代码要在逻辑层考虑可靠(会丢包和乱序等)

    udp 比 tcp 好的地方是, tcp 拥塞控制(重传, 丢包策略等)非常复杂, 在一些情况下表现不好, 而且比较公平
    封装的 udp 可以用更不公平的策略等, 可以去看看 kcp github 官网介绍.
    twoyuan
    twoyuan
    Jul 24, 2019❤️9
    18
    hansenwang
    hansenwang
    Jul 24, 2019 via iPhone
    19
    @twoyuan 666
    Yyyye
    Yyyye
    Jul 24, 2019 via Android
    20
    tcpip 那本书里面有的
    zibber
    zibber
    Jul 24, 2019
    21
    怪兽的设备就是 tcp 检查设备心跳 upd 发送业务数据
    CEBBCAT
    CEBBCAT
    Jul 24, 2019
    22
    这个帖到底是想说什么啊,实现细节 Google 一大吧,吐槽这个节点也不太对吧
    gliyechen
    gliyechen
    Jul 24, 2019
    23
    tcp 会保证数据包被收到,需要对方反馈。
    udp 无所谓对方收不收到,反正我发出去了。
    taogen
    taogen
    Jul 24, 2019 via Android
    24
    1. TCP 是面向连接(三次握手),UDP 是无连接的。
    2. TCP 提供可靠数据传输服务,UDP 提供不可靠传输。
    3. TCP 有拥塞控制(传输速度根据丢包情况调整),UDP 最大速度传输。
    taogen
    taogen
    Jul 24, 2019 via Android
    25
    4. TCP 报文头 20 字节,UDP 报文头 8 字节
    itechify
    itechify
    Jul 24, 2019 via Android
    26
    人才楼上都是人才笑死我了
    yuanbo6
    yuanbo6
    Jul 24, 2019
    27
    TCP:
    你女朋友发给你短信:你手机开机了吗?
    你没回消息
    你女朋友继续发短信:你手机开机了吗?
    你回了:我手机开机了
    你女朋友打电话:今晚我们去吃什么啊?工作好忙我好烦…… balaba ……再见

    UDP:
    你女朋友发给你短信:你手机开机了吗?
    你没回消息
    你女朋友继续发短信:你手机开机了吗?
    你没回消息
    你女朋友发给你短信:你手机开机了吗?
    你没回消息
    ……
    你女朋友发给你短信:我们分手吧
    你开机了:卧槽?
    Mutoo
    Mutoo
    Jul 24, 2019❤️1
    28
    自己实现一个 TCP over UDP 你就知道区别了。
    stephenyin
    stephenyin
    Jul 24, 2019
    29
    @SilencerL #3 这样更直观:
    TCP:
    你 想听 一个 关于 T CP 的笑话 吗
    你想 听一个关 于 TCP 的笑 话 吗
    你想 听一个关于 TC P 的 笑话吗

    UDP:
    你想一个于 UP 笑吗
    polebug
    polebug
    Jul 24, 2019
    30
    以互喷为例
    TCP 是两个人先打声招呼:A: hi 可以开始喷了吗? B: 可以了
    然后开始回合制对喷:A: 你傻逼 B: 不,是你傻逼
    如果 A 没收到 B 的回复,会把刚刚那句再骂一遍
    注意 TCP 只能两个人对喷,别人不能加入

    UDP 是想喷就喷
    A: blablablabla 也不管 B 听没听见 A 自己喷舒服就行
    而且 A 可以喷 B 也可以同时喷 C : 你,还有你你你,你们都傻逼

    :)
    jamesliu96
    jamesliu96
    Jul 24, 2019 via Android
    31
    1. 连接 2. 可靠性 3. 拥塞控制
    wweir
    wweir
    Jul 24, 2019 via Android
    32
    @Mutoo 这有啥,直接把 udp 当 IP 用呗,反正两个特性基本一致。
    丢包的事,直接丢给内层的 TCP 重传好了
    wweir
    wweir
    Jul 24, 2019 via Android
    33
    TCP 本质上是全双工的流。
    而 udp 则是完全是数据包,拆包、序列化、丢包都要考虑。
    作为纯粹的包,可以使用很多 IP 层的特性,如广播、多拨。而 TCP 带来便利的同时,也屏蔽了很多可能性。

    从业务人员的角度看,大概可以理解为:一个是重型框架,一个是轻量封装库
    dgjungle
    dgjungle
    Jul 24, 2019
    34
    udp 是我给你传过来了哦 tcp 是在么?你是某某么?我要给你东西咯?拿好你的东西。大概是这么个意思吧
    opengps
    opengps
    Jul 24, 2019
    35
    tcp 是拨通电话对话
    udp 是隔空喊话
    cwek
    cwek
    Jul 24, 2019
    36
    @caola 其实际上是在 UDP 层实现一个用户空间的类 TCP 机制。
    alw
    alw
    Jul 24, 2019
    37
    你想知道的知识在《 TCP/IP 协议详解 卷一》,英文版更佳。
    sinxccc
    sinxccc
    Jul 24, 2019
    38
    概念几句话就能讲明白的东西,各种 xjb 类比…
    koebehshian
    koebehshian
    Jul 24, 2019
    39
    TCP 内建收到确认功能,UDP 就是就是裸的 IP 加了个端口号
    2kCS5c0b0ITXE5k2
    2kCS5c0b0ITXE5k2
    Jul 25, 2019
    40
    TCP: JD 快递
    UDP: 3 通
    fghjghf
    fghjghf
    Jul 25, 2019
    41
    我没有 JB 类比。
    tcp 三次握手 4 次挥手这个不用说了吧,关键是 tcp 每次发包,都会有 ack 验证,检测数据包是否完整。所以性能比 udp 是低了点。
    写 socket 的时候都一样的,ip+端口号
    写 webapp 的时候你肯定体会不到,框架都封装好一切了。面试瞎几把问而已
    Alex5467
    Alex5467
    Jul 25, 2019
    42
    @SilencerL 可以说是活学活用了喂
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4362 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 08:01 · PVG 16:01 · LAX 00:01 · JFK 03:01
    ♥ Do have faith in what you're doing.