美文网首页java学习之路
图解HTTP(一)了解Web及网络基础

图解HTTP(一)了解Web及网络基础

作者: 唯有努力不欺人丶 | 来源:发表于2019-10-31 19:21 被阅读0次

    学无止境,非科班出身的我觉得底层原理永远是最深的痛。最近越来越觉得理论知识的重要性(起码面试大多百分之八十都是问理论)。
    之前夏天为了应付面试倒是看了jvm虚拟机,但是为了进度一周看完一本书,吸收情况可想而知。最近工作不算太忙,也算是给自己定了个目标,想从两个方向继续学习学习。
    目前的计划一方面http,另一方面并发编程。
    所以就有了这个HTTP系列。
    另外要解释声明下,我个人很喜欢纸质书本,但是贵是真的,笨重又不方便搬家又是真的,甚至没地方放也是真的,所以这一系列的学习来源于QQ中技术交流群中的资料,所以这里也为群打个广告,java技术交流群招人(打算每一篇文章都打这个广告,反正很感谢群友)。


    java交流群
    群文件,很感谢上传的人

    接下来开始学习《图解HTTP》之路

    HTTP 的诞生

    最初设想的基本理念:借助多文档之间相互关联的超文本,连成可相互参阅的WWW(万维网)。
    其实我觉得就是想要不同电脑之间数据的传输与共享。
    注:WWW就是World Wide Web,万维网的意思。不过我可能作为传统的中国人,觉得万维网比WWW更好理解,所以以下都用万维网来表示。等同于原书中的WWW。

    现在已有的三项万维网构建技术:
    • 作为页面的文本标记语言HTML
    • 作为文档传递协议的HTTP
    • 指定文档所在位置的URL
    Web成长史:

    这个其实感觉没啥大用,但是我简单的总结一下书中对这块的介绍:

    • 1990年,世上第一个web服务器诞生
    • 1994年12月,网景通信公司和微软公司发布浏览器
    • 1995年开始,两家公司开始自己扩展html,而且有的文档都没有,让前端很烦
    • 2000年前后,网景通信公司黄了,但是火狐诞生了,继续浏览器大战,同时谷歌,op也都出现了。
    驻足不前的HTTP

    这个其实说的挺乱,我总结了一下才大概明白。之前说的web主要由三点技术保障的:HTML,HTTP,URL
    刚刚说的成长史主要是HTML的成长过程。不是HTTP的。
    继续说HTTP的历史:

    • 1990年问世,但是当时没有作为正式的标准被建立,所以被称为HTTP/0.9(就是第一版之前嘛)
    • 1995年五月,HTTP/1.0被公布,现在也在广泛使用
    • 1997年1月,HTTP/1.1被公布,是现在的主流HTTP协议版本。

    HTTP的出现主要是为了解决文本传输问题,其实协议本身非常简单。现在HTTP协议已经超出了Web框架的局限,被运用到各种场景里。

    网络基础TCP/IP

    通常使用网络(包括互联网)实在TCP/IP协议族的基础上操作的,而HTTP属于TCP/IP协议族内部的一个子集。

    TCP/IP 协议族

    计算机与网络设备要相互通信,双方必须要有相同的方法。
    其实这个很好理解,哪怕两个人呢,打招呼说你好,另一个人回你好。这就是一次交互。
    但是如果没约定好,一个人说你好,另一个人汪汪汪,那不就是交互出了岔子么?谁知道汪汪汪是啥意思啊?
    我们把这种事先的约定和规则称之为协议。包括但不限于如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信。


    TCP/IP协议族的成员

    有人说TCP/IP协议是指TCP和IP这两种协议,但是更多人认为TCP/IP是在ip协议通信过程中用到的协议的总称。

    TCP/IP 的分层管理

    其实分层是一个真的很熟悉的词,MVC三层思想,把一个应用分三层,使结构更清晰明了,而且也使修改的代价变小。
    同理,TCP/IP的分层管理也使如此,使我们理解起来更容易理解,同时当某个设计需要改变,只要改变那层就好,也使得修改变得更加容易。
    (以上纯属个人瞎扯,接下来按照书中的内容讲)
    TCP/IP协议分四层,分别是:

    • 应用层
    • 传输层
    • 网络层
    • 数据链路层

    把 TCP/IP 层次化是有好处的。比如,如果互联网只由一个协议统
    筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分
    层之后只需把变动的层替换掉即可。把各层之间的接口部分规划好之
    后,每个层次内部的设计就能够自由改动了。
    值得一提的是,层次化之后,设计也变得相对简单了。处于应用层上
    的应用可以只考虑分派给自己的任务,而不需要弄清对方在地球上哪
    个地方、对方的传输路线是怎样的、是否能确保传输送达等问题。
    ——《图解HTTP》

    • 应用层:决定了向用户提供应用服务时通信的活动。
      TCP/IP族中,FTP(File
      Transfer Protocol,文件传输协议)和DNS(Domain Name System,域
      名系统)还有HTTP都属于这一层。
    • 传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
      TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议)都处于这一层。
    • 网络层:用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位,该层规定了通过怎样的路径到达对方计算机,并将数据包传送给对方。
      与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
      这个也好理解,你与B,C是朋友,B,C都认识F,D,C,D都认识E。你想认识E的话多种途径可以认识,BF可以认识E,CF,CD,BD也可以。这个网络层就是选择其中一种路线。
    • 链路层(又称为数据链路层,网络接口层):这个就到了硬件的范围了,例如网卡啊,光纤啊之类的,就不多说了,毕竟我完全不懂(学程序不会修硬件很正常的哇)

    TCP/IP通信传输流

    来自《图解HTTP》
    利用TCP/IP协议通讯时,会通过分层 顺序与对方进行通信。
    发送端从应用层往下走,接收端从下往上最终走到应用层。
    注:上图只是一个例子,用HTTP/TCP/IP来举例
    1. 客户端在应用层用HTTP发送了想看某个web页面的请求。
    2. 传输层为了传输方便把请求分割并打上标记序号及端口号转发给网络层。
    3. 网络层通过IP协议找到服务器的电脑地址,并转发给数据链路层。
    4. 服务器的数据链路层接收到消息一层一层网上最后传输到应用层。才算真正接收到客户端的HTTP请求。


      来自《图解HTTP》

    其实用一个现实点的情景来理解。比如你父母打算给你邮寄点土特产,是不是要先准备好特产,然后洗涮就不说了,起码要装个箱子或者袋子,送去快递点,大多数还得再给你包个快递专用的箱子或者袋子贴上快递单,然后才开始按照收货地址开始运输,最后到了你那边,由快递员送到你手上,你要拆开第一次的贴着快递面单的袋子或者箱子,然后拆开你父母包的箱子袋子,最后才拿到这个土特产。
    你看其实网络传输是不是也就是这么一回事?

    • 应用层就是你要邮寄的东西本身,例如瓜子。
    • 传输层就是你得先装好了才能拿到快递点,不然总不能一粒一粒拿着吧?所以为了安全,不会中途掉瓜子,所以这个包装必不可少,少了就不安全了。
    • 网络层就是快递那层包装和面单,寄货人收货人地址得写清楚了,不然谁知道你要邮寄到哪里去?
    • 最后的链路层就是快递运输的车。

    与 HTTP 关系密切的协议 : IP、TCP 和 DNS

    负责传输的IP协议

    IP(Internet Protocol)翻译过来是因特网协议,通过这个名字就能看出有多重要,几乎所有使用网络的系统都会用到 IP 协议。
    ip协议和ip地址是不一样的。
    IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address)。
    IP地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC地址基本上不会更改。
    IP间的通信依赖的是MAC 地址而不是ip地址。因为在网络上,通信双方在同一局域网上的情况很不常见。通常是经过多台计算机和网络设备中转才能连接到对方。
    没有人能够全面掌握互联网中的传输状况,就跟快递一样,你只知道谁从你手里接收了快递,甚至送达的时候是谁送的快递,但是中间经历了什么,经历了谁都是不得而知的,在达到通信目标前的中转操作,称为路由选择(routing)

    来自《图解HTTP》
    确保可靠性的TCP协议

    TCP位于传输层,提供可靠的字节流服务。
    所谓的字节流服务就是把大数据分解小数据,省的在传输过程中发生数据丢失之类的。
    总的来说TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够
    确认数据最终是否送达到对方。
    为了确认数据的送达,TCP采用三次握手的策略。(之前写了一篇TCP三次握手的帖子,这里直接附上链接,感兴趣的朋友可以去看看,我觉得写得还挺清楚明了的。TCP协议,HTTP协议,以及TCP工作方式和HTTP请求完整过程
    除了上述三次握手,TCP 协议还有其他各种手段来保证通信的可靠性。

    负责域名解析的 DNS 服务

    DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。
    计算机既然可以被赋予IP地址,自然也可以被赋予主机名和域名。
    而IP地址一般是一长串数字,不好记而且容易混,但是域名就好多了。www.baidu.com就是百度,www.jianshu.com/p/25c4340bbde0就是我刚刚那篇文章的域名访问方法,是不是比一串ip地址要好记得多?
    但是计算机其实是不认识域名的,所以DNS 服务应运而生。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。

    来自《图解HTTP》DNS工作流程

    各种协议与 HTTP 协议的关系

    这个作者用了一张图来表示各个协议的协作。我感觉真的挺不错的,浅显易懂还有趣。
    HTTP.DNS.TCP,IP.协同工作,完成一次客户端向服务端发送请求的过程。如果服务端想回应客户端,其实又是一次新的循环。
    说一点结合现实的,我们常常联调的时候是直接ip+端口的模式,其实就没有经过dns这一协议。


    来自《图解HTTP》

    URL和URI

    其实这两个我们用URL的时候比较多。
    URL:统一资源定位符
    URI:统一资源标识符
    URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位置)。可见 URL 是 URI 的子集。关于这句话其实这个我之前查了好几份资料,最后看了百度百科勉强的理解了。
    URL就是一种特殊的URI。因为这个概念抽象而且不是很明确,所以我这里直接上百度百科的解释图。


    URL和URI

    然后图解HTTP第一章了解Web及网络基础就到这结束了,感觉技术类书有一个特点,一本贼厚的书就几章,然后每一张都贼长内容贼多。然后我看书一章必须看完不然看到一半很难受。
    哎,反正就这样吧,全文手打不易,如果你觉得对你有帮助请点个喜欢,点个关注啥的!!也祝大家工作顺顺利利!!

    相关文章

      网友评论

        本文标题:图解HTTP(一)了解Web及网络基础

        本文链接:https://www.haomeiwen.com/subject/saetbctx.html