一、TCP/IP协议概述
什么是计算机网络?
计算机网络诞生的原因是苏美的冷战,当时苏美对峙,双方囤积大量的原子弹,美国国防部担心苏联核打击会摧毁美军的指挥系统,因此资助了ARPA(阿帕)Net计划,以此来构造一个分布式的指挥系统。当时其主要目的就是建立一个通信链路,让位于不同地方的计算机可以交换信息,达到通信的目的。因此,计算机网络从这个角度而言,可以这么理解。即:为了实现在不同区域的计算机可以通讯的一项技术。
ARPA计划,直接推动了TCP/IP协议规范的诞生,它是一个分层次的网络结构。因为考虑到现实中不可预估的自然因素,实现这个目的其实是很困难的,出于对问题简化的目的,当时的学者就设计了这么一个分层的网络结构。其示例如下:

TCP/IP各层次概述
为什么要分层?其主要目的就是为了简化问题,把一个问题拆解成多项任务,而让TCP/IP的每一层去实现其中特定的一些任务,让每一层分别负责不同的通讯功能。各层的作用如下:
- 链路层:处理网络物理接口的细节。
- 网络层:控制网络分组在网络中传播的行为,也可以认为它实现了主机与主机之间的通信。
- 传输层:实现两台主机上的两个进程之间的通信。
- 应用层:实现了对传输的网络数据处理的细节,即--如何组织和使用传输的网络数据。
计算机可以识别的永远是由0和1组成的二进制数据,也称为比特流,而链路层传输的就是这样的比特流,链路层实现的功能就是对一串这样的比特流进行分组,按照特定协议组装成帧结构,然后将这些帧一个一个的从网卡接口往外发送。链路层主要的协议是以太网协议。那么为什么要对比特流分组呢?
- 为了提高传输效率和接收效率
- 为了实现一些特定的功能,如:差错检测、透明传输
为了达到上面的目的,链路层就设计成实现了对比特流封装成帧的功能。那么什么是差错检测呢?
比特在传输的过程中可能会出现差错:1变成0或0变成1,数据链路层要实现对传输的比特流进行差错检测的功能,如果没有这个功能的话,接收方无法信任接收到的数据,这很明显是无法接受的。常用的差错检测技术就是:循环冗余检验技术---CRC(Cyclic Redundancy Check)。
循环冗余校验技术:https://www.jianshu.com/p/7f4fd7f62de2
那么什么又是透明传输呢?
链路层对比特流封装成帧时,帧首部和帧尾部都是特定的比特数据,如果传输的数据中也出现了这样的数据,则会导致接收方对接收的帧结构首部和尾部位置的误判。因此,为了解决这个问题,引入了透明传输机制,即当数据部分碰巧出现了和帧首部或帧尾部一样的比特组合时,通过在其前面增加事先约定好的控制字符来处理,然后在接收端再删除发送端增加的控制字符。这种允许传输任意形式的比特组合都可以不受限制地在数据链路层传输就是透明传输。
网络层传输的是IP报文,这一层使用广泛的协议就是IP协议,实现了IP报文在主机之间传输。
传输层,主要的协议有TCP协议和UDP协议,它的主要功能是在两台主机的进程之间传输数据。
应用层,主要的协议有HTTP、FTP、Telnet等,它实现的主要功能就是组织和格式化网络数据。
网络数据传输的过程

上面那张图来自于《TCP/IP详解卷一》,它描述了网络数据在以太网中传输的过程。它很精确的描述了网络数据传输的过程,即发送端每一层的网络数据都是由接收端相同层的协议去处理的,即发送端的链路层数据交给接收端链路层处理,发送端网络层数据交给接收端网络层去处理。看下图:

即以太网帧由接收方的以太网协议处理,IP数据报由接收方的IP协议处理,TCP报文由接收方的TCP协议处理。其过程描述如下:
发送方主机A的数据从上至下,依次经过应用层协议、传输层协议(TCP、UDP)、网络层协议(IP)、链路层协议(以太网)处理,封装成帧结构,从网卡接口发出,然后经过路由转发,到达目的主机B的网卡,主机B依次使用以太网协议、IP协议、TCP协议或UDP协议、应用层协议来处理数据。虽然很简略,但这就是一次网络数据传输的过程。

浙公网安备 33010602011771号