V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hanshijun
V2EX  ›  推广

一个网络请求的冒险之旅

  •  1
     
  •   hanshijun · 2019-04-14 10:59:42 +08:00 · 2799 次点击
    这是一个创建于 2086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对于互联网,人们总是高谈阔论,却很少有人愿意去了解电脑、手机、电视这些设备到底是如何被“连接”起来的。

    人们动动手指,点点鼠标,图片、视频便顺理成章地即时显示在屏幕上。只是,这一切并非理所应当,五光十色的互联网世界之下,是我们在夜以继日地工作。

    我是一个普通的网络请求。我很渺小,但始终都在履行责任——寻找被指定的资源,再将它们交付到我的主人手中。就像这座城市中成千上万而又默默无闻的快递小哥,穿梭在大厦与楼宇之间,完成使命。

    不同的是,真正的网络环境可不像现代化城市那么光鲜亮丽。它阴暗、潮湿,充满了未知的危险,如同一座黑暗森林。而我要做的,就是一场不折不扣的冒险。

    1 URL 与 IP 到底是什么?

    我的冒险,要从一张“羊皮卷”说起。那天,浏览器大叔神秘兮兮招呼我过去,告诉我 CPU 下达了一个命令:派遣使者访问外邦。而我是大叔最得力的门生,也是这类任务最合适的人选。大叔为我准备了一张羊皮卷,上面记录了我这次冒险需要用到的必要信息。

    当仁不让地,我接过了它,即刻启程。

    我缓缓展开羊皮卷,第一行赫然写着:「 URL: https://www.mail.google.com 」,什么是“URL”?我在脑中快速回忆着,对了! URL 即 Uniform Resource Locator 的缩写,翻译成中文便是“统一资源定位符”。因为互联网世界存在着不计其数的资源,每一处资源都需要有一个标记来定位它,正如人类城市中的门牌号。

    有人可能会认为,既然有了门牌号,找到指定地点不是轻而易举吗?朋友们,我也希望如此,但现实往往没有这么简单。

    即使有了 URL,恕我愚笨,我还是无法直接理解它所指向的目的地。因为这是人类的语言,我无法翻译解读。(其实是人类太笨了,记不住 IP 地址,需要用方便记忆的域名来代替)

    对我来说,IP 地址才是唯一的坐标。什么是IP? IP 即 Internet Protocol 的缩写,中文译为“互联网协议”,一个如雷贯耳的名字,互联网的基石之一,一切依赖互联网通信的软件都得遵循这个协议。

    那么,如何才能将域名转换为 IP 地址呢?

    浏览器大叔在平日工作之余,十分细心,他将用户访问过的站点整理了一份“域名-IP 对应清单”。假如是一个已被记录的 IP 地址,那么他会直接告诉我,我可以立即向着目标 IP 地址出发,这就是浏览器缓存的作用。

    假如用户输入的 URL 不在浏览器的记录范围之内,那么操作系统会查找一个名为“ hosts ”的文件。它是一份文本,记录了域名和 IP 地址的映射。如果“ hosts ”能够告诉我目标 IP 地址,那也能节省我不少工夫。这就是系统缓存

    此外,还有路由器缓存,相信不用我多介绍了,即保存在路由器中的域名-IP 映射。

    这些缓存都能有效帮助我以最快的速度找到相应的 IP 地址。但是,互联网世界日新月异,各种资源层出不穷。在很多情况下,用户会想要访问一个全新的,任何缓存都没有记录过的域名。

    为此,人类专门设计了 DNS。在这次任务中,我的第一站,就是赶往 DNS。为了更短的响应时间与更好的用户体验,我快马加鞭。

    2 关于 DNS 劫持的记忆

    DNS 是什么?全称 Domain Name System,是一个将域名和 IP 相互映射的分布式数据库。

    全球有很多家 DNS 服务中心,假如你关心过你的计算机,你会发现,在你的网卡上,有着一项“ DNS 服务器”的配置项,它设定了我将要抵达的目的地。

    一转眼的工夫,我来到了 114.114.114.114DNS 中心。

    这个地方我来过很多次,表面上风平浪静,实则暗流涌动。我小心翼翼地来到办事大厅,不禁想起了我第一次被 DNS 劫持的经历。

    那天,我来到办事窗口,柜员热情地接待了我。

    “先生,请问你想要查询哪个地址?”当时我还是一位新晋的网络请求,涉世尚浅,不知晓一些不可说的条例,于是毫不避讳地回答:“你好,我要去大名鼎鼎的 mail.google.com !”

    柜员的表情一下子凝固了,他上下打量了我一番,然后硬挤出一丝微笑,“好的先生,请稍等。”说完,他便向旁边的同事使了个眼色。我正纳闷呢,突然两边窜出身材魁梧的警卫,架着我强行往一处拖拽。

    我这才意识到大事不妙,“这是怎么回事?!你们凭什么劫持我?”我发疯了一般嘶吼着。

    “你好,根据本 ISP (电信运营商)颁布的条例,世界上不存在你所说的站点,现怀疑你是一个不合规的网络请求,将把你转发至 baidu.com 的 IP 地址。你有权保持沉默!”警卫冷漠地望着我。

    我知道,现在无论如何解释、挣扎都没有用了,只怪自己太年轻。无奈,我只好乖乖就范。

    还好当时正在使用计算机的用户有一些网络知识,当他发现自己输入的是 google,返回的是 baidu 的页面时,并没有怪罪于我,大概是他心中已经猜到了原因。于是他将网卡的 DNS 配置为:8.8.8.8,这是一个国际上“不存在”的公司提供的 DNS 服务中心。

    仅仅这样就能畅通无阻地访问互联网了吗?经历了被DNS 劫持,我依然不敢放松。

    3. 我遇到过 DNS 投毒

    还未休息片刻,浏览器大叔再一次地给我分配了任务:继续尝试请求 mail.google.com 的资源。

    人类出国要坐飞机,要办护照。我们网络请求也是这样,全国只有在几个主要城市才会部署国际出口,所有访问境外资源的网络请求,都得经过这儿接受检查。

    与上次不同,因为这次我要访问的 DNS 服务器位于海外,所以我首先来到了大中华局域网的上海国际出口。

    我一路奔波到上海真的是又累又乏,正当我火急火燎地准备过安检,通道附近有一位穿着制服的小伙迎了上来。

    还没等我开口,他热情地迎了上来:“欧~ 远道而来的朋友,一定是十分疲惫了吧?天气这么热,先喝杯水吧!”我悄悄地打量着他,看他的打扮应该是一位服务人员。

    “国际出口就是不一样啊,服务真到位!”由于确实是太渴了,我放松了警惕。“啊,真清凉,谢...”我一边感叹着,一边接过了小伙递给我的水。

    可当我第二个“谢”字还没说出口,立即感到一阵头晕目眩。

    “不好!遇上了黑客,这是DNS 投毒!”我的视线渐渐模糊,小伙的微笑也渐渐似乎变成了狞笑。我尽力搜索着脑海中和这一切有关的知识,想要知道寻求的办法。

    DNS 投毒,英文叫 DNS cache poisoning,也叫做DNS 污染。从客户端向 DNS 服务器发出查询 IP 的请求,到响应返回到客户端的这段时间里,如果有黑客或者其他一些不可说的设施伪造返回了一个错误的 DNS 应答,那么用户将不能访问到真正的资源。

    想到这里,我已经明显感觉难以控制自己的身体了,眼前一黑,就什么都不知道了。

    3 DNS 正常解析

    以前发生过的险情历历在目,如今想起来,我依旧心有余悸。这次,为了确保万无一失,我打起了十二分精神。

    这次,我已经顺利来到 8.8.8.8 DNS 服务中心。

    “你好亲,有什么可以帮到您的嘛”办事窗口内传来了软妹子的声音。

    “我想查询域名 mail.google.com 的 IP 地址。”我试探性地问,依然不敢松懈。

    “好的呢亲,这边通过树状检索,在顶级域名com下,查询到google目录,在google目录下查询到mail,IP 地址是 xx.xxx.xx.xx 呢。”

    我松了口气,谢天谢地,终于拿到了结果。可我知道作为一次完整的网络请求,这刚刚开始,这才是万里长征第一步,我得赶紧将这个解析结果带回去,等会还得马不停蹄往返三次建立连接。

    ————

    一种写作尝试,欢迎来我的公众号“寒食君”看看

    15 条回复    2019-04-14 13:37:34 +08:00
    nanaw
        1
    nanaw  
       2019-04-14 11:15:03 +08:00   ❤️ 2
    写的很好。但为什么还要给微信添砖加瓦呢。。
    hanshijun
        2
    hanshijun  
    OP
       2019-04-14 11:28:23 +08:00
    @nanaw 因为我不想全盘否定微信,我认为公众号是一个不错的创作平台
    misaka19000
        3
    misaka19000  
       2019-04-14 11:30:47 +08:00 via Android
    在 v 站发这个没太大意义啊,v 站的人应该基本上都懂吧
    hanshijun
        4
    hanshijun  
    OP
       2019-04-14 11:34:34 +08:00
    @misaka19000 随便写写,应该也还有人不懂或者有些模糊(°ー°〃)
    lhx2008
        5
    lhx2008  
       2019-04-14 11:38:54 +08:00 via Android
    写的不错,挺有趣,但是还有很多没讲清楚,
    比如
    第一个,dns 服务器体系没有讲
    第二个,dns 劫持,到底是 114 去根服务器的路上被墙劫持还是 114 根据法律法规主动返回错误结果。
    wdy3334
        6
    wdy3334  
       2019-04-14 11:42:25 +08:00 via Android
    @hanshijun 我就属于有些模糊的
    ThirdFlame
        7
    ThirdFlame  
       2019-04-14 11:44:14 +08:00
    写的挺有趣的。
    xrds7986
        8
    xrds7986  
       2019-04-14 12:18:15 +08:00 via Android
    ie 7 嘗試訪問 up 舉例網址,提示 404,如何解決?
    dream7758522
        9
    dream7758522  
       2019-04-14 12:24:34 +08:00 via Android
    你好,根据本 ISP (电信运营商)颁布的条例,世界上不存在你所说的站点,现怀疑你是一个不合规的网络请求,将把你转发至 baidu.com 的 IP 地址。你有权保持沉默!”警卫冷漠地望着我。
    nanaw
        10
    nanaw  
       2019-04-14 12:38:57 +08:00
    xrr2016
        11
    xrr2016  
       2019-04-14 12:53:09 +08:00 via iPhone
    好文,赞一个
    nosky
        12
    nosky  
       2019-04-14 12:57:05 +08:00 via Android
    可以留下博客地址,有时间就去看看
    OscarUsingChen
        13
    OscarUsingChen  
       2019-04-14 13:03:29 +08:00
    第一节里面的 “ https://www.mail.google.com/” 不是正确的网址
    hanshijun
        14
    hanshijun  
    OP
       2019-04-14 13:37:18 +08:00
    @lhx2008 感谢指出
    hanshijun
        15
    hanshijun  
    OP
       2019-04-14 13:37:34 +08:00
    @nosky https://jihangyu.com/ 有段时间没更新了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2878 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:12 · PVG 22:12 · LAX 06:12 · JFK 09:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.