趣谈网络协议
刘超
网易研究院云计算技术部首席架构师
立即订阅
39583 人已学习
课程目录
已完结 51 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为技术牛人?先搞定网络协议!
免费
第一模块 通信协议综述 (4讲)
第1讲 | 为什么要学习网络协议?
第2讲 | 网络分层的真实含义是什么?
第3讲 | ifconfig:最熟悉又陌生的命令行
第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?
第二模块 底层网络知识详解:从二层到三层 (5讲)
第5讲 | 从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?
第6讲 | 交换机与VLAN:办公室太复杂,我要回学校
第7讲 | ICMP与ping:投石问路的侦察兵
第8讲 | 世界这么大,我想出网关:欧洲十国游与玄奘西行
第9讲 | 路由协议:西出网关无故人,敢问路在何方
第二模块 底层网络知识详解:最重要的传输层 (4讲)
第10讲 | UDP协议:因性善而简单,难免碰到“城会玩”
第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松
第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难
第13讲 | 套接字Socket:Talk is cheap, show me the code
第二模块 底层网络知识详解:最常用的应用层 (4讲)
第14讲 | HTTP协议:看个新闻原来这么麻烦
第15讲 | HTTPS协议:点外卖的过程原来这么复杂
第16讲 | 流媒体协议:如何在直播里看到美女帅哥?
第17讲 | P2P协议:我下小电影,99%急死你
第二模块 底层网络知识详解:陌生的数据中心 (6讲)
第18讲 | DNS协议:网络世界的地址簿
第19讲 | HTTPDNS:网络世界的地址簿也会指错路
第20讲 | CDN:你去小卖部取过快递么?
第21讲 | 数据中心:我是开发商,自己拿地盖别墅
第22讲 | VPN:朝中有人好做官
第23讲 | 移动网络:去巴塞罗那,手机也上不了脸书
第三模块 热门技术中的应用:云计算中的网络 (5讲)
第24讲 | 云中网络:自己拿地成本高,购买公寓更灵活
第25讲 | 软件定义网络:共享基础设施的小区物业管理办法
第26讲 | 云中的网络安全:虽然不是土豪,也需要基本安全和保障
第27讲 | 云中的网络QoS:邻居疯狂下电影,我该怎么办?
第28讲 | 云中网络的隔离GRE、VXLAN:虽然住一个小区,也要保护隐私
第三模块 热门技术中的应用:容器技术中的网络 (3讲)
第29讲 | 容器网络:来去自由的日子,不买公寓去合租
第30讲 | 容器网络之Flannel:每人一亩三分地
第31讲 | 容器网络之Calico:为高效说出善意的谎言
第三模块 热门技术中的应用:微服务相关协议 (5讲)
第32讲 | RPC协议综述:远在天边,近在眼前
第33讲 | 基于XML的SOAP协议:不要说NBA,请说美国职业篮球联赛
第34讲 | 基于JSON的RESTful接口协议:我不关心过程,请给我结果
第35讲 | 二进制类RPC协议:还是叫NBA吧,总说全称多费劲
第36讲 | 跨语言类RPC协议:交流之前,双方先来个专业术语表
第四模块 网络协议知识串讲 (4讲)
第37讲 | 知识串讲:用双十一的故事串起碎片的网络协议(上)
第38讲 | 知识串讲:用双十一的故事串起碎片的网络协议(中)
第39讲 | 知识串讲:用双十一的故事串起碎片的网络协议(下)
第40讲 | 搭建一个网络实验环境:授人以鱼不如授人以渔
答疑与加餐 (9讲)
协议专栏特别福利 | 答疑解惑第一期
协议专栏特别福利 | 答疑解惑第二期
协议专栏特别福利 | 答疑解惑第三期
协议专栏特别福利 | 答疑解惑第四期
协议专栏特别福利 | 答疑解惑第五期
加餐1 | 测一测:这些网络协议你都掌握了吗?
加餐2 | 创作故事:我是如何创作“趣谈网络协议”专栏的?
加餐3 | “趣谈网络协议”专栏食用指南
第2季回归 | 这次我们来“趣谈Linux操作系统”
结束语 (1讲)
结束语 | 放弃完美主义,执行力就是限时限量认真完成
趣谈网络协议
登录|注册

