透视HTTP协议
罗剑锋(Chrono)
奇虎360技术专家,Nginx/OpenResty开源项目贡献者
立即订阅
6077 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|To Be a HTTP Hero
免费
破冰篇 (7讲)
01 | 时势与英雄:HTTP的前世今生
02 | HTTP是什么?HTTP又不是什么?
03 | HTTP世界全览(上):与HTTP相关的各种概念
04 | HTTP世界全览(下):与HTTP相关的各种协议
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
06 | 域名里有哪些门道?
07 | 自己动手,搭建HTTP实验环境
基础篇 (7讲)
08 | 键入网址再按下回车,后面究竟发生了什么?
09 | HTTP报文是什么样子的?
10 | 应该如何理解请求方法?
11 | 你能写出正确的网址吗?
12 | 响应状态码该怎么用?
13 | HTTP有哪些特点?
14 | HTTP有哪些优点?又有哪些缺点?
进阶篇 (8讲)
15 | 海纳百川:HTTP的实体数据
16 | 把大象装进冰箱:HTTP传输大文件的方法
17 | 排队也要讲效率:HTTP的连接管理
18 | 四通八达:HTTP的重定向和跳转
19 | 让我知道你是谁:HTTP的Cookie机制
20 | 生鲜速递:HTTP的缓存控制
21 | 良心中间商:HTTP的代理服务
22 | 冷链周转:HTTP的缓存代理
安全篇 (7讲)
23 | HTTPS是什么?SSL/TLS又是什么?
24 | 固若金汤的根本(上):对称加密与非对称加密
25 | 固若金汤的根本(下):数字签名与证书
26 | 信任始于握手:TLS1.2连接过程解析
27 | 更好更快的握手:TLS1.3特性解析
28 | 连接太慢该怎么办:HTTPS的优化
29 | 我应该迁移到HTTPS吗?
飞翔篇 (4讲)
30 | 时代之风(上):HTTP/2特性概览
31 | 时代之风(下):HTTP/2内核剖析
32 | 未来之路:HTTP/3展望
33 | 我应该迁移到HTTP/2吗?
探索篇 (5讲)
34 | Nginx:高性能的Web服务器
35 | OpenResty:更灵活的Web服务器
36 | WAF:保护我们的网络服务
37 | CDN:加速我们的网络服务
38 | WebSocket:沙盒里的TCP
总结篇 (2讲)
39 | HTTP性能优化面面观(上)
40 | HTTP性能优化面面观(下)
答疑篇 (2讲)
41 | Linux/Mac实验环境搭建与URI查询参数
42 | DHE/ECDHE算法的原理
结束语 (1讲)
结束语 | 做兴趣使然的Hero
透视HTTP协议
登录|注册

05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?

Chrono 2019-06-07
在上一讲中,我简单提到了 TCP/IP 协议,它是 HTTP 协议的下层协议,负责具体的数据传输工作。并且还特别说了,TCP/IP 协议是一个“有层次的协议栈”。
在工作中你一定经常听别人谈起什么“四层负载均衡”“七层负载均衡”,什么“二层转发”“三层路由”,那么你真正理解这些层次的含义吗?
网络分层的知识教科书上都有,但很多都是“泛泛而谈”,只有“学术价值”,于是就容易和实际应用“脱节”,造成的后果就是“似懂非懂”,真正用的时候往往会“一头雾水”。
所以,今天我就从 HTTP 应用的角度,帮你把这些模糊的概念弄清楚。

TCP/IP 网络分层模型

