创作立场声明:本文由秃头宝贝我人工翻译,并未使用任何翻译软件,请放心食用。欢迎大家交流分享更多更有深度的知识内容,不允许任何人出于商业或营利目的转载我的文章。
本文由秃头宝贝我人工翻译,并未使用任何翻译软件,请放心食用。
原文链接
InternetWhitepaper.html
写在阅读本文之前
该篇文章由Rus Shuler于1998年完成,并在2002年更新文章内容,浅析了互联网(Internet)的工作原理,我认为是一篇极其优秀的科普文章,从tcp/ip协议族的抽象层面和硬件层面(Protocol Stack)以及基础设施层面(Infrastructure)梳理了数据在互联网上的流动,并生动的给出了图示用于讲解互联网的硬件设施以及常用应用层协议数据传输过程。
这篇文章贼鸡儿棒,比大学时计算机网络的老师讲的强多了,这也是我翻译这篇文章的初衷。比起枯燥敷衍的说一遍OSI七层网络模型,听的人云里雾里,不如像这篇文章里分四层,从每一层的作用入手,配合ping、routetrace等工具详细讲解,这样网络的概念理解起来才会容易。能否把知识以别人能够听懂、能够理解的方式传授出去,我觉得是我们这个时代教育里极其欠缺的。
简介
很多人会有这样的疑问,英特网是如何运转工作的?这是一个非常好的问题!英特网的发展是爆炸性的,并且你几乎很难在诸如电视、收音机、杂志等媒介上躲过www.XXX.com
这样的广告信息不断的轰炸。为了更有效地使用英特网这个新工具,你需要很好的理解英特网,因为英特网已经成为我们生活中很大的一部分。(本文写于98年,现在已经很难在传统媒介上看到网址了,但这他妈的不重要,后面的概念才是好登西)
这个白皮书解释了使英特网得以运作的潜在基础设施和技术,这篇文章没有钻的很深,但是足以覆盖英特网这个概念中的每一个基础部分,对于其他的没有回答的问题,文章末尾给了一连串的资源地址,便于你继续深入学习。任何评论、建议、问题等,都被鼓励直接和本文的英文原作者通过电子邮箱直接联系,地址为rshuler@gobcg.com
从哪儿开始讲起?当然是英特网地址
每一个连接到英特网的电脑都必须要有一个独一无二的英特网地址,因为因特网是一个包含了无数的电脑的全球性的网络结构。英特网地址是xxx.xxx.xxx.xxx
的形式,并且xxx
必须是0-255之间的数。这个地址被我们称为IP地址(Intenet Protocol Address)
下面的图片描绘了两个连接了英特网的电脑;你的IP地址为1.2.3.4的电脑与另一台IP地址为5.6.7.8的电脑。英特网夹在两台电脑之间,用一个抽象的云朵代表它(随着文章的推进,图表1中的英特网部分将被一步步重新绘制并解释重新绘制后暴露的新的细节)
图表1
如果你通过英特网服务提供商
这种方式(ISP,Internet Service Provider)连接到英特网,你可能会在你拨入会话的期间里被分配到一个临时的IP地址;如果你通过本地局域网
这种方式(LAN,local area network)连接到英特网,你的电脑可能会获得一个永久的IP地址,或者你的电脑可能会从动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)获得一个临时IP地址。无论什么情况下,只要你连接到英特网,你的电脑就会有一个独一无二的IP地址
一探究竟 Ping程序
如果你使用微软的windows操作系统或Unix系统的变种,并在此基础上连接到互联网,有个便利的程序能够让你知道另一台电脑是否接入了英特网,这个程序就是ping
,这个名字的起源可能来自旧时海军声纳系统。如果你使用Windows操作系统,打开windows命令行工具。如果你使用unix系统及其变种,进入命令行,输入ping www.baidu.com
,那么ping程序将会发送一个ping回声请求(实际上是一个英特网控制消息协议(ICMP,Internet control message protocol))给你指定的主机。被ping的电脑将回复消息以做出回应。这个ping程序将计数过期的时间知道收到回复消息(如果确实收到的话)。除此之外,如果你输入的是一个域名而不是IP地址,ping程序将解析域名并显示该域名的IP地址,更多有关域名和地址解析的内容稍后将讨论
协议族和数据包
如上所述你的电脑连接到英特网,并有了一个独一无二的地址。怎么样使你的电脑与其他连接到英特网的电脑展开交流呢?这里我们举一个栗子:假设你的电脑的IP地址为1.2.3.4,并且你想发送信息给IP地址为5.6.7.8的电脑。你想发送的信息内容为"唐人街探案3太难看了,说什么口碑两极分化的在我这里统统当水军处理!"。很明显,无论你的电脑通过什么类型的线连接到英特网,这条信息都要通过这个线传递出去。假设你在家里拨号进入你的ISP进入英特网,那么你要发送的这条信息必须通过电话线传送(98年上网主要靠电话线,现在都是光纤宽带了,但这不重要)。所以信息必须从字母文字被翻译转变为电信号,在英特网上传输,然后在被翻译转变为字母文字。这他妈的是怎么做到的呢?通过使用协议栈
。每一个电脑都需要协议栈用于在英特网上交流,并且协议栈通常内置于电脑的操作系统(比如windows、unix等)。用于英特网的协议栈被称为TCP/IP协议栈,因为TCP和IP是两种主要被使用的协议。
协议层级及作用简介
应用协议层(AP layer):这些协议专用于应用如:WWW、e-mail、FTP等
传输控制协议层(TCP layer):TCP使用端口号将数据包定向发送到电脑的特定应用上
英特网协议层(IP layer):IP使用IP地址将数据包定向发送到特定电脑上
硬件层(Hardware layer):将二进制数据包转变为网络信号,之后在转变回来(如:以太网卡,电话线的调制解调器等)
如果我们跟踪"唐人街探案3太难看了,说什么口碑两极分化的在我这里统统当水军处理!"这条信息从我们的电脑传送到IP地址为5.6.7.8的电脑的路径,那么它应该会如下图所示发生这些事情:
图表2
- 这条信息将在你的电脑上从协议栈的顶部开始,然后向下运作
- 如果被发送的信息比较长,那么这条信息通过的协议栈的每个层级可能会将信息切成更小的数据块(chunks of data)。这是因为通过互联网发送的数据都是在可被管理的块(manageable chunks)中被发送的。在英特网上,这些数据块被叫做数据包(packets)
- 这些数据包将透过应用层,然后继续到达TCP层。每个数据包都被指定了一个端口号(port number)。端口这个概念过一会再解释,但已经足以说明许多程序都使用TCP/IP协议栈并发送消息。我们需要知道目标计算机的哪一个程序需要接受我们的消息,因为目标计算机正在制定端口上监听消息的到来
- 通过TCP层之后,数据包来到了IP层,这里每个数据包都接受了它们的目的地地址5.6.7.8
- 现在我们的消息数据包有了端口号和IP地址,他们已经做好了通过英特网被发送的准备。硬件层将完成将我们包含了我们消息的字母文字的数据包转变为电信号,并通过电话线来传输它们
- 在电话线的另一端终点,你的ISP直接连接到了英特网。你的ISP的路由将检验每个数据包的目的地地址并决定向哪儿发送这些数据包。通常情况下,这些数据包的下一站是另一个路由器。更多有关路由器和英特网基础设施的内容稍后将提及。
- 最终,数据包到达了IP地址为5.6.7.8的电脑,在这里数据包从目标电脑的TCP/IP协议栈的底部开始,并逐步向上运作
- 随着数据包通过协议栈向上运作爬升,所有由发送端电脑协议栈附加的用于路由的数据将被从数据包中剥离出去
- 当数据到达了目标电脑协议栈的顶部,数据包被重组为它的原始格式"唐人街探案3太难看了,说什么口碑两极分化的在我这里统统当水军处理!"