第10讲 | UDP协议:因性善而简单,难免碰到“城会玩”

刘超 2018-06-08
讲完了 IP 层以后,接下来我们开始讲传输层。传输层里比较重要的两个协议,一个是 TCP,一个是 UDP。对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,最常用的就是这两个协议。由于面试的时候,这两个协议经常会被放在一起问,因而我在讲的时候,也会结合着来讲。

TCP 和 UDP 有哪些区别?

一般面试的时候我问这两个协议的区别,大部分人会回答,TCP 是面向连接的,UDP 是面向无连接的。
什么叫面向连接,什么叫无连接呢?在互通之前,面向连接的协议会先建立连接。例如,TCP 会三次握手,而 UDP 不会。为什么要建立连接呢?你 TCP 三次握手,我 UDP 也可以发三个包玩玩,有什么区别吗?
所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
例如,TCP 提供可靠交付。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。我们都知道 IP 包是没有任何可靠性保证的,一旦发出去,就像西天取经,走丢了、被妖怪吃了,都只能随它去。但是 TCP 号称能做到那个连接维护的程序做的事情,这个下两节我会详细描述。而 UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。
再如,TCP 是面向字节流的。发送的时候发的是一个流,没头没尾。IP 包可不是一个流,而是一个个的 IP 包。之所以变成了流,这也是 TCP 自己的状态维护做的事情。而 UDP 继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收。
还有 TCP 是可以有拥塞控制的。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点。UDP 就不会,应用让我发,我就发,管它洪水滔天。
因而 TCP 其实是一个有状态服务,通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行。而 UDP 则是无状态服务。通俗地说是没脑子的,天真无邪的,发出去就发出去了。
我们可以这样比喻,如果 MAC 层定义了本地局域网的传输行为,IP 层定义了整个网络端到端的传输行为,这两层基本定义了这样的基因:网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段。我们笼统地称为包。包单独传输,自行选路,在不同的设备封装解封装,不保证到达。基于这个基因,生下来的孩子 UDP 完全继承了这些特性,几乎没有自己的思想。

UDP 包头是什么样的?

我们来看一下 UDP 包头。
前面章节我已经讲过包的传输过程,这里不再赘述。当我发送的 UDP 包到达目标机器后,发现 MAC 地址匹配,于是就取下来,将剩下的包传给处理 IP 层的代码。把 IP 头取下来,发现目标 IP 匹配,接下来呢?这里面的数据包是给谁呢?
发送的时候,我知道我发的是一个 UDP 的包,收到的那台机器咋知道的呢?所以在 IP 头里面有个 8 位协议,这里会存放,数据里面到底是 TCP 还是 UDP,当然这里是 UDP。于是,如果我们知道 UDP 头的格式,就能从数据里面,将它解析出来。解析出来以后呢?数据给谁处理呢?
处理完传输层的事情,内核的事情基本就干完了,里面的数据应该交给应用程序自己去处理,可是一台机器上跑着这么多的应用程序,应该给谁呢?
无论应用程序写的使用 TCP 传数据,还是 UDP 传数据,都要监听一个端口。正是这个端口,用来区分应用程序,要不说端口不能冲突呢。两个应用监听一个端口,到时候包给谁呀?所以,按理说,无论是 TCP 还是 UDP 包头里面应该有端口号,根据端口号,将数据交给相应的应用程序。

当我们看到 UDP 包头的时候,发现的确有端口号,有源端口号和目标端口号。因为是两端通信嘛,这很好理解。但是你还会发现,UDP 除了端口号,再没有其他的了。和下两节要讲的 TCP 头比起来,这个简直简单得一塌糊涂啊!

UDP 的三大特点

