CS 168 | 导论
一、互联网导论 互联网是什么? 互联网不是我们平时打开浏览器看到的花花绿绿的网页,那只是互联网应用的一部分——万维网。电子邮件、我的世界游戏服务器,甚至物联网设备都算互联网的一份子。 互联网是联盟式的、可扩展的 互联网由很多运营商(ISP)在维护,每个运营商独立运作,但每个运营商都必须合作以连接整个世界。因此运营商们必须达成一致的协议,才能让互联网遍布世界的每一个角落。 互联网不是“金字塔层级”,也就是不是只有一个运营商,因此我们互联网需要做的就是把各个运营商链接在一起,每个局域网连接在一起,每个设备连接在一起… 这就是互联网的可扩展性。 庞大体积也给互联网本身带来很多挑战,比如消息可能在传输中途就失效了,再比如中途有一个或者很多个路由器坏了等等,因此互联网需要面对随机和众多的故障。 协议 互联网的重点在于协议。协议就是一种标准,规定了互联网中的数据以什么方式、格式传输,从哪传送到哪,这样才能保证一致性。协议一般是以请求评论(RFC)的方式发布的,由 IETF 负责。 二、互联网层次 第一层:物理层 物理层的作用就是把位信息通过某种方式传输出去。这种方式通常有电线上的电压、无线无线电波、光纤电缆中的光脉冲等,这是电气领域的事情,是计算机网络的最低层次,我们不作深究。 第二层:数据链路层 在互联网中,一条链路连接两台机器,多条链路连接多台机器构成了局域网(local area network,LAN)。 链路层主要是把物理层的位信息分组成数据包(packets)(有时候也叫帧frames),以其作为基本单位。 第三层:网络层 不同局域网的设备想要沟通,就必须搭建局域网之间的桥梁,不同的局域网连接起来就构成了互联网。这个桥梁的两个端点就是交换器(switch) 或者 路由器(router)。 网络层解决了以下问题: 交换机或者路由器收到数据包,该往哪里转发?怎么发路径最短?(路由单元的重点) 如何保证链路上有足够的容量来传输我们的数据?(拥塞控制单元的重点) 网络层的两个特性是: 尽力而为传输:只管传输,不管有没有传输到目的地,尽力就好。 数据包抽象:如果传输大量数据,就把它切分成多个小数据包传输。 第四层:传输层 传输层以第三层网络层为基础,实现了一个额外的协议,用于重传丢失的数据包、将数据分割成数据包,以及重新排序乱序到达的数据包(以及其他功能)。 传输层协议使我们能够停止以数据包为单位思考,转而以流的形式思考,即两个端点之间交换的数据包流。 第七层:应用层 应用层使得互联网可以支持不同的应用,例如收邮件,下载视频等等。如果没有第七层,恐怕互联网就只能有一种用途,换句话说应用层使得互联网有更多的应用。 会话层(第五层)原本应该将不同的数据流组装成一个会话(例如,加载各种图像和广告来形成一个网页),而表示层(第六层)原本应该帮助用户可视化数据。如今,这些层的功能主要在第七层中实现,因此直接被跳过了。 三、报头 为什么需要报头 在第三层网络层我们提出了一个问题:数据包应该经过什么路径发送? 这件事关乎交换机或者路由器,我们应该提前告诉他们这个数据包往哪发送。实现方法就是在数据前面加上报头(headers)。而数据在这里我们就叫它载荷(payload)。 每一个网络设备都需要遵循一个报头标准,就像世界通用一个语言——英语,这样数据包的传输才不会乱套。 报头里有什么信息 目标地址:告诉路由器和交换器,数据包要往何处发送。 源地址:允许数据接收方可以回信。 校验和:确保数据包在传输中途没有损坏。 其他元数据:例如数据包的长度。 报头疯狂嵌套 信息顺着互联网层次越低,修饰的报头就越多;层次越高,报头就越少。 每一个设备都会处理前三层:物理层、数据链路层和网络层,但只有发信和收信的主机才可以处理后两层:传输层和应用层。经过这样不停的拆包和封装过程,数据最终被传输到目的地址。 第一层、第二层的协议可以采用无线或者有线方式传输,但是必须和上一跳或者下一跳的协议一样;第四层和第七层中,发送主机和目标主机的协议必须完全一样,以保证功能相同。 三、网络架构 设计范式 上一节我们自底向上了解了互联网层次,现在我们自顶向下来认识互联网设计采用的范式。 互联网的范式有很多也很有争议,比如联盟式(独立运营商合作),但在近年来,软件定义网络(SDN)作为一种更集中的网络管理方式出现。 “楚王好细腰” 互联网层次中的一层可以只有一个协议,也可以有很多很多协议。 现代互联网的具体协议如上图所示,形成了一个上下宽中间窄的图像。可以发现在第三层只有 IP 协议,互联网的每一个人都必须使用 IP 协议才能传输数据。 解复用 上面说到,多个协议可能采用同一个路径传递,因此在第四层解包的时候我们要在报头中声明,下一个协议具体是什么协议(TCP/UDP);而在第七层我们需要声明下一个端口是什么。端口用来区分数据包属于哪个应用程序。 端口分为逻辑端口和物理端口。逻辑端口就是报头里面的 port 字段;物理端口就是交换机上插的网线物理位置。 注意:套接字(socket)指的是操作系统用于将应用程序连接到操作系统中的网络栈的机制。当应用程序打开一个套接字时,该套接字将与一个逻辑端口号相关联。当操作系统接收到一个数据包时,它使用端口号将该数据包定向到相关联的套接字。 ...