如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.v2ex.com/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.v2ex.com/solana
hanshijun
V2EX  ›  推广

一个网络请求的冒险之旅

  •  1
     
  •   hanshijun · Apr 14, 2019 · 3426 views
    This topic created in 2682 days ago, the information mentioned may be changed or developed.

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

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

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

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

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