极客时间已完结课程限时免费阅读

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

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

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

讲述:Chrono

时长09:56大小13.63M

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

TCP/IP 网络分层模型

还是先从 TCP/IP 协议开始讲起,一是因为它非常经典,二是因为它是目前事实上的网络通信标准,研究它的实用价值最大。
TCP/IP 当初的设计者真的是非常聪明,创造性地提出了“分层”的概念,把复杂的网络通信划分出多个层次,再给每一个层次分配不同的职责,层次内只专心做自己的事情就好,用“分而治之”的思想把一个“大麻烦”拆分成了数个“小麻烦”,从而解决了网络通信的难题。
你应该对 TCP/IP 的协议栈有所了解吧,这里我再贴一下层次图。
TCP/IP 协议总共有四层,就像搭积木一样,每一层需要下层的支撑,同时又支撑着上层,任何一层被抽掉都可能会导致整个协议栈坍塌。
我们来仔细地看一下这个精巧的积木架构,注意它的层次顺序是“从下往上”数的,所以第一层就是最下面的一层。
第一层叫“链接层”(link layer),负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层。
第二层叫“网际层”或者“网络互连层”(internet layer),IP 协议就处在这一层。因为 IP 协议定义了“IP 地址”的概念,所以就可以在“链接层”的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。
第三层叫“传输层”(transport layer),这个层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输,是 TCP 协议工作的层次,另外还有它的一个“小伙伴”UDP。
TCP 是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。而 UDP 则比较简单,它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方。两个协议的另一个重要区别在于数据的形式。TCP 的数据是连续的“字节流”,有先后顺序,而 UDP 则是分散的小数据包,是顺序发,乱序收。
关于 TCP 和 UDP 可以展开讨论的话题还有很多,比如最经典的“三次握手”和“四次挥手”,一时半会很难说完,好在与 HTTP 的关系不是太大,以后遇到了再详细讲解。
协议栈的第四层叫“应用层”(application layer),由于下面的三层把基础打得非常好,所以在这一层就“百花齐放”了,有各种面向具体应用的协议。例如 Telnet、SSH、FTP、SMTP 等等,当然还有我们的 HTTP。
MAC 层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

OSI 网络分层模型

看完 TCP/IP 协议栈,你可能要问了,“它只有四层,那常说的七层怎么没见到呢?”
别着急,这就是今天要说的第二个网络分层模型:OSI,全称是“开放式系统互联通信参考模型”(Open System Interconnection Reference Model)。
TCP/IP 发明于 1970 年代,当时除了它还有很多其他的网络协议,整个网络世界比较混乱。
这个时候国际标准组织(ISO)注意到了这种现象,感觉“野路子”太多,就想要来个“大一统”。于是设计出了一个新的网络分层模型,想用这个新框架来统一既存的各种网络协议。
OSI 模型分成了七层,部分层次与 TCP/IP 很像,从下到上分别是:
第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
第三层:网络层,相当于 TCP/IP 里的网际层;
第四层:传输层,相当于 TCP/IP 里的传输层;
第五层:会话层,维护网络中的连接状态,即保持会话和同步;
第六层:表示层,把数据转换为合适、可理解的语法和语义;
第七层:应用层,面向具体的应用传输数据。
至此,我们常说的“四层”“七层”就出现了。
不过国际标准组织心里也很清楚,TCP/IP 等协议已经在许多网络上实际运行,再推翻重来是不可能的。所以,OSI 分层模型在发布的时候就明确地表明是一个“参考”,不是强制标准,意思就是说,“你们以后该干什么还干什么,我不管,但面子上还是要按照我说的来”。
但 OSI 模型也是有优点的。对比一下就可以看出,TCP/IP 是一个纯软件的栈,没有网络应有的最根基的电缆、网卡等物理设备的位置。而 OSI 则补足了这个缺失,在理论层面上描述网络更加完整。
还有一个重要的形式上的优点:OSI 为每一层标记了明确了编号,最底层是一层,最上层是七层,而 TCP/IP 的层次从来只有名字而没有编号。显然,在交流的时候说“七层”要比“应用层”更简单快捷,特别是英文,对比一下“Layer seven”与“application layer”。
综合以上几点,在 OSI 模型之后,“四层”“七层”这样的说法就逐渐流行开了。不过在实际工作中你一定要注意,这种说法只是“理论上”的层次,并不是与现实完全对应。

