浅析TCP/IP协议
0x00 什么是TCP/IP协议?
想一想人与人之间交流需要什么?我们是不是要掌握一种我们都能体会到对方意思的语言。那么计算机与网络设备之间进行通信,是不是不同设备之间是不是也要确定一种让两者能够通信的方法。不同的硬件,不同的操作系统,等等不同的设备,他们想要通信,必须要有一种规则来保证它们之间能够通信。而这种规则就是协议。
很多人都认为TCP/IP协议指的是TCP和IP这两种协议
,也有人认为TCP/ IP 是在 IP 协议的通信过程中,使用到的协议族的统称
。但我认为其实不是这样,因为TCP(传输控制协议)和IP(传输控制协议)都属于一个协议家族,而他们就是这个家族中最先出生的。同时也是这个协议家族的最核心的协议。所以就用TCP/IP协议来代表这个协议家族。它通称为TCP/IP协议族,简称为TCP/IP。又因为网络通讯协议采用分层的结构,各个层次配合完成工作,和计算机中的堆栈很相似,所以亦被称为TCP/IP协议栈。
0x01 TCP/IP参考模型
首先来了解一下OSI模型,OSI模型(开放式系统互联模型), 是一种概念模型,由国际标准化组织提出,一个试图将世界上各种计算机互连为网络的标准框架。共分为七层:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。如下图所示。
下面来看 TCP/IP参考模型,它是一个抽象的分层模型,在这个模型中,所有的TCP/IP系列网络协议都被归类到4个抽象的“层”中(分别是:应用层,传输层,网络互连层,网络访问(链接)层)。每一抽象层创建在低一层提供的服务上,并且为高一层提供服务。 完成某些特定的任务需要众多的协议协同工作,这些协议分布在模型的不同层。 TCP/IP参考模型为TCP/IP协议栈制作。其中IP协议只关心如何使得数据能够跨越本地网络边界的问题,而不关心如何利用传输媒体,数据如何传输(当作黑盒处理)。整个TCP/IP协议栈则负责解决数据如何通过许许多多个点对点通路(一个点对点通路,也称为一“跳”, 1 hop)顺利传输,由此不同的网络成员能够在许多“跳”的基础上创建相互的数据通路。
把TCP/IP协议族中的协议对照OSI七层模型,如下图示,
而通常人们认为OSI模型的最上面三层(应用层、表示层和会话层)在TCP/IP组中是一个应用层。 网络传输协议能够大致匹配到一些厂商喜欢使用的固定7层的OSI模型。然而这些层并非都能够很好地与基于IP的网络对应。
不难看出,OSI更加抽象,注重功能,而TCP/IP则更加注重与功能的实现。
0x02 TCP/IP的分层管理
把 TCP/IP 层次化是很有必要的。比如说,如果只有一个协议,当某个地方需要改变设计时,那我们就必须把所有部分替换掉。而分层之后呢,我们的协议分为几个层面,让每个层面有专门的协议去负责,这样们既可以做到详细和完整,又可减轻工作量,如我们要修改协议,我们不需要将所以的协议都改,只需要修改我们需要的部分。
TCP/IP 协议族各层的作用如下。
应用层
-
该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。
-
应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。
-
数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。一旦从应用程序来的数据被编码成一个标准的应用层协议,它将被传送到IP栈的下一层。
TCP/IP 协议族内预存了各类通用的应用服务。
在应用层上有一些特定的程序。它们提供直接支持用户应用的服务。如:HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)、SSH(安全远程登陆)、DNS(名称<-> IP地址寻找)等
传输层
- 传输层(transport layer)的协议,能够解决诸如端到端可靠性(“数据是否已经到达目的地?”)和保证数据按照正确的顺序到达这样的问题。
- 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
- 在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议)。
- TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据。
- UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。
网络层(又名网络互连层)
- 网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
- 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
- 为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。
网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能。
链路层(又名数据链路层,网络接口层)
- 网络访问(链接)层实际上并不是因特网协议组中的一部分,但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。
- 给其上层-网络互连层一个访问接口,以便在其上传递IP分组。
- 用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。
- 硬件上的范畴均在链路层的作用范围之内
0x03 参考资料
[1] TCP/IP四层模型
[2] TCP/IP协议
[3] 互联网协议套件
[4] 图解HTTP (图灵程序设计丛书) [日]上野 & 宣