第一章
因特网
公共因特网是一个世界范围的计算机网络,即它是一个互联了遍及全世界的数以百万计的计算设备的网络。这些计算设备多数是传统的桌面PC、基于 Linux的工作站以及所谓的服务器(服务器用于存储和传输Web页面和电子邮件报文等信息)。然而,越来越多的非传统的因特网端系统,如个人数字助手(PDA)、TV、移动计算机、蜂窝电话、Web相机、汽车、环境传感设备、数字像框、家用电器和安全系统,正在与因特网相连。
用因特网术语来说,所有这些设备都称为主机(host)或端系统( end system)。
主机有时又被进一步划分为两类:客户机( client)和服务器( server)。
在网络软件的上下文中,客户机和服务器有另一种定义。客户机程序( client program)是运行在一个端系统上的程序,它发出请求,并从运行在另一个端系统上的服务器程序( server program)接收服务。这种客户机-服务器模式无疑是因特网应用程序的最为流行的结构。Web、电子邮件、文件传输、远程注册(例如 Telnet)、新闻组和许多其他流行的应用程序采用了客户机-服务器模式。因为通常客户机程序运行在一台计算机上,而服务器程序运行在另一台计算机上,所以根据定义,客户机-服务器因特网应用程序是分布式应用程序( distributed application)。客户机程序和服务器程序通过因特网互相发送报文而进行交互。
今天的因特网应用程序并非全都是由与纯服务器程序交互的纯客户机程序组成的。越来越多的应用程序是对等(P2P)应用程序,其中的端系统互相作用并运行执行客户机和服务器功能的程序。例如,在P2P文件共享应用程序(如 Limewire、 eDonkey和 Kazaa)中,用户端系统中的程序起着客户机程序和服务器程序的双重作用。当它向另一个对等方请求文件时,起着客户机的作用。
端系统通过通信链路( communication link)和分组交换机( packet switch)连接到一起。
通信链路由不同类型的物理媒体组成,这些物理媒体包括同轴电缆、铜线、光纤和无线电频谱。不同的链路以不同的速率传输数据,链路的传输速率是以bps度量的。当一台端系统有数据要向另一台端系统发送时,发送端系统将数据分段,并为每段加上首部字节。用计算机网络的术语来说,由此形成的信息包称为分组( packet),这些分组通过网络发送到目的端系统,在那里被装配成初始数据。
分组交换机从它的一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组。市面上流行着各种不同类型且各具特色的分组交换机,但在当今的因特网中,两种最著名的类型是路由器( router)和链路层交换机(link-layer switch)。这两种类型的交换机朝着最终目的地转发分组。
从发送端系统到接收端系统,一个分组所经历的一系列通信链路和分组交换机称为通过该网络的路径( route或path)。
端系统通过因特网服务提供商( Internet Service Provider,ISP)接入因特网,包括像AOL(美国在线)那样的住宅区ISP、本地电缆或电话公司、公司ISP、大学ISP,以及像 T-Mobile那样在机场、旅馆、咖啡店和其他公共场所提供无线接入的ISP。
每个ISP是一个由多个分组交换机和多段通信链路组成的网络。不同的ISP为端系统提供了各种不同类型的网络接入。
端系统、分组交换机和其他因特网部件,都要运行控制因特网中信息接收和发送的一系列协议( protocol)。TCP( Transmission Control Protocol,传输控制协议)和lP( Internet Protocol,网际协议)是因特网中两个最为重要的协议。IP协议定义了在路由器和端系统中发送和接收的分组的格式。因特网主要的协议统称为TCP/IP。
因特网中的所有活动,凡是涉及两个或多个通信的远程实体都受协议的制约。
一个协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及在报文传输和/或接收或其他事件方面所采取的动作。
与因特网相连的端系统提供了一个应用程序编程接口( Application Programming Interface, API),API规定了运行在一个端系统上的软件请求因特网基础设施向运行在另一个端系统上的特定目的地软件交付数据的方式。因特网API是一套发送软件必须遵循的规则集合,因此因特网将向目的地软件交付数据。
网络核心
通过网络链路和交换机移动数据有两种基本方法:电路交换( circuit switching)和分组交换( packet switching)。在电路交换网络中,沿着端系统通信路径,为端系统之间通信所提供的资源(缓存、链路传输速率)在通信会话期间会被预留。在分组交换网络中,这些资源则不被预留;会话的报文按需使用这些资源,这将导致可能不得不等待(即排队)接入通信线路。
一个简单的类比是,考虑两家餐馆,一家需要预订,而另一家不需要预订但不保证能安排。对于需要预订的那家餐馆,我们在离开家之前要承受必须先打电话预订的麻烦。但当我们到达该餐馆时,原则上我们能够立即与服务员联系并点菜。对于不需要预订的那家餐馆,我们没有预订餐桌的麻烦,但也许不得不先等到有空闲餐桌后才能找服务员点菜。
电路交换
图1-8显示了一个电路交换网络。在这个网络中,用4条链路互联4台电路交换机。这些链路的每条都有n条电路,因此每条链路能够支持n条电路同时连接。每台主机(例如PC和工作站)都与一台交换机直接相连。当两台主机要通信时,该网络在两台主机之间创建一条专用的端到端连接(end-to- end connection)。(多个设备之间的会议呼叫当然也是可能的。为了简化起见,我们假定每个连接仅有两台主机。)因此,主机A为了向主机B发送报文,该网络必须在两条链路之一上先预留一条电路。因为每条链路具有η条电路,每条链路由端到端连接使用,该连接在连接期间获得该链路带宽的In部分。
链路中的电路要么通过频分多路复用( Frequency-Division Multiplexing,FDM)实现,要么通过时分多路复用(Time- Division Multiplexing,TDM)实现。对于FDM,链路的频谱由跨越链路创建的所有连接所共享。特别是,该链路在连接期间为每条连接专用一个频段。在电话网络中,这个频段通常具有4kHz(即每秒400赫兹或4000周)。该频段的宽度被称为带宽( bandwidth)。调频无线电台也使用FDM来共享88~108MHz的频谱,其中每个电台被分配一个特定的频带。
对于一条TDM链路,时间被划分为固定区间的帧,并且每帧又被划分为固定数量的时隙。
当网络跨越一条链路创建一条连接时,该网络在每个帧中为该连接指定一个时隙。这些时隙专门由该连接单独使用,一个时隙可用于传输该连接(在每个帧内)的数据。
分组交换
各种应用程序在完成其任务时要交换报文( message)。报文能够包含协议设计者需要的任何东西。报文可以执行一种控制功能(例如,握手例子中的“你好”报文),或能够包含数据(例如电子邮件数据、JPEG图像或MP3音频文件)。
在现代计算机网络中,源主机将长报文划分为较小的数据块,并称之为分组( packet)。在源和目的地之间,这些分组中的每个都通过通信链路和分组交换机( packet switch)(交换机主要有两类:路由器和链路层交换机)传送。分组以该链路的最大传输速率在通信链路上传输。
多数分组交换机在链路的输入端使用存储转发传输( store-and- forward transmission)机制。存储转发传输机制是指在交换机能够开始向输岀链路传输该分组的第一个比特之前,必须接收到整个分组。因此,存储转发式分组交换机沿着该分组的路径在每条链路的输入端引入了存储转发时延。
对于每条相连的链路,该分组交换机具有一个输出缓存( output buffer(也称为输出队列( output queue),它用于存储路由器准备发往那条链路的分组。该输出缓存在分组交换中起着重要的作用。如果到达的分组需要跨越链路传输,但发现该链路正忙于传输其他分组,该到达分组必须在输出缓存中等待。因此,除了存储转发时延以外,分组还要承受输出缓存的排队时延( queue delay)。这些时延是变化的,变化的程度取决于网络中的拥塞水平。因为缓存空间的大小是有限的,所以一个到达的分组可能发现该缓存被等待传输的分组完全充满了。在此情况下,将出现分组丢失或丢包( packet lost)—可能是到达的分组也可能是已经排队的分组之一将被丢弃。
分组交换网中的时延、丢包和吞吐量
时延
1.处理时延
检查分组首部和决定将该分组导向何处所需要的时间是处理时延的一部分。处理时延也包括其他因素,如检查比特级差错所需要的时间,该差错出现在这些分组比特从上游节点向路由器A传输的过程中。高速路由器的处理时延通常是微秒或更低的数量级。在这种节点处理之后,路由器将该分组引向通往路由器B链路之前的队列。
2.排队时延
在队列中,当分组在链路上等待传输时,它经受排队时延。一个特定分组的排队时延将取决于先期到达的、正在排队等待向链路传输的分组的数量。如果该队列是空的,并且当前没有其他分组在传输,则该分组的排队时延为0.另一方面,如果流量很大,并且许多其他分组也在等待传输,该排队时延将很大。我们将很快看到,到达组的分组数量是到达该队列的流量的强度和性质的函数。实际的排队时延通常在毫秒到微秒级。
3.传输时延
传输时延是路由器将分组推出所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器之间的距离无关。
4.传播时延
传播时延是一个比特从一台路由器向另一台路由器传播所需要的时间,它是两台路由器之间距离的函数,但与分组的长度或链路的传输速率无关。
协议层次
这个部分已经写过几次笔记啦,就直接放链接了
计算机网络:发送数据的过程
计算机网络:发送一封邮件的图解过程
可以简单理解一下计算机网络的七层或五层、四层~
网络的威胁
1.坏家伙能够经因特网将恶意软件放入你的计算机
为了从因特网接收数据或向因特网发送数据,我们将设备与因特网相连。接收或发送的数据包括各种好的东西,例如web页面、电子邮件报文、MP3、电话、视频实况、搜索引擎结果等。但是,随之而来的还有不好的东西(这些不好的东西统称为恶意软件( malware),它们能够影响我们的设备。一旦恶意软件感染了我们的设备,它就能够做各种不正当的事情,包括:删除文件;安装间谍软件来收集隐私信息,如社会保险号、口令和按键,然后将这些信息经因特网发送给坏家伙。受害主机还可能征召网络上数以千计的类似受害设备,它们被统称为僵尸网络( botnet),坏家伙可以控制僵尸网络,有效地对目标主机展开垃圾邮件分发或分布式拒绝服务攻击。
今天,大多数恶意软件是自我复制(self- replicating)的:一旦它感染了一台主机,就会从那台主机进更多的主机。按照这种方式,自我复制的恶意软件能够以指数级快速扩散。
病毒( virus)是一种需要某种形式的用户交互来感染用户设备的恶意软件。
2.坏家伙能够攻击服务器和网络基础设施
拒绝服务( Denial- of-Service,DoS)攻击是一种宽泛类型的安全性威胁。顾名思义,DoS攻击使得合法用户不能使用网络、主机或其他基础设施部分。Web服务器、电子邮件服务器DNS服务器(在第2章中讨论)和机构网络都可以成为DoS攻击的目标。因特网DoS攻击极为常见,每年会出现数以千计的DoS攻击
大多数因特网DoS攻击属于下列三种类型之一:
- 弱点攻击。这涉及向目标主机上运行的易受攻击的应用程序或操作系统发送制作精细的大报文。如果多个分组以适当的顺序发送给一个易受攻击的应用程序或操作系统,该服务可能停止运行,甚至导致主机崩溃。
- 带宽洪泛。攻击者向目的主机发送大量的分组,导致目标的接入链路变得拥塞,从而使合法的分组无法到达服务器。
- 连接洪泛。攻击者在目标主机中创建大量的半开或全开TCP连接。目标主机因这些伪造的连接而陷入困境,从而停止合法的连接。
3.坏家伙能够嗅探分组
今天,许多用户经无线设备接入因特网。当无所不在的因特网接入极为便利且令人惊奇的新应用程序为移动用户所用时,也产生了重大的安全弱点,即在无线传输设备的附近放置一台被动的接收机,该接收机就能得到传输的每个分组的拷贝!这些分组包含各种敏感信息,包括口令、社会保险号、商业秘密和隐秘的个人信息。记录每个流经的分组拷贝的被动接收机被称为分组嗅探器( packet sniffer)。
4.坏家伙能够伪装成你信任的人
生成具有任意源地址、分组内容和目的地址的分组,然后将这个人工制作的分组传输到因特网中,当然因特网将忠实地将该分组转发到目的地。一个不可信的接收方(比如说因特网上的一台路由器)接收了分组,用(虚假的)源地址伪装真实的源地址,进而执行某些嵌入在该分组中的命令(比如说修改它的转发表)。将具有虚假源地址的分组注入因特网的能力被称为IP哄骗( IP spoofing),它只是一个用户能够冒充另一个用户的多种方式之一。
为了解决这个问题,需要采用端点鉴别(end- point authentication)机制,即确保报文源自我们认为它应当来自的地方的机制。当你继续学习本书各章时,建议你思考一下怎样为网络应用程序和协议做这件事。
5.坏家伙能够修改或删除报文
我们通过描述中间人攻击( man-in-middle attack)来终止这个有关网络攻击的概述。在这类攻击中,坏家伙插入到两个通信实体之间的通信路径中。
思维导图:
图片比较大,可以另存再放大看~