两个分层模型的映射关系

现在我们有了两个网络分层模型:TCP/IP 和 OSI,新的问题又出现了,一个是四层模型,一个是七层模型,这两者应该如何互相映射或者说互相解释呢?
好在 OSI 在设计之初就参考了 TCP/IP 等多个协议,可以比较容易但不是很精确地实现对应关系。
第一层:物理层,TCP/IP 里无对应;
第二层:数据链路层,对应 TCP/IP 的链接层;
第三层:网络层,对应 TCP/IP 的网际层;
第四层:传输层,对应 TCP/IP 的传输层;
第五、六、七层:统一对应到 TCP/IP 的应用层。
所以你看,这就是“理想与现实”之间的矛盾。理想很美好,有七层,但现实很残酷,只有四层,“多余”的五层、六层就这样“消失”了。
但这也有一定的实际原因。
OSI 的分层模型在四层以上分的太细,而 TCP/IP 实际应用时的会话管理、编码转换、压缩等和具体应用经常联系的很紧密,很难分开。例如,HTTP 协议就同时包含了连接管理和数据格式定义。
到这里,你应该能够明白一开始那些“某某层”的概念了。
所谓的“四层负载均衡”就是指工作在传输层上,基于 TCP/IP 协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡。
所谓的“七层负载均衡”就是指工作在应用层上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器。

TCP/IP 协议栈的工作方式

TCP/IP 协议栈是如何工作的呢?
你可以把 HTTP 利用 TCP/IP 协议栈传输数据想象成一个发快递的过程。
假设你想把一件毛绒玩具送给朋友,但你要先拿个塑料袋套一下,这件玩具就相当于 HTTP 协议里要传输的内容,比如 HTML,然后 HTTP 协议为它加一个 HTTP 专用附加数据。
你把玩具交给快递小哥,为了保护货物,他又加了层包装再贴了个标签,相当于在 TCP 层给数据再次打包,加上了 TCP 头。
接着快递小哥下楼,把包裹放进了三轮车里,运到集散点,然后再装进更大的卡车里,相当于在 IP 层、MAC 层对 TCP 数据包加上了 IP 头、MAC 头。
之后经过漫长的运输,包裹到达目的地,要卸货再放进另一位快递员的三轮车,就是在 IP 层、MAC 层传输后拆包。
快递员到了你朋友的家门口,撕掉标签,去除了 TCP 层的头,你朋友再拆掉塑料袋包装,也就是 HTTP 头,最后就拿到了玩具,也就是真正的 HTML 页面。
这个比喻里省略了很多 TCP/IP 协议里的细节,比如建连、路由、数据切分与重组、错误检查等,但核心的数据传输过程是差不多的。
HTTP 协议的传输过程就是这样通过协议栈逐层向下,每一层都添加本层的专有数据,层层打包,然后通过下层发送出去。
接收数据则是相反的操作,从下往上穿过协议栈,逐层拆包,每层去掉本层的专有头,上层就会拿到自己的数据。
但下层的传输过程对于上层是完全“透明”的,上层也不需要关心下层的具体实现细节,所以就 HTTP 层次来看,它不管下层是不是 TCP/IP 协议,看到的只是一个可靠的传输链路,只要把数据加上自己的头,对方就能原样收到。
我为这个过程画了一张图,你可以对照着加深理解。

小结

这次我们学习了 HTTP 所在的网络分层模型,它是工作中常用的交流语言,在这里简单小结一下今天的内容。
TCP/IP 分为四层,核心是二层的 IP 和三层的 TCP,HTTP 在第四层;
OSI 分为七层,基本对应 TCP/IP,TCP 在第四层,HTTP 在第七层;
OSI 可以映射到 TCP/IP,但这期间一、五、六层消失了;
日常交流的时候我们通常使用 OSI 模型,用四层、七层等术语;
HTTP 利用 TCP/IP 协议栈逐层打包再拆包,实现了数据传输,但下面的细节并不可见。
有一个辨别四层和七层比较好的(但不是绝对的)小窍门,“两个凡是”:凡是由操作系统负责处理的就是四层或四层以下,否则,凡是需要由应用程序(也就是你自己写代码)负责处理的就是七层

