首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

TCP 和 UDP 的区别

  •  
  •   woahishui · 134 天前 via Android · 3908 次点击
    这是一个创建于 134 天前的主题,其中的信息可能已经有所发展或是发生改变。
    昨天被问了这个问题,想想挺无奈的说有区别吧,反正概念上都说有,但是写代码的时候确实没感觉啊。
    第 1 条附言  ·  134 天前
    谢谢各位,以为写点 TCP 的就算懂了,呵呵,我在多看看
    42 回复  |  直到 2019-07-25 09:48:39 +08:00
        1
    d5   134 天前   ♥ 1
    udp 是尽力而为的传输,tcp 要先握手,就算不记得专业词汇,也总能说上点什么吧。
        2
    wysnylc   134 天前
    百度的已经够详细了
        3
    SilencerL   134 天前   ♥ 27
    TCP:
    你想听一个关于 TCP 的笑话吗
    你想听一个关于 TCP 的笑话吗
    你想听一个关于 TCP 的笑话吗

    UDP:
    你想一个于 UP 笑吗

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

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

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

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

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

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

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

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

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