互联网基础
Internet工作原理
Internet是一个分组交换系统
- 在ARPAnet的研制初期,采用了线路交换技术。那时,虽然两台计算机实现了通信,但要独占一条实际的物理线路,造成通信线路浪费严重,资源便不容易为更多的用户共享
- 为了减少对通信线路的浪费,在Internet中人们采用了分组交换的技术方案,即每一次只容许一个通信系统占据通信线路,并且规定每次通信传送的数据量为一个“分组单位”
- 因此Internet就是一个巨大的分组交换系统。分组交换容许多台计算机之间同时进行通信,当用户通过Internet传输数据的时候,发送方的网络软件会将数据划分成组,而由接收方的网络软件把收到的分组重新组装成数据
路由器是Internet实现互连的“标准件”
- 很多人将Internet看成是一个单一的、庞大的、许许多多的计算机连在其上的计算机网络,但实际上并非如此
- Internet是通过路由器将各种不同类型的网络互连在一起所组成的,而每台计算机均具体的连到其中一个网络上。这就体现了Internet的含义——“网际网”。当一个网络中的一台计算机与另一个网络中的计算机进行通信时,这两台计算机的分组就是通过路由器传送的
- 路由器在Internet中的主要任务是:将分组从一个网络向另一个网络传送。当路由器收到从一个网络传送 来的分组之后,要将分组发送到另一个网络,直至达到目的地
- 当路由器连接多个网络时,就必须从这些网络 中选出一个进行发送,这个过程叫做“路由选择”
TCP/IP是Internet的核心协议
- 我们知道,硬件上互连起来的Internet还需要相应的软件才能互相通信
- 在Internet上,要将各种类型的计算机网络互连起来,其难度是可想而知的
- 最终,TCP/IP协议的出现,对Internet的形成奠定了坚实的软件基础
客户机/服务器的工作模式
- 计算机之间的通信实际上是程序之间的通信。
- Internet上参与通信的计算机可以分为两类,一类是提供服务的程序,叫做服务器(Server);另一类是请求服务的程序,我们称为客户机(Client)。
- Internet采用了客户机/服务器的模式,连接到Internet上的计算机不是客户机就是服务器。
- 使用Internet提供服务的用户要运行客户端的软件。例如,IE浏览器、Outlook电子邮件程序就是工作在客户端的软件
- 通常,Internet的用户利用客户软件与服务器进行交互,提出一个请求,并通过Internet将请求发送到服务器,然后等待回答
- 服务器则是由另一些更为复杂的软件组成,它在接收到客户机发送来的请求后,进行分析,并给与回答, 然后通过网络发送到客户机
- 客户机在接到结果后显示给用户。一般情况下,服务器程序必须始终运行着,并且要有多个副本同时运行,以便响应不同的用户
- 在Internet中,一个客户机可以同时向不同的服务器发出请求,一个服务器也可以同时为多个客户机提供服务
- 客户机向服务器发出请求和服务器接收、应答请 求的各种方法就是协议。例如, 在使用浏览器访问WWW服务器的过程中,WWW服务器运行支持HTTP协议的服务器软件,随时接收客户机的请求并做出回答
为什么Internet运行良好
- IP协议提供灵活性
- TCP协议提供可靠性
- TCP/IP协议软件的开发注重高效性
- TCP/IP协议的研究着重于实际结果
Internet成功的法则
- TCP/IP协议软件和Internet是由杰出的、有献身精神的人们设计的
- Internet是激励和挑战研究人员的一个梦想
- 在没有短期经济效益的情况下允许研究人员进行实验
- 不是梦想建造一个能解决所有问题的系统,而是一个能够高效运行的系统
- 在采纳一项标准前,坚持在实践中检验Internet的每个部分都运行良好
- Internet解决了如何连接多个网络这个重要的实践性,问题:这是由于没有一个网络能在任何应用中都是理想的
- Internet是一项不可思议的技术成就。尽管认真的设计和对细节的关注对其成功有一定的帮助,但是研究人员 对建立一个实际可运行系统的普遍认同更能帮助他们验证 想法和排除错误
IP地址
- 如前所述,Internet是通过路由器将物理网络互连在一起的虚拟网络。在一个具体的物理网络中,每台计算机都有一个物理地址(Physical Address),物理网靠此地址来识别其中每一台计算机。在Internet中,为解决不同类型的物理地址的统一问题,在IP层采用了一种全网通用的地址格式,为全网中的每一台主机分配一个Internet地址,从而将主机原来的物 理地址屏蔽掉,这个地址就叫IP地址
- 在Internet中,IP地址所要处理的对象比局域网要复杂的多,所以必须采用层次型结构进行编址。Internet在概念上可分为三个层次,最高层是Internet,第二层是各个物理网络 ,第三层则是各个网络中的主机。在网络层次结构中,由于Internet具有唯一性,所以在分配地址时没有必要给它留一席之地。这样一来,IP 地址由网络号和主机号两部分构成。根据TCP/IP协议规 定,IP地址由32比特组成,因此,如何将32比特的信息合理的分配给网络和主机作为编号,是一个很重要的问题
IP地址的类型
虽然在Internet中网络数量是一个难以确定的因素,但是每个网络的规模却是比较容易确定的。按照网络规模的大小,可以将IP地址分为五种类型,其中A、B、C是三种主要的类型。除此之外,还有两种类型的网络,一种是专供多目的传送的多目地址D,另一种是扩展备用的地址E
- A类地址
由图可知,A类地址的有效网络数是126(除全0和全1 外),主机的有效数目是16777214(除全0和全1外),此类地址一般分配给具有大量主机的网络用户,例如IBM公司等。 - B类地址
B类地址的有效网络数是16 384,主机的有效数目是65 534
此类地址一般分配给具有中等规模主机数的网络用户 - C类地址
C类地址的有效网络数是2 097 152,主机的有效数目是254
此类地址一般分配给小型的局域网用户 - 在TCP/IP协议中,IP地址是以二进制的方式出现的, 但这种形势非常不利于人的阅读习惯,因此,为了便于用户阅读和理解IP地址,Internet管理委员会决定用“点 分十进制表示法”表示IP地址。32个比特正好是4个字节, 每个字节作为一段,共4断,每断的大小用十进制表示, 因此其形式为:a.b.c.d
- 例如,清华大学校园网的WWW服务器的IP地址为
166.111.4.100 ,用 二进 制表 示为 :
10100110.01101111.00000100.01100100
由此,我们可以看出,这是一个B类地址
- 例如,清华大学校园网的WWW服务器的IP地址为
- IP地址的最高管理机构称为InterNIC(Internet网络信 息中心,位于美国),它专门负责向提出IP地址申请的组织分配网络地址。另外InterNIC下设机构APNIC,位于荷 兰,负责欧洲地区网络地址的分配;而亚太地区IP地址的分配则由位于日本的APNIC负责。近几年来,由于中国申请IP地址的单位日益增多,APNIC将权力下放到中国的互联网,例如CERnet对加入CERnet的用户单位发放IP地址
- 特殊IP地址
前缀 | 后缀 | 地址类型 | 用途 |
---|---|---|---|
全0 | 全0 | 本机 | 启动时使用 |
网络 | 全0 | 网络 | 全1 标识一个网络 |
网络 | 全1 | 直接广播 | 在特定网上广播 |
全1 | 全1 | 有限广播 | 在本地网上广播 |
127 | 任意 | 回送 | 测试 |
- 值得注意的是,当前Internet上使用的IP地址是在1978年确立的协议,称为IPV4.尽管这个协议在理论上大约有43亿(232)个 IP地址,但并不是所有的IP地址都得到了充分的利用。由于历史形成的原因,美国的一些机 构往往被划分成A类地址,但他们并没有充分利用其中的地址资源,而其他国家的Internet系统则厂被划分为C类地址而不够使用。因此,Internet工程部(IETF)又提出了新的IP协议版本IPV6,将IP地址空间扩展到128位。在未来的日子里,IPV4将以渐进的方式过渡到IPV6
子网掩码
子网的划分
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的。是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分
子网的划分
子网划分的计算
利用子网数来计算
在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。
- 将子网数目转化为二进制来表示
- 取得该二进制的位数,为N
- 取得该IP地址的类子网掩码,将其主机地址部分的的前N位置即得出该IP地址划分子网的子网掩码。
- 如欲将B类IP地址168.195.0.0划分成27个子网:
- 27=11011
- 该二进制为五位数,N = 5
- 将B类地址的子网掩码255.255.0.0的主机地址前5位置 1,得到255.255.248,即为划分成 27个子网的B类IP地址 168.195.0.0的子网掩码。
- 如欲将B类IP地址168.195.0.0划分成27个子网:
利用主机数来计算
- 将主机数目转化为二进制来表示
- 如果主机数小于或等于254(注意去掉保留的两个IP地址), 则取得该主机的二进制位数,为N,这里肯定N<8。如果大于254,则N>8,这就是说主机地址将占据不止8位。
- 使用255.255.255.255来将该类IP地址的主机地址位数全部置1, 然后从后向前的将N位全部置为 0,即为子网掩码值。
- 如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:
- 700=1010111100
- 该二进制为十位数,N=10
- 将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255,然后再从后向前将后 10位置0,即为: 11111111.11111111.11111100.00000000,即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址 168.195.0.0的子网掩码
- 如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:
IPV6
- IPv6在1998年12月被互联网工程任务小组(Internet Engineering Task Force,简称IETF)通过公布互联网标准规范(RFC 2460)的方式定义出台。
- IPv6使用了128位的地址,具有比IPv4大得多的地址空间,支持2128(约3.4 ×1038)个地址。这一扩展提供了灵活的地址分配以及路由转发,并消除了对网络地址转换(NAT)的依赖。就以地球人口70亿人计算,每人平均可分得约4.86 x 1028个IPv6地址。
- 在很多场合,IPv6地址由两个逻辑部分组成:一个64位的网络前缀和一个64位的主机地址,主机地址通常根据物理地址自动生成,叫做EUI-64(或者64-位扩展唯一标识)
- IPv6二进位制下为128位长度,以16位为一组,每组以冒号":"隔开,可以分为8组,每组以十六进制方式表示。例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344
- IPv6分组由两个主要部分组成:头部和负载。包头是包的前40字节并且包含有源和目的地址,协议版本,通信类别(8位,包优先级),流标记(20位,QoS服务质量控制),负载长度(16位),下一个头部(用于向后兼容性),和跳段数限制(8位,生存时间,相当于IPv4中的TTL)。后面是负载,至少1280字节长,或者在可变MTU(最大传输单元)大小环境中这个值为1500字节。负载在标准模式下最大可为65535 字节,或者在扩展包头的"jumbo payload"选项进行设置
域名系统
域名地址
- 在Internet中,由于采用了统一的IP地址,才使得网上任意两台主机能够相互通信。然而,IP地址是一个比较长的数字,对一般用户来说,记住这些抽象的数字式比较困难的。因此,Internet中采用了用字符表示主机地址的方法,这就是域名地址。IP地址与域名的关系,正如每个学生都有一个姓名和学号,人名比学号好记一样
- 例如,清华大学校园网的WWW服务器的IP地址为166.111.4.100,其域名地址为:www.tsinghua.edu.cn其中,www为清华大学的一台WWW服务器,tsinghua表示清华大学,edu表示教育科研网,cn表示中国。因此,从域名上我们大致可以看出主机所在的位置
*域名
- Internet中的域名系统采用了层次结构的命名机制。首先由InterNIC划分出若干*域名,例如cn(中国)、uk(英国)等地理类域名和美国的各种机构组织(由于Internet的主干网在美国,因此美国的机构域名和其他国家或地区的域名同级,都作为*域名),并将各部分域名的管理权交给相应的机构,例如,中国域cn交给国务院信息办公室,国务院信息办公室在负责分配下一级的域名,依次类推就形成了域名的层次结构
- *域名通常具有最一般或最普通的含义。*域名大体可以分为两类:机构组织类域名和地理类域名, 其含义如表所示。以下列出了一些常用的机构域名及其表示的含义
域名 | 含义 | 域名 | 含义 | 域名 | 含义 |
---|---|---|---|---|---|
gov | *机构 | au | 澳大利亚 | in | 印度 |
edu | 教育机构 | ca | 加拿大 | it | 意大利 |
con | 商业工业 | cn | 中国 | jp | 日本 |
mil | 军事部门 | de | 德国 | uk | 英国 |
net | 网络机构 | dk | 丹麦 | us | 美国 |
org | 其他机构 | fr | 法国 | ru | 俄罗斯 |
域名服务器
- 虽然使用域名后方便了用户的使用和记忆,但在Internet中进行通讯的时候,必须要通过IP地址进行,这就需要有专门的软件完成IP地址和域名地址之间的转换。Internet中安装这种软件并完成相应工作的主机叫做域名服务器(DNS Server),如图所示。
- 在使用域名的时候,要知道,对于一个Internet上的主机,可以有一个域名也可以有多个域名,这可以根据使用者的需要,由域名管理系统来具体实现,但对每个域名来说,只能对应一个IP地址。
- DNS域名解析过程
- 客户机提出域名解析请求,并将该请求发送给本地的域名服务器
- 当本地的域名服务器收到请求后,就先查询本地的缓存, 如果有该纪录项,则本地的域名服务器就直接把查询的结果返回
- 如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址
- 本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
- 重复第四步,直到找到正确的纪录
- 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机
区域文件与DNS的答复
-
区域文件就是包含了此域中名字到IP地址解析记录的一个文件(如文件名可能是seebod.com.这个文件的内容是这样的:
- primary name server = dns.example.com (主服务器的主机名是dns.example.com),
- serial = 2007042913 (当前序列号是2007042913。这个序列号的作用是当辅域名服务器来copy时候这个文件时,如果号码增加了就copy)
- refresh =10800 (3 hours) (辅域名服务器每隔3小时查询一个主服务器)
- retry = 3600 (1 hour) (当辅域名服务试图在主服务器上查询更时,而连接失败了,辅域名服务器每隔1小时访问主域名服务器)
- expire = 604800 (7 days) (辅域名服务器在向主服务更新失败后, 7天后删除seebod.com.中的记录。default TTL = 3600 (1 hour) (缓存服务器保存记录的时间是1小时。)
-
区域文件就是包含了此域中名字到IP地址解析记录的一个文件(如文件名可能是seebod.com.这个文件的内容是这样的:
- primary name server = dns.example.com (主服务器的主机名是dns.example.com),
- serial = 2007042913 (当前序列号是2007042913。这个序列号的作用是当辅域名服务器来copy时候这个文件时,如果号码增加了就copy)
- refresh =10800 (3 hours) (辅域名服务器每隔3小时查询一个主服务器)
- retry = 3600 (1 hour) (当辅域名服务试图在主服务器上查询更时,而连接失败了,辅域名服务器每隔1小时访问主域名服务器)
- expire = 604800 (7 days) (辅域名服务器在向主服务更新失败后, 7天后删除seebod.com.中的记录。default TTL = 3600 (1 hour) (缓存服务器保存记录的时间是1小时。)
-
DNS服务器对于客户请求的答复具有多种类型,常见的有以下四种:
- 权威答复:权威答复是返回给客户的正向答复,并且设置了DNS消息中的权威位。此答复代表从具有权威的DNS服务器处发出
- 正向答复:正向答复包含了匹配客户端解析请求的资源记录
- 参考答复:参考答复只在DNS服务器工作在迭代模式下使用,包含了其他有助于客户端解析请求的信息。例如,当DNS服务器不能为客户端发起的解析请求找到某个匹配值时,则向DNS客户端发送参考回复,告诉它有助于解析请求的信息
- 否定答复:否定答复指出权威服务器在解析客户端的请求时可能遇到了以下两种情况之一:
- 权威DNS服务器报告客户端查询的名字不存在
- 权威DNS服务器报告存在对应的名字但是不存在指定类型的资源记录
- 无论正向答复还是否定答复,DNS客户端都将结果保存在自己的本地缓存中
DNS解析故障
- 当DNS解析出现错误,例如把一个域名解析成一个错误的IP地址,或者根本不知道某个域名对应的IP地址是什么时,就无法通过域名访问相应的站点了,这就是DNS解析故障。出现DNS解析故障最大的症状就是访问站点对应的IP地址没有问题,然而访问他的域名就会出现错误
- 利用nslookup来判断DNS解析故障
- 通过“开始->运行->输入CMD”后回车进入命令行模式
- 输入nslookup命令后回车,将进入DNS解析查询界面
- 命令行窗口中会显示出当前系统所使用的DNS服务器地址
- 接下来输入无法访问的站点对应的域名。假如不能访问的话,那么DNS解析应该是不能够正常进行的,会收到DNS request timed out,timeout was 2 seconds的提示信息。这说明计算机确实出现了DNS解析故障。如果DNS解析正常的话,会反馈回正确的IP地址
- 查询DNS服务器工作是否正常
- 通过“开始->运行->输入CMD”后回车进入命令行模式
- 输入ipconfig /all命令来查询网络参数
- 在ipconfig /all显示信息中包含DNSSERVERS,这个就是当前的DNS服务器地址。如果这个地址是个外网地址,如果使用外网DNS出现解析错误时, 可以更换一个其他的DNS服务器地址即可解决问题
- 如果在DNS服务器处显示的是内部网络地址,那么说明DNS解析工作是交给内部的DNS服务器来完成的,这时需要检查这个DNS服务器,在DNS服务器上进行nslookup操作看是否可以正常解析。解决DNS服务器上的DNS服务故障,一般来说问题也能够解决
- 清除DNS缓存信息
当计算机对域名访问时并不是每次访问都需要向DNS服务器寻求帮助的,一般来说当解析工作完成一次后,该解析条目会保存在计算机的DNS缓存列表中,如果这时DNS解析出现更改变动的话,由于DNS缓存列表信息没有改变,在计算机对该域名访问时仍然不会连接DNS服务器获取最新解析信息,会根据自己计算机上保存的缓存对应关系来解析,这样就会出现DNS解析故障。这时可以通过清除DNS缓存的命令来解决故障- 通过“开始->运行->输入CMD”进入命令行模式
- 执行ipconfig /flushdns命令,当出现“successfullyflushed the dns resolver cache”的提示时就说明当前计算机的缓存信息已经被成功清除
- 接下来再访问域名时,就会到DNS服务器上获取最新解析地址,再也不会出现因为以前的缓存造成解析错误故障了
- 修改HOSTS文件
把HOSTS文件中的DNS解析对应关系进行修改,从而实现正确解析的目的。因为在本地计算机访问某域名时会首先查看本地系统中的HOSTS文件,HOSTS文件中的解析关系优先级大于DNS服务器上的解析关系。如果希望把某个域名与某IP地址绑定的话,就可以通过在HOSTS文件中添加解析条目来实现
暴风影音DNS事件分析
- 暴风影音是dnspod用户。随着时间推移,暴风影音在各地dns(LDNS)上的解析缓存(TTL)到期
- 暴风隐藏在后台的程序解析域名,解析请求被送给了各地的LDNS,各地LDNS将请求送给dnspod。普通网民不知不觉间成为了DNS风暴的参与者
- Dnspod的服务器已经无法访问,于是ldns自动的多次尝试,一个用户的一次解析变成了3次以上的重试
- 2.5亿的暴风用户,2500万的在线用户不停地尝试,2500万用户*1/10(10s一次的解析)ldns的3次重复每用户的每次请求的3次重复=2250万次/秒请求
- 如果这种情形继续下去,下面各地LDNS上关于baofeng.com NS的TTL将到期
- 所有暴风的解析将被递归到com域上国际互联网出口将会怎样?
- 如果……
- DNSPOD如果能很快恢复,问题就不会变大 Dnspod的服务器如果分散在全国各地,或许不会一损俱损
- 如果将baofeng.com的A记录的TLL设得更长一些,长得让dnspod拥有足够时间恢复,问题可能就不会发生
统一资源定位器
URL的两种形式与例子
- 统一资源定位器(Uniform ResourceLocators)简称URL,是WWW使用的基本编址方法。URL是一种用于识别网络上资源的文本字符串。
- URL有两种形式,绝对式和相对式。
- 绝对式URL的形式为:
- 协议://主机名[:端口号]/[绝对路径] 协议:所使用的应用协议
- 主机名:Internet主机域名或IP地址
- 绝对路径:文档或其他资源的完整路径和名称
- 相对URL不包括“协议”,在URL的起始处使用如下形式:
- /相对路径名
- 相对路径名是指相对于服务器已知的某些基本路径资源的路径。
- 绝对式URL的形式为:
- 以下是一些统一资源定位符协议的例子:
- http——超文本传输协议资源
- https——用加密传送的超文本传输协议
- ftp——文件传输协议
- mailto——电子邮件地址
- ldap——轻型目录访问协议搜索
- file——当地电脑或网上分享的文件
- news——Usenet新闻组
- gopher——Gopher协议
统一资源定位符的日常使用
超文本传输协议(HTTP)的统一资源定位符将从 因特网获取信息的五个基本元素包括在一个简单的地址中:
- 传送协议
- 服务器
- 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
- 路径。(以“/”字符区别路径中的每一个目录名称)
- 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
- 典型的统一资源定位符看上去是这样的:
http://zh.wikipedia.org:80/w/index.php?title=Internet &printable=yes
其中:http是协议;zh.wikipedia.org是服务器;80是服务器上的网络端口号;
/w/index.php是路径;?title=Internet&printable=yes是查询。 - 统一资源定位符不但被用作网页地址,数据库终端也使用统一资源定位符服务器连接其服务器。实际上任何终端-服务器程序都可以使用统一资源定位符来连接。以下是一个数据库的统一资源定位符
jdbc:datadirect:oracle://myserver:1521;sid=testdb
URI
- URI可被视为定位符(URL)、名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法
- URL(定位符)和URN(名称)方案属于URI的子类,URI可以为URL或URN两者之一或同时是URI和URN。技术上讲,URL和URN属于资源ID;但是,人们往往无法将某种方案归类于两者中的某一个:所有的URI都可被作为名称看待,而某些方案同时体现了两者中的不同部分
- 用于标识唯一书目的ISBN系统是一个典型的URN使用范例。例如,ISBN 0-486-27557-4( urn:isbn:0-486-27557-4 )无二义性地标识出莎士比亚的戏剧《罗密欧与朱丽叶》的某一特定版本。为获得该资源并阅读该书,人们需要它的位置, 也就是一个URL地址
- 在类Unix操作系统中,一个典型的URL地址可能 是一个文件目录,例如file:///home/username/RomeoAndJuliet.pdf。该URL 标识出存储于本地硬盘中的电子书文件
- 因此,URL和URN有着互补的作用
- 关于URI的讨论多源于题目为《W3C/IETF URI 规划联合小组报告:统一标识资源符(URI), URL和统一资源名(URN):阐明与建议》的 RFC3305 文件。这一RFC文件描述了一个,以统一W3C和IETF内部对于各种“UR*”术语之间关系的不同看法为目的而设立的,W3C/IETF联合工作小组的工作。虽然未作为标准被这两个组织所发布,但该文件确立了上述种种共识,并就此催生了许多标准的诞生