要说我们接触计算机网络最多的协议,那势必离不开 TCP/IP 协议了,TCP/IP 协议同时也是互联网中最为著名的协议,下面我们就来一起聊一下 TCP/IP 协议。
TCP/IP 的历史背景
最初还没有 TCP/IP 协议的时候,也就是在 20 世纪 60 年代,许多国家和地区认识到通信技术的重要性。美国国防部希望能够研究一种即使通信线路被破坏也能够通过其他路线进行通信的技术。为了实现这种技术,出现了分组
网络。
即使在两个节点通信的过程中,几个节点遭到破坏,却依然能够通过改变线路等方式使两个节点之间进行通信。
这种分组网络促进了 ARPANET(Advanced Research Projects Agency Network)
的诞生。ARPANET 是第一个具有分布式控制的广域包分组交换网络,也是最早实现 TCP/IP 协议的前身。
ARPANET 其实是由 美国国防部高级研究计划局 计划建立。
所以,计算机网络的出现在最一开始是因为军事研究目的。
20 世纪 90 年代,IOS 开展了 OSI 这一国际标准化的进程,然而却没有取得实质性的进展,但是却使 TCP/IP 协议得到了广泛使用。
这种致使 TCP/IP 协议快速发展的原因可能是由于 TCP/IP 的标准化。也就是说 TCP/IP 协议中会涉及到 OSI 所没有的标准,而这种标准将是我们接下来主要探讨的内容。
这里我们先来认识一下 TCP/IP 协议,TCP/IP 协议说的不仅仅只是 TCP 和 IP 这两种协议,实际上,TCP/IP 指的是协议簇,协议簇是啥呢?简单来说就是一系列协议的综合,如果下次再问你 TCP/IP 协议有哪些的话,可以把下面这张图甩给他
以上的协议汇总起来,就是 TCP/IP 协议簇。
TCP/IP 标准
TCP/IP 相较于其他协议的标准,更注重两点:开放性
和 实用性
,即标准化能否被实际使用。
开放性说的是 TCP/IP 是由 IETF
讨论制定的,而 IETF 本身就是一个允许任何人加入进行讨论的组织。
实用性说的是就拿框架来说,如果只浮于理论,而没有落地的实践,那么永远成为不了主流。
TCP/IP 的标准协议就是我们所熟知的 RFC 文档
,当然你可以在网络上看到。RFC 不仅规范了协议标准,还包含了协议的实现和使用信息。
关于更多 RFC 协议,你可以看一下官方文档 https://www.rfc-editor.org/rfc-index.html
这里我们不再详细展开介绍了,我们这篇文章的重点要放在对 TCP/IP 的研究上。
TCP/IP 协议簇
下面我们就开始聊一聊 TCP/IP 协议簇。
TCP/IP 协议是我们程序员接触最多的协议,OSI 模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在 TCP/IP 协议中,它们被简化为了四个层次
下面我们从通信链路层开始介绍一下这些层以及与层之间的协议。
通信链路层
如果非要细分的话,通信链路层也可以分为 物理层
和 数据链路层
。
物理层
物理层是 TCP/IP 的最底层是负责传输的硬件,这种硬件就相当于是以太网或电话线路等物理层的设备。
数据链路层
另外一层是数据链路层,数据链路层位于物理层和网络层中间,数据链路层定义了在单个链路上如何传输数据。
网络层
网络层主要使用 IP
协议,IP 协议基于 IP 地址转发分包数据。
IP 协议的主要作用就是将分组数据包发送到目标主机
TCP/IP 分层中的互联网层与传输层的功能通常由操作系统提供。
IP 还隐含着数据链路层的功能,通过 IP 协议,相互通信的主机之间不论经过怎样的底层数据链路,都能够实现相互通信。
虽然 IP 也是一种分组交换协议,但是 IP 却不具备重发机制。即使数据没有到达另一端也不会进行重发,所以 IP 属于非可靠性协议。
网络层还有一种协议就是 ICMP
,因为 IP 在数据包的发送过程中可能会出现异常,当 IP 数据包因为异常而无法到达目标地址时,需要给发送端发送一个异常通知,ICMP 的主要功能就在于此了。鉴于此情况,ICMP 也可以被用来诊断网络情况。
传输层
我们上面刚介绍完 TCP/IP 协议最重要的 IP 协议后,下面我们来介绍一下传输层协议,TCP 协议是传输层协议的一种。
传输层就好像高速公路一样,连接两个城市的道路。下面是互联网的逻辑通道,你可以把它想象成为高速公路。
传输层最主要的功能就是让应用层的应用程序之间完成通信和数据交换。在计算机内部运行着很多应用程序,每个应用程序都对应一个端口号,我们一般使用端口号来区分这些应用程序。
传输层的协议主要分为面向有连接的协议 TCP 和面向无连接的协议 UDP
TCP
TCP 是一种可靠的协议,它能够保证数据包的可靠性交付,TCP 能够正确处理传输过程中的丢包、传输顺序错乱等异常情况。此外,TCP 还提供拥塞控制用于缓解网络拥堵。
UDP
UDP 是一种不可靠的协议,它无法保证数据的可靠交付,相比 TCP ,UDP 不会检查数据包是否到达、网络是否阻塞等情况,但是 UDP 的效率比较高。
UDP 常用于分组数据较少或者广播、多播等视频通信和多媒体领域。