[译]一个门外汉对网络和UDP/TCP/IP的理解(1)
原文链接 https://yaowenjie.github.io/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/laymans-understanding-of-networks-and-udp-tcp-ip
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
本文源自对文章Layman’s understanding of Networking & UDP/TCP/IP(点击进入原文)的翻译。
本文,我将以一个门外汉的角度来解释电脑网络工作的原理,特别是TCP/IP这个用于因特网的协议。这里将涵括因特网编址、域名、以及端口等内容。希望通过阅读此文,你可以更好的理解电脑间的信息传输。在第(1)节,主要讨论计算机网络的基础。第(2)节主要讨论域名,而在第(3)节讨论端口。
<!--more-->
计算机网络的基本内容(它就像一个邮局)
首先,问题来了。如果我需要把一段信息(文件内,或者你输入的内容,又或者其他形式)从电脑A传到电脑B。我应该怎么做? 我觉得最好的类比,就是把两台电脑之间信息的传输看做平常的信件邮递服务。比如,在一个信件邮递服务中,亨利(电脑A)有一封信或者一份文档(电脑上的一个文件)要寄给约翰(电脑B)。那么他要做的无非就是把信放在信封内,然后把它送到邮局,之后,邮局就会把它邮递到约翰那儿。 假设这封信有三十页长,而由于某些原因,目前的信封只能装1页内容。那怎么办?因为不能够换一个更大的信封,那就只能用30个信封了,每个信封装一页纸,然后再发30次邮件。对于邮局而言,就是把这30封信封邮寄到约翰那儿。而当约翰收到这些时,却不能保证他是按照发送的顺序接收到这些邮件的。因此他我们必须确定这些信封是否含有第一页,第二页等等的标签。那么,当约翰收到信时,就能重新把它们正确的排序了。
把它放在计算机网路中会怎样
在计算机网络中,它几乎会发生一模一样的事。你有一个需要传送的文件,它会被分成多个更小的块,把它放在信封中并传送给网关(Gateway)或者网络服务提供者(ISP)。就像一封常规的邮件,这个信封包含了收信人的地址以及序号。携带准备被发送数据的信封叫做数据报(Datagram)。
用户数据报协议(UDP)
联系我们上面的例子。亨利想发30个数据包,约翰将收到30个数据报。约翰要知道信封的顺序的话,他所要做的就是拆开信封并且按照信封上标记的顺序摆放信件。同样地,用于接收的计算机也会得到所有30个数据报,并且它可以将这些文件重新正确地排序。 上面解释的方法被称作用户数据报协议(UDP)。想知道更多关于UDP的技术信息,你可以看看 Wikipedia上的对它的解释。 好,现在你理解了UDP,并且类比了通过邮局发送常规邮件的形式,你可能发现在执行时有一个潜在的问题。我们假设在上面的例子中,约翰收到了除了23号信封之外的所有信封。他可以告诉亨利重新发送23号信封,但是约翰怎么知道何时去请求?可能但约翰发送了重新发送23号信封请求时,邮局就把这丢失的23号信封送来了。23号信封邮递延误的原因有很多。可能是邮递员当天生病了,或者任何其他原因。 所以我们需要一个更好的方式来确认约翰正确地收到了所有数据。幸运的是,在计算机网络中,UDP并不是唯一在计算机间发送数据的协议。
传输控制协议(TCP)
在UDP中,一个人可以随意发送一个数据包。比如说,在约翰不知情时,亨利可以发送邮件给约翰。并且一旦亨利发送了邮件,他将不得不推断邮件已经被传送,除非约翰回来请求再重新发送他没有收到的特定的信封。 和UDP不同的是,TCP协议需要你首先建立连接。因此如果亨利要使用TCP协议发送邮件,他必须首先和约翰建立连接。一旦一个连接已经建立了,亨利发送第一个信封并且去等待约翰确认收到了邮件。当亨利收到了来自约翰的第一个信封安全收到的确认信息,亨利就能够发送第二个信封。这个过程会一直重复,直到亨利告诉约翰他已经发送完所有的信封。 不同于UDP,使用TCP协议,约翰能够保证收到的所有信封是按照正确的顺序,因为亨利会发送一个信封并且等待来自约翰的确认,然后再发送下一个信封,如此循环。想知道更多关于TCP的技术描述,请访问Wikipedia。