—-这是第一条ARPANET信息,发送于1969年10月29日,从加州大学洛杉矶分校(UCLA)发往斯坦福大学。这条消息本来想说的是“登录”(LOGIN),但是系统崩溃了。

因特网初创于20世纪60年代,其初衷在于建造一个网络来连接分散在不同地理位置的计算机

如今的因特网由几百万个松散连接的独立网络构成,其中的每个网络都连接到另外一个或多个网络。邻近的计算机通过本地的局域网相互连接,这些局域网通常为无线以太网。网络之间通过网关路由器相互连接。网关和路由器是专用的计算机,用来把组成信息的数据包从一个网络指引到下一个网络。(维基百科上说网关是通用设备,而路由器是其中的特例,其用途并不通用。)网关之间互相交换着路由信息,这样它们就至少知道哪些网络与本地网络相连并可以被访问到。

计算机网络背景

网络发展

  1. 独立模式:计算机之间相互独立

  1. 网络互连:多态计算机连接在一起,完成数据共享

例如网吧的无盘系统,同一个房间的所有电脑连在一起,共享硬盘

  1. 局域网LAN: 网络中计算机的数量更多了,通过交换机路由器连在一起

  1. 广域网WAN:通过局域网的层层相连,将相隔千里的计算机连在一起

其中的局域网广域网只是相对的概念。例如我们有“天朝特色”的广域网,也可以看作是一个局域网

认识协议

信息在网络之间游代的时候,被分作称为数据包的小块。一个数据包就是按特定格式组织起来的一串字节。不同设备使用不同的数据包格式。

那么如何实现网络间数据包的正确发送与接收呢?我们要先实现如下目标

  1. 明确接收方的地址
  2. 明确数据包本身的长度
  3. 统一的字节流编码方式
  4. 校验数据包的正确性(没有在传输中发生错误修改)

为此,通信协议应运而生

通信协议(Communication Protocol)是指在电子设备或计算机网络之间进行数据交换时,所遵守的一套规则和约定。这些规约决定了通信过程中各种细节如何处理,包括数据的格式、传输方式、错误检查、数据压缩、如何开始和终止通信等。在计算机网络中,我们所用的通信协议叫做网络(通信)协议

实际上,网络协议考虑地更为复杂:

  • 计算机生产厂商有很多;
  • 计算机操作系统,也有很多;
  • 算机网络硬件设备,还是有很多;
  • 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是 网络协议;

协议分层

从上面对网络协议的思考,显然已经天然地出现了对协议分层的要求,我们接下来认识一下什么是协议分层,有什么好处

打电话的例子:

在这个例子中, 我们的协议只有两层; 但是实际的网络通信会更加复杂, 需要分更多的层次。

封层最大的好处就是封装。每一层只考虑两件事

  • 自己层内的协议如何实现
  • 如何与相邻层沟通
    而不用考虑其它层的实现原理

OSI七层模型

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范

OSI七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

但是, 它既复杂又不实用,所以我们接下来介绍TCP/IP五层模型

TCP/IP五层(或四层)协议

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.

物理层:负责光/电信号的传递方式.比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等.集线器(Hub)工作在物理层.
数据链路层:负责设备之间的数据帧的传送和识别.例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作.有以太网、令牌环网,无线LAN等标准.交换机(Switch)工作在数据链路层.
网络层:负责地址管理和路由选择.例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由).路由器(Router)工作在网路层.
传输层:负责两台主机之间的数据传输.如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机.
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP))、文件传输协议(FTP)、网络远程访问协议(Telnet)等.我们的网络编程主要就是针对应用层.

网络传输基本流程

同一个网段内的两台主机进行文件传输

两台计算机通过TCP/IP协议通讯的过程如下所示

当文件跨网段传输时,数据的传输过程中要经过一个或多个路由器,其中包含了令牌环系统,如下图

数据包的封装与分用

不同的协议层通信需要用到不同的报头,所以需要用到数据包的层层封装和分用

  • 数据包的称谓:不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。但没关系,它们本质上都是数据包
  • 封装(Encapsulation):应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
  • 首部信息:首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息
  • 数据包的向上传递:数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理.

网络中的地址管理

IP地址

在IP协议中,地址就像电话号码一样,每台主句都必须有一个辨识身份的地址,才能根因特网上的替他主机区分开来。
这个标识号码叫做IP地址IP地址的本质是一串定长的01码,按长度可分两种:IPV4(32位,4字节),IPV6(128位,16字节),但平时见到的ip地址似乎不长这样,而是类似于140.180.223.42(普林斯顿带血网站)这样的地址。
这样的记法叫点分十进制表示法。本质上还是01码,只不过拆开来了而已,这么做的原因单纯是因为比01码或者十六进制码更好记

而IPv6地址通常写作16个用十六进制值表示的字节,字节之间用冒号分割,比如2620:0:1003:100c:9227:e4ff:fee9:05ec。IPv6地址的表现形式相较于点分十进制形式更不直观,但本质和功能和IPV4差不多,所以我们着重介绍IPV4相关的IP协议

显然一个定长的01码总会有用完的一天,那么这个问题又该怎么解决/缓解呢?在接下来的博客中我们也将逐一介绍各种方法。