还是先从 TCP/IP 协议开始讲起,一是因为它非常经典,二是因为它是目前事实上的网络通信标准,研究它的实用价值最大。
TCP/IP 当初的设计者真的是非常聪明,创造性地提出了“分层”的概念,把复杂的网络通信划分出多个层次,再给每一个层次分配不同的职责,层次内只专心做自己的事情就好,用“分而治之”的思想把一个“大麻烦”拆分成了数个“小麻烦”,从而解决了网络通信的难题。
你应该对 TCP/IP 的协议栈有所了解吧,这里我再贴一下层次图。
TCP/IP 协议总共有四层,就像搭积木一样,每一层需要下层的支撑,同时又支撑着上层,任何一层被抽掉都可能会导致整个协议栈坍塌。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《透视HTTP协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(37)

  • 火车日记
    1 二层转发:设备工作在链路层,帧在经过交换机设备时,检查帧的头部信息,拿到目标mac地址,进行本地转发和广播
    2 三层路由:设备工作在ip层,报文经过有路由功能的设备时,设备分析报文中的头部信息,拿到ip地址,根据网段范围,进行本地转发或选择下一个网关
    3 dns,网络请求的第一步是域名解析,所以工作在应用层
    4 cdn,应用层

    作者回复: ✔️

    2019-06-07
    40
  • 壹笙☞漂泊
    课后题
    1、二层转发:二层应该指数据链路层,工作在二层的设备,通过查找到目标MAC地址,进行数据转发
       三层路由:三层应该指网络层,工作在三层的设备,通过解析数据包头信息,找到目标IP地址,转发数据
    2、DNS处于应用层
    3、CDN处于应用层

    总结:
    1、TCP/IP协议是一个“有层次的协议栈”
    TCP/IP
    2、TCP/IP协议总共有四层,顺序从下往上 链接层->网际层->传输层->应用层
    3、链接层 link layer ,负责在底层网络上发送原始数据包,使用MAC地址来标记网络上的设备,所以也叫MAC层
    4、网际层 internet layer,IP协议所在层,在链接层的基础上,用IP地址取代MAC地址,把许多局域/广域网连接成虚拟的巨大网络,在这个网络里找设备时只要把IP地址再翻译成MAC地址就可以
    5、传输层 transport layer,TCP、UDP协议所在层,这个层次协议的职责是保证数据在IP地址标记的两点之间可靠地传输。
    6、TCP和UDP区别:
        TCP 有状态 需要先建立连接才能发送数据 保证数据不丢失不重复 数据是连续的字节流,有先后顺序
        UDP 无状态 不需要先建立连接也可以发送数据 不保证数据一定会发送到对方 数据是分散的小数据包,顺序发、乱序收
    7、应用层 application layer,Telnet、SSH、FTP、SMTP、HTTP
    8、MAC层的传输单位是帧(frame),IP层的传输单位是包(packet),TCP层的传输单位是段(segment),HTTP的传输单位是消息或报文(message)。统称为数据包
    9、OSI网络分层模型
        1.第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
        2.第二层:数据链路层,它基本相当于TCP/IP的链接层;
        3.第三层:网络层,相当于TCP/IP里的网际层;
        4.第四层:传输层,相当于TCP/IP里的传输层;
        5.第五层:会话层,维护网络中的连接状态,即保持会话和同步;
        6.第六层:表示层,把数据转换为合适、可理解的语法和语义;
        7.第七层:应用层,面向具体的应用传输数据。
    10、TCP/IP四层模型和OSI七层网络模型的映射关系
        1.第一层:物理层,TCP/IP里无对应;
        2.第二层:数据链路层,对应TCP/IP的链接层;
        3.第三层:网络层,对应TCP/IP的网际层;
        4.第四层:传输层,对应TCP/IP的传输层;
        5.第五、六、七层:统一对应到TCP/IP的应用层。
    11、*四层负载均衡:工作在传输层上,基于TCP/IP协议的特性,例如Ip地址,端口号等实现对后端服务器的负载均衡
    12、*七层负载均衡:工作在应用层上,看到的是HTTP协议,解析HTTP报文里的URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器

    作者回复: 总结的非常全面,amazing!

    2019-06-10
    19
  • 无野
    1. 二层转发,工作在二层的设备(i.e交换机)只认识MAC地址,所以建立MAC地址和端口的映射关系,来决定往哪个端口转发。

    2.三层路由,工作在三层的设备(i.e路由器)利用ip地址和port,根据路由表选择最佳路径来转发包。

    3.dns属于应用层

    4.cdn应该工作在应用层

    作者回复: 说的很对

    2019-06-07
    9
  • wheat7
    疑问:按照tcp/ip详解 tcp/ip模型为五层,老师所说为4层
    另外,最后一个常见的层层打包说法,我认为是一个误导,因为每一层MTU都不同,这种说法忽略了每一层对上一层数据的分片,造成了”http”报文加TCP头再加IP头就变成了网络层数据的误导,其实IPV4 MTU为64k,而HTTP和TCP层并没有限制,一帧以太网帧MTU为1500b,同理
    此外,每一层数据都可以统称为包,这个说法也存在误导,包含义表示有边界,而如Tcp是面向流的,没有边界

    作者回复: 关于tcp/ip的层次,有说4层,也有说5层的,我说的是最普遍的一种说法,可以参见wiki。

    第二个,这只是在应用层的视角做的一个比喻,正文里也说了,省略了很多细节,如果要深究的话可能篇幅不够。

    第三个,tcp/ip里都是要切分成数据包来发的,比如tcp的segment,“包”只是为了说起来方便。

    看得出来对tcp/ip很精通,有叙述不严谨的地方还请多谅解指正,大家共同进步。

    2019-06-09
    5
  • 业余爱好者
    基础太差,第一题不太懂。

    第二题应该是应用层吧。dns域名解析是需要请求dns服务器的,而服务器本质是一个软件(应用),不是操作系统处理,由"两个凡是"定理推出,dns为应用层协议。

    第三题不太清楚,个人猜想也是应用层。cdn与dns一样,并非是通信过程必须的一种机制,而只是一个满足特定场景下某种需求的一个"应用",所以应该也是应用层。

    作者回复: 对的,可以参考其他同学的回答。

    2019-06-07
    5
  • 不矫情不做作那是我
    老师,我看有的书上面说TCP/IP 模型早期是四层,现在划分成五层了

    作者回复: 我觉得大家不用纠结这些细节,自己理解了就好。

    有兴趣可以参考RFC1180。

    2019-06-10
    2
  • 小美
    首先感谢老师,之前不太理解七层与四层的对应关系,因此很难去记忆,看了之后恍然大悟。但有点疑惑的是,
    最后说的两个凡是中的第一个是说「四层或四层以下」指的是传输层及以下是由操作系统负责的吗?而「七层」指的是应用层到会话层是应用程序负责的吗?

    课后作业:
    1. 第一次听说这两个概念,查了下资料。请老师帮忙过目、检查,首先这里的二层和三层指的都是 OSI 中的对应的层级;二层转发就意味着是在数据链路层(Data Link Layer)做的转发,基于 MAC 地址,通常指的是交换机;三层路由意味着是在网络层(Network Layer)做的转发,通常指的是路由器(当然也有路由功能的交换机);当数据传输到网络层,路由器会检查目的 IP 是否与自己处于同一网段,是则进行二层转发即请求目的主机的 MAC 地址,否则进行三层转发即进入路由的递归查找。
    2. DNS 属于应用层,其本身并不负责传输、网际的实际操作,只是将域名解析为 IP,方便下一层的使用;
    3. CDN 也应当属于应用层,类似于 DNS 他们都是针对传输后的数据内容的操作,而非实际去处理传输等操作。

    作者回复: 你理解的很对。

    当然,“两个凡是”也不是绝对的,比如dpdk就把tcp协议栈都拿到了操作系统外实现,但大多数情况下传输层以下都由操作系统负责。

    2019-06-09
    2
  • bywuu
    二层转发:设备工作在链接层,获取了数据报的头部信息之后,根据目标的MAC地址,进行本地转发和广播
    三层路由:设备工作在IP层,通过分析数据报的头部信息,得到IP地址,根据网段范围,进行本地转发或选择下一个网关
    dns和cdn都在应用层

    作者回复: ✔️

    2019-06-07
    2
  • hogen
    老师慢慢写,太难的话看不懂了

    作者回复: 多谢支持。

    2019-06-07
    2
  • 啦啦啦
    看到现在,这节课收获最大,知道了四层七层的区别

    作者回复: 继续努力,后面还有很多知识点。

    2019-07-02
    1
  • xing.org1^
    传输层这里,tcp和udp也可以用不同公司快递员送货来理解吧,tcp就像一些负责人的公司的快递员,送货时会提前打电话联系问你在不在家,可以保证把你的货物送到手上。udp则像另一种情况,直接拿着东西到你家门口,也不管你家有没有人,如果有就刚好送到你手上,没有在家就给你扔门口走了,他不保证会把快递送到你手上。

    作者回复: 这个比喻不错。

    2019-06-12
    1
  • 二楞子
    老师我想问下dns是解析ip地址的吗?ip在二层 为什么dns是在应用层呢?

    作者回复: dns使用udp,在传输层之上,所以是应用层。

    2019-06-11
    1
  • Carson
    1. 二层转发:指的是OSI中数据链路层设备(交换机)通过MAC地址来决定转发到哪个端口;三层路由:指的是OSI中网络层设备(路由器)通过Ip地址来决定路由到哪个网络
    2. 应用层
    3. 应用层

    作者回复: √

    2019-06-10
    1
  • Geek_987169
    老师,请教个问题,最后的"两个凡是"来区分是四层还是七层,是什么意思,比如现在我写代码实现了了一个简单的浏览器,我就应该是在应用层啊,实在是有些想不明白。还是一台主机同时存在四层和七层?

    作者回复: tcp/ip是个“协议栈”,当然是在每台机器上从底层到顶层都有的,不能拆开单独存在。

    “两个凡是”是用来帮助你理解协议栈工作的,应用层必须依赖下层才能工作,你可以再看一下课程里面的例子,再体会一下协议栈的工作过程。

    2019-06-09
    1
  • -W.LI-
    二层转发:对应TCP/IP的链接层,MAC层,转发二字请教小老师了。
    三层路由:对应TCP/IP的网际层,IP协议处于这一层。路由器就是根据IP地址路由的。原理不知。
    DNS和CDN都处于应用层
    理由1:我理解的是传输层只知道IP和端口,和URI相关的都是应用层了,DNS解析URI上的域名,CDN通过URI缓存数据(URI上有随机参数会导致回源)
    理由2:老师最后讲的所有和操作系统相关的都是4层及以下。这两个都是程序不符合。

    作者回复: 其他同学已经回答的很好了,可以参考。

    2019-06-07
    1
  • QQ怪
    这一节课,给我网络小白上了一节非常棒的课,简单易懂,竟然全懂了。老师真棒👍

    作者回复: thanks。

    2019-06-07
    1
  • Geek_d4dee7
    二层数据链路层犹如货车在高速公路上从出发地开往目的地 重点在公路这种基础设施
    三层网际层Ip协议负责定位起始站 中转站 终点站
    DNS 跟http 应该在同一层都是应用层
    CDN 是个代理除了链接层感觉上面三层都有
    直观的理解 说错了求批评指正

    作者回复: cdn是“内容分发网络”,要看到内容就必须在应用层。

    2019-06-07
    1
  • 火车日记
    发快递的案例很形象,加深了理解!

    作者回复: 也可以试着再找一些这样的例子。

    2019-06-07
    1
  • keep it simple
    1.你能用自己的话解释一下“二层转发”“三层路由”吗?
    答:二层转发使用MAC地址作为对象进行寻址,三层路由使用IP地址作为对象进行寻址。
    2.你认为上一讲中的 DNS 协议位于哪一层呢?
    答:处于TCP/IP模型的应用层,它通常使用UDP作为传输方式
    3.你认为 CDN 工作在那一层呢?
    答:工作在七层,因为它需要以HTTP协议来响应客户端请求,并作为客户端从源站回源。当然也有利用到四层负载均衡的技术,来实现集群服务

    作者回复: 都回答的很对。

    2019-11-19
  • 极客的老师写课都很用心,谢谢

    作者回复: 有疑问欢迎提出来。

    2019-11-13
收起评论
37
返回
顶部