TCP/IP,网际网路的基础通讯架构

上篇所提到的 TCP/IP,将网路通讯模型分成四层。今天来简单聊一下这四层分别为何、在做什麽事,身为一名开发者,要如何融入这个架构里呢?

TCP/IP 四层架构

TCP/IP 的模型共有以下四层

  • Application Layer(应用层)
  • Transport Layer(传输层)
  • Internet Layer(网际网路层、网路层)
  • Network Access Layer(网路存取层)

这样的模型在不同层级做了什麽事呢?举个例子来说:

假设你用 Line 传了一则讯息出去,应用层的 Line 会把你的讯息丢给传输层的程序,加上「连接埠」等资讯传到下面网际网路层的程序。在这层,资料会被加上「IP 位置」等资讯,再被传到下面的网路存取层,加上「MAC 位置」等等,最後被转换成讯号送走。

TCP/IP 各层处理的资料
*TCP/IP 各层处理的资料

至於连接埠、IP 位置、MAC 位置的详细作用为何?我们後续的文章接着聊。现在先回到 TCP/IP 的主要架构上,在不同层级会被加上 Header(标头)的资讯,用来在传递讯息时标明来源及目的。

就有点像是你的讯息被丢进信封,写上点什麽资讯、再被丢入信封,如此反覆数次。其中一层可能是写你目的地的地址,例如:信义路一段 1 号,再往外一层写上下一站要拿给谁。

封装资讯,加上标头
*封装资讯,加上标头

刚开始你可能把信拿到某个邮筒,但是你的信封外写着「拿给:文山邮局」。邮差不需知道你真正的寄送目的地,看到後只要拿给文山邮局就好。

接着文山邮局会把最外层的信封打开,看一下你的目的地为何,发现是送到信义路一段,於是文山邮局再套上一层信封,写上「拿给:信义邮局」。同样的,邮差看到这封信也不需要知道你的真正目的地为何,只要拿到信义邮局即可,再由信义邮局决定下个中继站为何,或是真的抵达目的地了。

加入 TCP/IP 家族

在 TCP/IP 的架构下,你可以挑一个层级加入,符合其规范开发就能顺利的和其它层级的程序相容。例如浏览网站的协定 HTTP 就是属於应用层的范畴,HTTP 规范了浏览网站的方方面面,像是传输内容的格式、快取、错误处理等等,但不需要去管这个网站内容传输时要走哪条路,掉封包了怎麽办。

这类的问题要交给下面几层的协定来做,像是传输层的 TCP 就是专门处理连线的稳定性,例如重送的机制是如何做的:要每隔 0.1 ms 还是多久重送一次?要等接收端回覆收到,要等多久?诸如此类的问题。传输层的协定基本上现今已经算是相当完善的了,但仍有演算法优化的空间,或是更适用物联网架构的协定也有可能推陈出新。

而在网路层的 IP(Internet Protocol)则负责把讯息定义网路上的地址,也就是大家熟悉的 IP Address。又或是 OSPF(Open Shortest Path First),专门决定讯息走哪条路径比较好。

最後在网路存取层有 MAC(Media Access Control),网路卡中的 MAC Address 就是基於这个协定的;也有 ARP(Address Resolution Protocol),透过网路层的 IP Address 来找 MAC Address。

但实务上也不见得某个程序、服务就得完全属於某一层,TCP/IP 的这个模型也只是尽可能的把抽象和实际的应用之间做一个连接,有些应用不见得可以很明确的归类在某一层。

而 OSI 的七层模型,就更是这样了,我们接着聊。

参考资料

  1. NotFalse 技术客 - 协定资料单元 — 区段 (Segment)、资料包 (Datagram)、讯框 (Frame)
  2. Wiki - TCP
  3. Wiki - IP
  4. Wiki - OSPF
  5. Wiki - MAC
  6. Wiki - ARP

<<:  [Day 04] - 用Spring Boot连接Mongo DB

>>:  Day 04 - jS 微基础之ES6函式:function

[Day 25] Android Studio 七日陨石开发:一起来布局 App 介面!

前言 昨天我们成功的运行了自己做的App。 但我们还有2个步骤要做: 布局App元件 实作App功能...

只要有vscode和python就可以享受AWS上的服务

轻松快速道路 今日会使用CDK建立一样的架构,如下图: 在CDK可能有很多种不同的建立方式,这边会介...

敏捷(Agile)

敏捷 敏捷心态(AGILE MINDSET) 敏捷是一种由价值观,原则和实践组成的心态。满足敏捷思维...

使用 Python 实作网路爬虫 part 3

实际操作 了解 requests 与 BeautifulSoup 的功能後,我们来进行整合吧!接下来...

17. 当mentor比你想像的重要多

前言 这篇文章觉得很适合给要当mentor的人,在你当之前应该要先听过这篇演讲,然後反思一下你想对...