文章目录
- 一、网络发展史
- 二、网络通信基础
-
- [IP 地址](#IP 地址)
- 端口号
- 协议(Protocol)
- 五元组
- 协议分层
- [OSI 七层模型](#OSI 七层模型)
- [TCP/IP 五层(或四层)模型](#TCP/IP 五层(或四层)模型)
- 封装
一、网络发展史
独立模式
即各个计算机之间相互独立
网络互连
即将多个计算机连接在一起,完成数据共享。
随着时代的发展,越来越需要计算机之间相互通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。
数据共享的本质是 网络数据传输 ,即计算机之间通过网络来传输数据,也成为网络通信。
根据网络互连的规模,可以分为 局域网 和 广域网。
局域网(LAN)
即 Local Area Network,简称 LAN。
Local 即标识了局域网是本地、局部组建的一种私有网络。
局域网内的各个主机之间能够方便地进行网络通信,构成内网;局域网与局域网之间在没有连接的情况下,是无法进行通信的。
局域网组建网络的方式:
-
基于网线直连:

-
基于集线器(Hub)组建:

-
基于交换机(Switch)组建:

-
基于交换机和路由器(Router)组建:

广域网(WAN)
即 Wide Area Network,简称 WAN。
通过路由器,将多个局域网连接起来,在物理上组成一个很大的范围,形成了广域网。广域网内部的所有局域网都属于其子网。

全球化的公共型广域网称为 互联网(又称公网、外网),属于广域网的一个子集。有时候在没有限定条件下说的广域网,是指互联网。
所谓的 "局域网" 和 "广域网" 是相对的概念。
二、网络通信基础
网络互连的目的是进行网络通信,也即是网络数据传输,更具体⼀点地说,是网络主机中的不同进程间,基于网络传输数据。
那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到哪台主机呢?这就需要使用 IP 地址来标识。
IP 地址
概念
IP 地址主要用于标识网络主机和其他网络设备(如路由器)的网络地址。可以理解为:IP 地址用于定位主机的网络地址(在网络世界中的位置)。
比如快递,需要有收货方的地址才能将货物运送过去。
格式
IP 地址是一个 32 位的二进制数,通常被分割成 4 个 " 8 位二进制数",如:01100100.00000100.00000101.00000110。
由于二进制的形式人难以看懂,于是通常采用 "点分十进制" 的方式来表示,即 x.x.x.x 的形式,其中的每一个 "x" 都是 0 ~ 255 之间的十进制整数。如:100.4.5.6。
端口号
概念
在网络通信中,IP 地址用于标识通信主机的网络地址,而定位到主机之后,还需要知道需要发送数据的是主机中的哪一个进程,而不是将整个主机中的数据都发送,因此,端口号用于标识主机中发送数据/接收数据的进程。
比如发送快递,收货地址定位到了某个小区(IP 地址),同时也需要知道哪一个住户是收货人(端口号),这样才能把包裹送到家门口。
格式
端口号是 0 ~ 65535 范围内的数字。
在网络通信中,进程可以通过绑定一个端口号,来发送/接收网络数据。
虽然通过 IP 地址和端口号能够定位网络上一个主机的唯一进程,但是如何告诉接收方要接收的数据是什么样的呢?网络通信是基于二进制数据来传输的,可是接收方怎样知道这个呢?
这时候就需要使用 "协议" 来规定双方的数据格式。
协议(Protocol)
概念
网络协议,简称协议,是网络通信中数据所经过的所有网络设备都必须遵从的一套约定、规则。比如怎样建立连接、如何相互识别等。只有遵从这个约定,计算机之间才能相互通信交流。
协议最终体现为网络上传输的数据包格式。
作用
如同对暗号,协议就是一种提前的约定。
计算机之间的传输媒介是光电信号,通过频率和强弱标识高低电平。若想要传输不同信息,需要约定好双方的数据格式。
而且,由于不同计算机的硬件设备厂商不同,也需要通过一种规定来让不同计算机相互通信。网络协议就是充当这种角色。
五元组
在 TCP/IP 协议中,使用五元组来标识一个网络通信:
- 源 IP:标识发送方主机的网络地址
- 源端口号:标识发送方主机中发送数据的进程
- 目的 IP:标识接收方主机的网络地址
- 目的端口号:标识接收方主机中接收数据的进程
- 协议号:标识发送进程和接收进程双方约定的数据格式
协议分层
由于网络通信往往十分复杂,各中问题都有相关协议处理,导致整个网络协议变得乱糟糟的,因此,将各部分协议归为一类(分层),每一层协议各司其职,且只能相邻的两层之间进行交互,不能跨层交互。
分层对每一层协议进行了封装,每一层不需要了解其他层的具体细节。此外还进行了解耦,对任意一层进行替换也不会影响到整体。
分层的作用类似于面向接口编程:定义好两层之间的接口规范,双方都遵循这个规范来对接。
在代码中,类似于定义好一个接口,一方是接口的实现类(提供方,提供服务),一方是接口的使用类(使用方,使用服务):
- 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可。
- 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
这样就能更好地扩展和维护。
OSI 七层模型
即 Open System Interconnection,开放系统互连。
- OSI 七层网络模型是⼀个逻辑上的定义和规范:把网络从逻辑上分为了7层。
- OSI 七层模型是⼀种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输。
OSI 七层模型划分为一下七层:

由于 OSI 七层模型过于复杂,实际网络是以 TCP/IP 五层(或四层)模型来组建的。
TCP/IP 五层(或四层)模型
TCP/IP 是一组协议的代名词,实际上包括了许多协议,这些协议组成了 TCP/IP 协议簇。
TCP/IP 通讯协议采用了五层的层级结构,每一层都是通过调用下一层所提供的网络来完成自己的需求。

我们对五层模型的每一层展开介绍:
应用层:负责应用程序之间的沟通 。它定义了应用程序之间如何交换数据,如简单的电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们写代码进行网络编程也是在应用层。应用层的数据单元是 报文 或 消息。传输层:负责端到端的通信,具体来说是两个主机中的特定应用程序的某个进程之间的对话(数据传输) 。如传输控制协议(TCP),能够确保数据可靠地从源主机发送至目的主机。只考虑起点和终点(即两台主机)的数据传输而不考虑传输的中间过程。传输层的数据单元是 段(segment,TCP 协议) 或 数据报(datagram,UDP 协议)。网络层:负责将数据包从源主机跨越多网络传输到目标主机,其核心任务是逻辑寻址和路由选择 。如 IP 协议中,通过 IP 地址来标识某台主机,路由器根据数据包的目标 IP 地址,查询自身的路由表,为数据包选择一条最优的路径,将其转发到下一个路由器,直到最终目的地。简单来说,就是负责考虑两台主机数据通信的中间过程。我们常见的路由器(Router)就是工作在网络层。网络层的数据单元是 包(package) 或者 IP 数据报(datagram)。数据链路层:负责在同一个局域网内,进行节点到节点的可靠帧传输 。如网卡设备的驱动、帧同步(检测新帧的开始信号)、冲突检测(若有冲突就自动重发)、数据差错校验等工作。由以太网、令牌环网、无线 LAN 等标准。交换机(Switch)工作在数据链路层。数据链路层的数据单元是 帧(frame)。物理层:负责在物理媒介上(光信号/电信号)传输比特流(bit stream) 。定义了所有的物理规格,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤以及现在的 wifi 无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)是工作在物理层的。物理层的数据单元是 比特(bit)。
封装
- 应用层将数据从上往下通过协议栈发送到网络上的过程中,每到一层都要加上一个数据首部(header),这就是 封装(Encapsulation)。
- 首部中包含了以下有关该数据的信息如首部长度、载荷(payload,即上层的数据包)长度以及上层协议等信息。
- 数据封装完成后发送到物理媒介(光电信号)上,到达对端主机之后再从下往上逐层去除相应的首部并分析,根据首部中的有关上层协议的信息,,将载荷部分数据交给对应的上层协议处理。
发送方的封装过程(从上到下依次打包)
- 应用层 :当用户在浏览器的 URL 栏输入网址并点击回车,浏览器就会生成一个 HTTP 请求报文,然后将报文传给下层传输层
- 传输层 :接收到上层的 HTTP 请求报文后,将报文作为载荷数据,加上 TCP 头 (其中包含源端口和目的端口),打包成一个 TCP 段,然后传给下层网络层
- 网络层 :接收到上层的 TCP 段后,将其作为载荷数据,加上 IP 头 (其中包含源 IP 地址和目的 IP 地址),打包成一个 IP 数据报,然后传给下层链路层
- 数据链路层 :接收到上层的 IP 数据报后,将其作为载荷数据,加上帧头 和 帧尾 ,打包成数据帧
- 物理层 :将数据帧转为比特流,通过物理媒介发送出去。
接收方的解封装(从下到上依次拆包)
- 物理层 :接收到比特流后,将其重组为 数据帧
- 数据链路层 :检查数据帧的相关信息无误后,去除帧头和帧尾,将剩下的 IP 数据报传给上层
- 网络层 :接收到 IP 数据报后,检查目的 IP 地址是否正确,无误后去除 IP 头,将剩下的 TCP 段传给上层
- 传输层 :接收到 TCP 段后,检查其中的目的端口号决定要将数据交给那个应用程序,然后去除 TCP 头,将剩下的 HTTP 报文交给上层
- 应用层:服务器程序接收到 HTTP 请求报文后,处理并生成 HTTP 响应报文,然后将报文从上往下进行封装并返回给发送方。
面试题1:网络 OSI 模型和 TCP/IP 模型分别介绍一下
- OSI 模型:为了使得多种设备能够通过网络相互通信,以及为了解决各种不同设备在网络互联中的兼容性问题,国际标准化组织制定了开放式系统互联参考模型(Open System Interconnection Reference Model),即 OSI 网络模型。该模型主要包含七层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。每一层负责的职能不同,应用层负责给应用程序提供统一的接口;表示层负责将数据转换成能够兼容另一个系统的格式;会话层负责建立、管理和终止表示层实体之间的通信会话;传输层负责端到端的数据传输;网络层负责数据的路由、转发和分片;数据链路层负责数据的封帧和差错检测以及 MAC 寻址;物理层负责在物理媒介上传输比特流。由于 OSI 模型太过复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案。而在实际比较实用的是 TCP/IP 四层模型。
- TCP/IP 模型:TCP/IP 协议被组织成四个概念层,其中有三层与 OSI 参考模型对应。TCP/IP 族并不包含数据链路层和物理层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议共同协作。TCP/IP 模型通常分为四层,从上到下依次是应用层、传输层、网络层和网络接口层。其中,应用层支持 HTTP 和 SMTP 等最终用户进程;传输层处理主机到主机的通信(TCP、UDP 协议);网络层负责寻址和路由转发(IP 协议);网络接口层通过物理电线或无线传输媒介移动比特来传输数据。
文章到这里就告一段落啦,若有错误请尽管指出~
完