UDP 就像小孩子一样,有以下这些特点:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《趣谈网络协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(72)

  • iiwoai
    每次最后的问题,应该在第二次讲课的时候给答案说出来啊
    2018-06-23
    155
  • 仁者
    我们可以把发送端和接收端比作河流的两端,把传输的数据包比作运送的石料。TCP 是先搭桥(即建立连接)再一车一车地运(即面向数据流),确保可以顺利到达河对岸,当遇到桥上运输车辆较多时可以自行控制快慢(即拥堵控制);UDP 则是靠手一个一个地扔(即无连接、基于数据报),不管货物能否顺利到达河对岸,也不关心扔的快慢频率。
    2019-02-21
    47
  • 李小四
    网络_10
    # 作业
    - 连接:在自己监听的端口接收到连接的请求,然后经过“三次握手”,维护一定的数据结构和对方的信息,确认了该信息:我发的内容对方会接收,对方发的内容我也会接收,直到连接断开。
    - 断开:经过“四次挥手”确保双方都知道且同意对方断开连接,然后在remove为对方维护的数据结构和信息,对方之后发送的包也不会接收,直到 再次连接。

    我看到有的同学说,TCP是建立了一座桥,我认为这个比喻不恰当,TCP更好的比喻是在码头上增加了记录人员,核查人员和督导人员,至于IP层和数据链路层,它没有任何改造。

    作者回复: 这个比喻太好了,对的TCP不是桥,是在码头上增加了记录人员,核查人员和督导人员

    2019-08-07
    33
  • 赵强强
    第一个问题:TCP连接是通过三次握手建立连接,四次挥手释放连接,这里的连接是指彼此可以感知到对方的存在,计算机两端表现为socket,有对应的接受缓存和发送缓存,有相应的拥塞控制策略
    2018-06-08
    28
  • Mr.Peng
    对包分析的工具及书籍分享一些!
    2018-06-10
    25
  • Richie
    TCP/UDP建立连接的本质就是在客户端和服务端各自维护一定的数据结构(一种状态机),来记录和维护这个“连接”的状态 。并不是真的会在这两个端之间有一条类似“网络专线”这么一个东西(在学网络协议之前脑海里是这么想象的)。

    在IP层,网络情况该不稳定还是不稳定,数据传输走的是什么路径上层是控制不了的,TCP能做的只能是做更多判断,更多重试,更多拥塞控制之类的东西。

    作者回复: 理解的太对了

    2019-06-30
    24
  • 蓝色理想
    似懂非懂,看来还是没懂╯□╰…如果有代码演示看看效果就很好了👍
    2018-06-08
    13
  • o0oi1i
    老师您推荐的书呢?大家都还等着呢!
    2018-06-30
    12
  • Chok Wah
    可以详细讲讲UDP常见小技巧,面试常问。
    比如UDP发过去怎么确认收到;
    基于UDP封装的协议一般会做哪些措施。
    2018-06-12
    11
  • 杨松宝
    连接:3次握手之后,咱俩之间确认自己发的东西对方都能收到,然后咱俩各自维护这种状态!连接就建立了……
    2018-06-08
    10
  • 埃罗芒阿老师
    1.两端各自记录对方的IP端口序列号连接状态等,并且维护连接状态
    2.三次握手四次挥手
    2018-06-09
    9
  • Havid
    包最终都是通过链路层、物量层这样子一个一个出去的,所以连接只是一种逻辑术语,并不存在像管道那样子的东西,连接在这里相当于双方一种约定,双方按说好的规矩维护状态。
    2018-09-14
    8
  • twelve
    以前觉得UDT应用不广,听了课之后觉得UDT的应用很多,但实际怎么查看应用用的是TCP还是UDP
    呢?
    2018-07-03
    1
    6
  • 小q
    上面说可以推荐本分接析包的书籍,是什么书呀
    2018-06-15
    5
  • Yangjing
    后面可以讲一下实际的分析不?比如用工具 wireshark 对包进行分析讲解,自己能看懂一部分简单的

    作者回复: 因为是音频课程,所以不太适合对包进行分析讲解,但是可以推荐本书,有很多书已经非常好了

    2018-06-08
    5
  • 耿老的竹林

    UDP协议看起来简单,恰恰提供给了巨大的扩展空间。
    2018-09-22
    4
  • 回家
    老师好,如何理解HTTP协议的多数据通道共享一个连接?

    作者回复: 一个tcp连接

    2018-11-26
    3
  • Eric
    深入浅出,少见的课程,很好!
    2018-08-08
    3
  • horsechestnut
    计算机会在内核中维护一个数据结构,以及状态机,去保证tcp是连接的
    2018-08-07
    3
  • 次郎
    能不能讲解一些打洞之类的知识?
    2018-07-02
    3
收起评论
72
返回
顶部