本文是参考【TCP/IP详解卷一】
本文是该系列文章的第一篇,将简单概述一下网络分层等简单知识
网络分层以及协议介绍
- 一、网络七层模型
- 二、TCP/IP协议模型
- 三、TCP/IP协议栈
- 四、总结
一、网络七层模型
网络通信是一个非常复杂的过程,国际标准组织(ISO)将这个过程分为七个层次,将其称为OSI模型,七个层次分别为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
它们的含义如下表所示:
编号 | 名称 | 含义 |
---|---|---|
7 | 应用层 | 提供应用程序间的通信 |
6 | 表示层 | 处理数据格式、加密等工作 |
5 | 会话层 | 建立、连接、维护管理、关闭会话 |
4 | 传输层 | 建立多个应用程序间的连接与关联 |
3 | 网络层 | 寻址和路由的选择 |
2 | 数据链路层 | 提供介质访问 |
1 | 物理层 | 比特流传输 |
之所以将其分为七个层次,是为了让开发人员可以在不同的领域分别实现整个系统的不同部分,就像一个非常庞大的工程,每个员工都有自己擅长的岗位和专门负责的工作。
我们来看一个例子,来理解一下这七层模型:
中秋快到了,某上市公司的Boss说要给所有的员工(包括总部以及分公司的所有员工)发月饼,于是就有了下面这副图
OSI参考模型要遵循以下5个原则:
- 各个层级之间有清晰的边界,便于理解各个层级的功能
- 每个层实现的功能不一样,并且不会互相影响
- 层与层之间是服务与被服务的关系
- 层次划分有利于国际标准协议的制定
- 层次数目越多,就越能避免各个层的功能重复
二、TCP/IP协议模型
上面讲了OSI参考模型一共有七层,那么我们再来看看另外一个模型,它是被TCP/IP协议采纳所使用的,一共有4个层次,如下表所示
编号 | 名称 | 含义 |
---|---|---|
7 | 应用层 | 处理特定的应用程序细节。例如:HTTP、DNS |
4 | 传输层 | 提供再抽象的、由应用管理的端口之间的数据交换。例如:TCP、UDP |
3 | 网络层 | 定义抽象的数据包和提供路由。例如:IP、IPv6、ICMP |
2 | 链路层 | 用于网络层到基于多接入链路层网络的链路层的地址映射的非正式的“层”。例如:ARP |
其中应用层可以看成是OSI模型中应用层、表示层、会话层的结合。
说到这两个协议,我们就要来了解以下它们的特点,其中IP协议是一种不可靠的协议,IP发送给链路层数据时,有可能会造成数据丢失,因此在传输层中的TCP协议就可以为其增加一层安全保障,来处理这种数据丢失的现象,因此我们也说TCP协议是可靠的,来看一个例子
我们在淘宝上买了一件衣服,此时我们是买家,那么卖我们衣服的人就是卖家,此时这两者之间建立成的协议为当买家收到衣服以后点击确认收货即可完成交易,我们把这个协议可以看成是TCP协议。
那么卖家需要将衣服通过快递的方式发给我们,那么卖家此时需要与快递公司建立成一个协议,即快递公司帮卖家把衣服送到指定的买家手中就算完成交易,我们可以把这个协议看成是IP协议。
设想一下,快递公司有可能会把快递弄丢,按照现在的社会现象,快递公司才不管你呢,都不怎么赔给你钱,丢了就是丢了,卖家拿他也实在没办法,据此,卖家就赔了一件衣服的钱,因此我们可以把卖家与快递公司之间建立的协议(IP协议)看成是不可靠的。
虽然快递丢了,但我们买家没收到货啊,所以我们不会点确认收货的,此时卖家无奈只能重发一件衣服给我们,直到我们真正收到了衣服点击确认收货了,交易才算完成,因此我们可以把买家与卖家之间建立的协议(TCP协议)看成是可靠的。
那么,TCP是如何提供可靠的服务的呢?就如例子中说的一样,尽管TCP是可靠的,但其使用的是不可靠的IP协议,仍然会有数据丢失的现象,但当数据丢失后,TCP会重新将丢失的数据发送一次,直到对应的数据送到目的地
总结: TCP是使用了不可靠的IP协议,但提供了一种可靠的传输层服务
当然,传输层还有另一种协议,为UDP,其不同于TCP,是一种不可靠的服务,即无法保证数据在传输的过程中不会丢失,常用的场景有:DNS查询、实时语音视频流传输、TFTP数据传输等
为何在这些场景中会用到UDP呢?我们拿其中一个举例,当双方通过网络进行打电话通信,如果对方说了20个字,但可能中间发生了数据丢失,即少传过来几个字,但一般来说我们还是能理解整句话是什么意思的。但若使用TCP会发生什么现象?对方说的20个字传过来18个字,因为那两个字丢失了,TCP重新发送了过来,因此可能在2s以后我们突然接收到了那两个字,这就非常的奇怪。
三、TCP/IP协议栈
下面有一张以以太网为例子模拟TCP/IP协议的数据如何进行传输的图:
以太网传入的帧包含一个48位的目的地址和一个16位的以太网类型字段。其中类型字段:Ox0800(十六进制)表示这个帧包含IPv4的数据报;Ox0806和Ox86DD分别表示ARP和IPv6。假设目的地址与接收地址匹配,则会根据类型字段选择相应的网络层的协议
当到达网络层以后就会交给IP来处理,IP会检测其中的IPv4的协议字段或IPv6的下一个头部字段,来决定接下来调用哪个协议来处理。常见的协议字段有:1(ICMP)、2(IGMP)、4(IPv4)、6(TCP) 和 17(UDP)
然后到达了传输层以后,大部分的协议会通过端口号来分解到对应的应用中去。端口号是一个16位的非负整数(范围:0 ~ 65535),常见的端口号有:22(SSH)、20和21(FTP)、23(Telnet)、25(SMTP)、53(DNS)、80(HTTP)、443(HTTPS) 等