课下作业

你能用自己的话解释一下“二层转发”“三层路由”吗?
你认为上一讲中的 DNS 协议位于哪一层呢?
你认为 CDN 工作在那一层呢?
欢迎你把自己的答案写在留言区,与我和其他同学一起讨论。如果你觉得有所收获,也欢迎把文章分享给你的朋友。
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 30

提建议

上一篇
04 | HTTP世界全览(下):与HTTP相关的各种协议
下一篇
06 | 域名里有哪些门道?
unpreview
 写留言

精选留言(64)

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

    作者回复: ✔️

    共 4 条评论
    154
  • 壹笙☞漂泊
    2019-06-10
    课后题 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!

    共 3 条评论
    95
  • wheat7
    2019-06-09
    疑问:按照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很精通,有叙述不严谨的地方还请多谅解指正,大家共同进步。

    52
  • 2020-03-24
    1:你能用自己的话解释一下“二层转发”“三层路由”吗? 不能,😂 二层转发、三层路由,貌似第一次听说这两个概念,确实不知道是啥意思。不过拆开的话,到可以说一下自己的理解,首先,说一下自己对二层、三层的理解,网络通信协议非常复杂,如果让我来设计一个网络通信协议我真不知道从哪里着手,假设世界上就只有两台电脑,要这两台电脑通信,或者说聊天,我去这咋办到?能办到的可以称得上是神人,真的!我感觉很神奇,两台机器可以聊天,想想都好神奇,不过事实上他们确实可以。这是怎么做到呢? 首先,电脑只认识0或1,0或1其实可以认为是一种对立统一的矛盾体,简单的把世界一分为二。那在计算机的世界中0或1是什么呢?或者说是怎么体现的呢?核心在于对立统一,比如:用光盘上的ao点表示0那tu就是1,用磁盘上细磁针的北极表示0那南极就是1,用交流电的某个区间表示0那其他区间就是1,用直流电的低电平表示0那高电平就是1,理解了0或1在计算机的世界里是怎么表示的再加上计算机只认识0或1,那使两台计算机谈恋爱就是有可能的啦!只要从一台机器上往另一台机器上发送能表示0或1的东西,再加上约定好发送多少个0或1的组合表示什么意思,那两台计算机就能聊天了,剩下的就是怎么发生0或1的组合?以及约定各种0或1的组合是什么意思?怎么接受0或1的组合?目前世界上仅有两台电脑不用什么DNS、IP、CDN等等,如果世界有100亿台电脑呢?那怎么知道该给谁发信息?怎么表示这么多地址?怎么记住这么多地址?太复杂了,必须采用分而治之的思想,而且要灵活互不影响,所以,网络通信协议就被分成了多层每一层只关心自己的事情,上层依赖下层的接口或数据但是不关心她是怎么实现的,于是就有了链路层、网际层、传输层、应用层。机器毕竟是机器,想谈恋爱的是人类,所以,越靠上对人类越友好,如果仅仅是为了让机器能交流有些层是没有存在的理由的。OK,我觉得我把网络协议的分层结构给说明白了,那二层转发、三层路由是什么呢?二层、三层代表网络协议栈的层次,转发是倒腾数据,路由是倒腾该往哪去。每一层都有许多网络设备,目前不清楚都是啥?工作原理是啥?所以,具体怎么倒腾的细节就不清楚了,这个需要继续学习。 2:你认为上一讲中的 DNS 协议位于哪一层呢? 简化人类的记忆,对人友好靠上,应用层 3:你认为 CDN 工作在那一层呢? 加速人类获取信息的速度,对人友好靠上,应用层
    展开

    作者回复: 学习态度认真,awesome!!

    共 5 条评论
    21
  • Young
    2019-06-07
    1. 二层转发,工作在二层的设备(i.e交换机)只认识MAC地址,所以建立MAC地址和端口的映射关系,来决定往哪个端口转发。 2.三层路由,工作在三层的设备(i.e路由器)利用ip地址和port,根据路由表选择最佳路径来转发包。 3.dns属于应用层 4.cdn应该工作在应用层
    展开

    作者回复: 说的很对

    共 2 条评论
    16
  • 蚂蚁内推+v
    2019-06-09
    首先感谢老师,之前不太理解七层与四层的对应关系,因此很难去记忆,看了之后恍然大悟。但有点疑惑的是, 最后说的两个凡是中的第一个是说「四层或四层以下」指的是传输层及以下是由操作系统负责的吗?而「七层」指的是应用层到会话层是应用程序负责的吗? 课后作业: 1. 第一次听说这两个概念,查了下资料。请老师帮忙过目、检查,首先这里的二层和三层指的都是 OSI 中的对应的层级;二层转发就意味着是在数据链路层(Data Link Layer)做的转发,基于 MAC 地址,通常指的是交换机;三层路由意味着是在网络层(Network Layer)做的转发,通常指的是路由器(当然也有路由功能的交换机);当数据传输到网络层,路由器会检查目的 IP 是否与自己处于同一网段,是则进行二层转发即请求目的主机的 MAC 地址,否则进行三层转发即进入路由的递归查找。 2. DNS 属于应用层,其本身并不负责传输、网际的实际操作,只是将域名解析为 IP,方便下一层的使用; 3. CDN 也应当属于应用层,类似于 DNS 他们都是针对传输后的数据内容的操作,而非实际去处理传输等操作。
    展开

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

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

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

    7
  • 业余爱好者
    2019-06-07
    基础太差,第一题不太懂。 第二题应该是应用层吧。dns域名解析是需要请求dns服务器的,而服务器本质是一个软件(应用),不是操作系统处理,由"两个凡是"定理推出,dns为应用层协议。 第三题不太清楚,个人猜想也是应用层。cdn与dns一样,并非是通信过程必须的一种机制,而只是一个满足特定场景下某种需求的一个"应用",所以应该也是应用层。
    展开

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

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

    作者回复: 多谢支持。

    4
  • 镜花.水月
    2022-01-22
    1.你能用自己的话解释一下“二层转发”“三层路由”吗? 二层转发:交换机二层的转化设计到两个关健的线程:地址学习线程和报文转发线程 地址学习线程: 1.交换机接收到网段上所有的数据帧,利用数据帧中的源MAC地址建立MAC地址表 2. 端口移动机制:交换机如果发现一个报文的入端口和报文中源MAC地址的所在端不同,就产生端口移动,将MAC地址重新学习到新的端口 3.交换机老化机制:交换机在很长一段时间之内没有接到某主机发出的报文。在该对应主机的MAC地址将会被删除,等下次报文来的时候会重新学习 报文转发线程: 1.交换机在MAC地址表中查找数据帧的目的MAC地址, 如果存在目的MAC地址,就转发该数据帧到目的MAC地址的相应端口, 如果不存在,就向全部端口发送 2.如果交换机收到的报文MAC地址和目的MAC地址所在的端口是同一个,则丢弃该报文 3.交换机向入端口以外的其它所有端口转发广播报文。 报文转发引入 VLAN (虚拟局域网)的概念管理上得到了很好的帮助。限制了局部的网络流量,在一定程度上提高个网络的处理能力 虚拟的工作组,通过灵活的VLAN 设置,把不同的用户划分到不同的工作组,3.安全性的提高,一个VLAN内的用户和其他VLAN 内的用户不能互通。提高安全性。 而且报文转发线程的三点发送端口的范围也得到了限制,从向全部端口发送数据帧,面向从一个局部虚拟网络发送.很好的控制了广播范围 =======三层交换流程======== 三层交换流程 假设现在有两个VLAN 虚拟局域网 VLAN-1, VLAN-2。VLAN-1下有路由接口A, 路由接口B VLAN-2下有路由接口C, AB之间通讯(A向B发起ping请求为例)。 1.A 检查B路由接口的IP地址,发现属于同一个网段。 2.A ---> B ARP请求报文,该报文在VLAN-1内广播。 ARP (Address Resolution Protocol 地址解析协议) 3.B---> A ARP回应报文; 4. A----> B icmp request; 5. B ----> A icmp reply ; ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。 AC之间通讯(A向C发起ping请求) 1.A 检查C路由接口的IP地址,发现不属于同一个网段。 2.A ----> switch (int vlan-1) ARP报文请求,该报文在VLAN-1局域网内广播。 3.网关 ------> A ARP回应报文; 4.A -----> switch icmp request (目的MAC是int vlan-1的MAC, 源MAC是A的MAC, 目的IP是C, 源IP是A) 5.switch收到报文后判断出是三层的报文,检查报文的目的IP地址,发现是在自己直连网段; 6.switch (int vlan-2) ----> C ARP请求报文,该报文在VLAN-2局域网内广播; 7.C------> switch(int vlan-2) ARP 回应报文 8.switch (int vlan2) -----> C icmp request 9C -------> A icmp reply; 从A到B的报文由于在同一个VLAN内部,报文的目的MAC地址将是主机B的MAC地址,而从A到C的报文,要跨越VLAN,报文的目的MAC地址是设备虚接口VLAN1上的MAC地址。因此交换机区分二三层报文的标准就是看报文的目的MAC地址是否等于交换机虚接口上的MAC地址。 2.你认为上一讲中的 DNS 协议位于哪一层呢? DNS (Domain name System 域名系统)是基于UDP,UDP是属于传输层,DNS在传输层之上,所以是在应用层 3.你认为 CDN 工作在那一层呢? CND (Content Delivery Network 内容分发网络) 是基于TCP,也是属于传输层,CDN也是属于应用层
    展开

    作者回复: great

    3
  • Leolee
    2021-04-04
    作业: 本文中说只有OSI有写一层二层三层等,一开始把作业想复杂了,看完了评论才明白了一点; 二层转发:指的应该是模型中的第二层是数据经过第二层时检查帧的头信息(即各层加的专有头,例如mac头、ip头、http头),“翻译后”拿到mac地址,进行本地转发和广播; 三层路由:第三层的功能就是路由寻址,数据经过第三层时,设备就会分析报文中的头信息,拿到ip地址进行路由寻址(选择本地转发或选择下一个网关)。 DNS:全称是Domain Name System,作用是把IP地址和域名互相转换,工作在应用层,它不需要管数据具体怎么传输,只需要转换IP地址和域名。 CDM:工作在应用层 TCP/IP网络分层模型: TCP/IP协议总共四层,每一层都需要上层的支撑并支撑着上层,层次顺序是从下往上数,最底层就是第一层;核心是二层的IP和三层的TCP,HTTP在第四层;类比搭积木: 第一层:链接层(link layer),也叫MAC层,负责在以太网、wifi这写底层网络上发送原始数据包,工作在网卡这个层次,使用MAC(Media Access Control Address 局域网地址 可以唯一地标识一个网卡与其所属设备)地址标记网络上的设备。 第二层:网际层(internet layer),也叫网络互联层,Internet Protocol(IP)协议就在这一层,因为IP协议定义了“IP地址的概念”,所以就可以在“链接层”的基础上以IP地址取代MAC地址,把众多局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备室只要把IP地址再“翻译”成MAC地址即可。 第三层:传输层(transport layer),此层协议的智者是保证数据在IP地址标记的两点之间“可靠”地传输,是TCP协议工作的层次,TCP协议就叫Transmission Contorl Protocol 数据传输控制协议,把这层记作TCP层也行。TCP还有一个”小伙伴“UDP工作在这一层; TCP是一个有状态的协议,需要与对方先有连接然后才能发送数据,并且保证数据可靠不丢失。TCP的数据是连续的“字节流”,有先后顺序。 UDP(User Datagram Protocol 用户数据报协议)的特点就与TCP相反了,它是无连接、不可靠、快速传输的。UDP的数据是分散的小数据包,是顺序发、乱序收。 TCP就像顺丰、京东的快递员,送货前需要先取货(顺序发),送到你手之前一定打电话与你联系(建立连接),确认你在家再送到你手或者放在你指定的地点(传输数据);UDP就像百世/圆通的快递员,送货前快递员也需要先取货(顺序发),送货之前未必会打电话(无需连接/无连接),直接丢到你门口或者门卫处,你收不收得到在当下它可不管。所以是顺序发,乱序收。 第四层:应用层(application layer),由于下面三层把基础打得非常好,这一层就“百花齐放”了,各种面向具体应用的协议有很多,例如:Telnet、SSH、FTP、SMTP、HTTP等。 TCP/IP协议栈每层的传输单位叫法都不同,但无本质区分,统称数据包: 第一层 MAC层: 帧(frame) 第二层 IP层: 包(packet) 第三层 TCP层: 段(segment) 第四层 HTTP层:报文(message) TCP/IP协议栈的工作方式 我可以把HTTP利用TCP/IP协议栈传输数据想象/类比成一个收发快递的过程: 假设我把毛公仔寄快递给朋友,需要先拿胶袋套一下,这个毛公仔就下大雨HTTP协议里要传输的内容,比如HTML,然后HTTP协议为它加上一个HTTP专用附加数据(胶袋); 我把毛公仔交给快递小哥,为了保护货物,他又加了层包装袋并贴了个标签,相当于在TCP层给数据再次打包,加上TCP头(快递标签纸); 快递小哥收件后运回集散点,然后装上更大的卡车里(从我到朋友这一条路就相当于IP协议链接起来的路),相当于在IP层、MAC层对TCP数据包加上了IP头、MAC头; 毛公仔经过运输到达了朋友的城市→当地的快递小哥再把毛公仔送到了朋友的家门口,撕掉了快递标签纸(TCP头)→朋友拆掉快递包装袋(HTTP头)→朋友拿到了毛公仔。 HTTP协议的传输过程就是通过协议栈逐层向下,每一层都加上本层的专有数据,层层打包,然后通过下层发送出去; 接收数据则是相反操作,从下往上逐层拆包,每层去掉本层的专有头,上层就会拿到自己的数据; 下层的传输过程对于上层是完全透明的,上层也不需要关心下层的具体实现细节,所以就HTTP层次来看,它不管下层是不是TCP/IP协议,看到的只是一个可靠的传输链路,只要把数据加上自己的专有头,对方就能原样收到。
    展开

    作者回复: 总结的非常好,awsome。

    共 2 条评论
    3
  • 飞翔的葱油饼
    2021-03-30
    1.二层转发,指的是在数据链路层的转发。这一层是交换机做的,根据mac地址转发到局域网中的某台机器;三层路由,指的是在网际层的根据ip的路由,是路由器做的,根据数据包的目的ip地址,转发到下一跳。 2.DNS是做域名到ip的转换,猜测应该工作在网际层之上,应该是在传输层? 3.CDN做内容分发,反向代理等,猜测是工作在传输层?

    作者回复: 1回答正确。 2、3不对,它们都是在应用层,dns基于udp,而cdn通常基于tcp,所以是在传输层之上。 只要关心的是具体的应用内容,涉及业务,而不是单纯的从A到B的数据搬运,就是应用层。

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

    作者回复: 我觉得大家不用纠结这些细节,自己理解了就好。 有兴趣可以参考RFC1180。

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

    作者回复: √

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

    作者回复: ✔️

    2
  • 波塞冬
    2020-03-29
    快递的比喻真是形象啊

    作者回复: 其实所有的协议都是这样,一层层加包装。

    1
  • Geek_wannaBgeek
    2020-03-16
    今日打卡,不但老师讲得好,看评论也能学到知识

    作者回复: keep studying

    1
  • Geek_0cca90
    2019-07-13
    老师,nginx是不是做的四层负载均衡,那七层负载均衡有什么软件实现了吗

    作者回复: Nginx的http子系统工作在应用层,也就是7层,stream子系统工作在传输层(tcp、udp),也就是4层。 所以Nginx支持的是四层和七层负载均衡。

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

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

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

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

    共 2 条评论
    1