每当我们轻轻点击鼠标打开网页,一幅幅美妙的图片映入眼帘,我们可有曾想过,它是经历了一场什么样的变化才被展示到我们的电脑上呢?带着这样一个问号,让我们开始一场奇妙的网络图片传输之旅。
我的故乡——网页服务器
在互联网的世界中,一切皆是数字,一切的文件都以数字的形式存储在电脑设备中,我,也就是图片,作为这次旅行的主角也不例外。当没有人请求我时,我静静的躺在网站服务器设备的某个文件夹中,名字暂且叫pic.jpg吧。我一般会被压缩成JPG或者PNG格式,以数字字节的形式保存起来。通过一些特殊的编辑器,大家可以看到我的本来面目,如下图。
我被邀请啦
当您轻轻的点击鼠标,或者输入我的网址的时候,我便接受到了您的邀请,准备来到您的身边,当然因为我是数字文件,所以我只要传一份拷贝给您就可以了。
回过头来,先来看看我收到了什么样的邀请,当您点击网页的时候,其实您电脑上的浏览器已经替您向我发送了一封请求,它可能是这样的:
这其中的关键就是: GET /pic.jpg HTTP1.1,这是目前在互联网上使用最为广泛的一种通信协议——超文本传输协议(HTTP)。这短短的一句,就好似在说“服务器您好,我想看看pic.jpg这张图片”。很高兴接受您的邀请,但我可能还要准备一下,请您稍等。
我要准备出发了,得先打扮一番
我接受了您的邀请,但这是一场长途的旅行,甚至有可能是场跨国的旅行,不能说走就走,我得准备一下。
首先既然您是以HTTP方式邀请了我,那我也得以HTTP的方式答复您。“HTTP 200OK”,我让网页服务器软件以最简短的方式答应您的请求,当然后面会有我的一些信息:
Content-Type: image/jpeg ——我的类型是图片
Accept-Ranges: bytes ——我能接受范围请求
Server:Microsoft -IIS/8.5 ——我的网站服务器是微软开发的噢,叫IIS
Content-Length: 217434 ——我的文件长度是217434个字节(217K)
后面就是我的真身了,有心的朋友可以比较下,是不是和我原来的文件是一样的。
我可以真正启程了吗,恐怕还不行,网站服务器已经替我做好了HTTP的包装,但是它接着把我交给了操作系统,操作系统还需要帮我打扮一下。首先它要帮我穿上一层叫TCP的外衣,这层外衣最大的作用就是能保证我能准确无误的到达到您的电脑浏览器,即使中间由于各种问题导致传输失败,我也会被重新传给您(可靠传输)。
穿上了TCP,操作系统又给我套上一层叫IP的披风,在这一层里面,会给我指定您在网络中的地址(IP地址),这就像套了一只写好了地址的信封,保证我在网络中能找到您。至此操作系统的任务也已经完成了。
接下来,我就被送给服务器上真正的网络出口设备——网卡,网卡替我加上简单的网卡地址后,将我送给第一跳路由器,至此,我才真正离开了服务器,开始了网络之旅。
您好,您已经能看见我啦
我带着我的IP地址头,被网络中的路由器一层层的传递着,最终顺利到达了您的计算机的网卡入口,再通过您的网卡,操作系统,还有浏览器,一层层的脱去装扮(Ethernet->IP->TCP->HTTP->图片),最终将美丽的图片展现在您的眼前。
我从一幅在网页服务器上纯粹的图片,经过了HTTP->TCP->IP->Ethernet的层层包装,最终才在网络上发送出去,然后再在您电脑上进行着反向的操作,最终还原了我自己。
总结一下,这其实就是网络的分层传输协议,大部分的网络应用都是通过这种分层通信的方式来进行传输。这是一套国际标准,正式的叫法是OSI七层开放模型,OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)。每一层实现各自的功能和协议,并完成与相邻层的接口通信。