前言

  • 今天的因特网无疑是有史以来由人类创造的、精心设计的最大系统
  • 该系统由数以千计的计算机设备(计算机、平板电脑、智能手机)彼此相互连接构成,并且还有一批与因特网相互连接的物品比如游戏机、监控系统、汽车、医疗设备、智能眼镜、手表、运动手环等
  • 随着5G时代的到来,万物互联也越来越称为可能

一、因特网

wiki 对它的定义是:

  • 因特网是一个全球范围的互联网系统,它使用 TCP/IP 协议簇来链接全世界的设备。我们可以从两个方面来描述一下因特网
  • 我们描述因特网可以通过基本硬件和软件组件来进行描述
  • 我们能够根据为分布式应用提供服务的联网基础设施来描述因特网

注:

  • 互联网一般指由计算机网络、局域网、广域网等组成的一个网络系统
  • 因特网更偏向于TCP/IP协议族组成的网络系统
  • 一般来说互联网 = 因特网

二、因特网的简介

通过硬件和软件来描述

  • 因特网是一个世界范围的计算机网络。说到因特网的构成,就不得不提构成因特网的组件是什么,还记得我们开头提到的因特网设备吗?
  • 智能手机、平板电脑,智能电视,智能家居,游戏机,手表,汽车,眼镜,温度调节系统,这些构件在因特网中有个专门的术语,**所有的这些设备都被称为主机(host)或者端系统(end system)**,
  • 一提到主机你是不是想到的是计算机的主机?这两个主机的领域虽然不同,但是它们的作用是相同的,都是系统的大脑
  • 据保守性评估,2015年已经有大约50亿台设备接入了因特网。而到了2020年这个数字将会变为250亿。

  • 那么这些主机或者端系统之间是如何进行通信的呢?
  • 实际上,端系统通过通信链路(communication link)分组交换机(packet switch) 连接到一起。

通信链路:指的是因特网中两个节点之间的物理通道。通信链路的传输介质有双绞线、光纤和微波

分组交换机:网络交换设备,它主要包括三个基本部分:交换单元、接口单元和控制单元

  • 不同的链路能够以不同的速率进行传输数据,称为链路的传输速率(transmission type) ,以 **比特/秒(bit/s,或 bps)**进行度量。

  • 当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节。由此形成的信息包用计算机网络的术语称为分组(packet)

  • 这个分组的概念非常重要。这些分组通过网络发送到目的端系统,在那里被装配成初始数据。

  • 分组交换机从它的一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组。

  • 分组交换机的种类有很多种,最著名最常见的分组交换机就是路由器(router) 和 链路层交换机(link-layer switch)

  • 一个分组所经历的一系列通信链路和分组交换机称为通过该网络的路径(route 或者 path)。

  • 端系统通过因特网服务提供商(Internet Service Provider,ISP) 接入因特网,包括如本地电缆或电话公司那样的住宅区 ISP、公司 ISP、大学 ISP,在机场、咖啡馆或者公共场所所提供的 WiFi 接入的 ISP,以及为智能手机或者其他设备提供移动接入的蜂窝数据。

  • 我们国家的 ISP 主要有三大基础运营商,中国电信、中国移动和中国联通

  • 端系统、分组交换机和其他因特网部件都要运行一系列的 协议(protocol)

  • 这些协议控制因特网中信息的接收和发送。其中 TCP 和 IP 协议是因特网中最重要的两个协议

  • IP协议定义了在路由器和端系统之间发送和接收的分组格式。

  • 因特网中的协议统称为TCP/IP,而不单单指的是TCP 和 IP 两个协议。

  • 实际上,这些因特网协议或者称为因特网标准是由因特网工程任务组指定的

通过分布式应用程序来描述

  • 上面我们描述的因特网是从硬件和软件层面进行说明的,除此之外,我们还可以通过为分布式应用提供服务的联网基础设施来描述因特网
  • 这个概念比较抽象,我们还是举例子说明一下。除了传统应用程序就像是电子邮件和web 冲浪外,因特网应用还包括智能手机和平板应用程序,这些应用程序中又包括像是即时通讯、来自云的音乐流、电影和电视流、在线社交网络、视频会议、多人游戏和基于位置的推荐系统。
  • 因为这些应用程序涉及多个相互交换的端系统,所以这些应用被称为分布式应用程序。重要的是,因特网应用程序运行在端系统上,而不是运行在网络核心的分组交换机中
  • 我们来深入的探究一下,因为应用程序可能会运行在端系统上,所以你需要编写使其运行在端系统上的程序,你可能会使用 C、Java、Python 来编写。现在,因为你开发了一个分布式应用程序,这个程序运行在不同的端系统需要彼此发送消息。
  • 此时我们遇见一个核心问题,那就是一个运行在端系统的应用程序如何让其他运行在端系统的应用程序收发数据呢?
  • 接入因特网的端系统提供了一个**套接字接口(socket Interface)**用于和其他端系统的应用程序收发数据。这个因特网套接字是应用程序必须要遵守的约定。