zoukankan      html  css  js  c++  java
  • 【HTTP图解】1-了解Web及网络图解

    TOC

    了解HTTP协议访问Web

    image-20200722084431699

    Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协议是指规则的约定。可以说,Web是建立在HTTP协议上通信的。

    HTTP的诞生

    诞生

    • 诞生原因:共享知识
    • 基本理念:借助超文本,连成WWW(World Wide Web,万维网)
    • 构建技术:HTML、HTTP、URL(Uniform Resource Locator,统一资源定位符)

    成长

    • 1990.11——CERN成功研发了世界上第一台Web服务器和Web浏览器
    • 1994.12——网景发布Netscape Navigator 1.0
    • 1995——微软发布Internet Explorer 1.0 和2.0
    • 紧随其后,Web服务器标准之一的Apache以0.2的姿态出现,HTML也发布了2.0版本
    • 2004——Mozilla基金会发布了Firefox浏览器

    HTTP

    • 0.9——1990年问世,并没有称为正式的标准被建立,含有1.0之前版本的意思
    • 1.0——1996年5月,初期标准,仍在使用
    • 1.1——1997年1月,目前主流
    • 2.0——2015年5月以RFC 7540正式发表,2015年底多数主流浏览器支持了该协议。

    作为Web文档传输协议的HTTP,版本更新的次数非常少。

    网络基础TCP/IP

    为了理解HTTP,需要先了解TCP/IP协议族。

    TCP/IP协议族

    image-20200722091711979

    计算机与网络设备要相互通信,双方就必须基于相同的方法。这种通信规则称为协议(protocol)。

    协议中存在各种各样的内容,从电缆的规格到IP地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及Web页面显示需要处理的步骤,等等。

    一般来说,TCP/IP是协议族的统称。

    TCP/IP的分层管理

    • 应用层:决定了向用户提供应用服务时通信的活动,FTP、DNS、HTTP等
    • 传输层:对上层应用层提供数据传输,TCP、UDP
    • 网络层:网络层用来处理在网络上流动的数据包(数据包是网络传输的最小数据单位)。该层规定了通过怎样的路径到达对方计算机,并把数据包传送到对方。作用就是在众多的选项内选择一条传输路线。
    • 数据链路层(链路层、网络接口层):用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC、及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。

    分层的好处:设计好各层之间的接口,每个层次内部的设计就能够自由改动了,便于维护。

    分成七层还是四层还是五层?

    参看:https://zhuanlan.zhihu.com/p/73807507

    TCP/IP通信传输流

    image-20200722094047244

    image-20200722095658265

    用HTTP举例来说明,首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。

    接着,为了传输方便,在传输层(TCP协议)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记符号及端口号(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。

    在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。

    在接收的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才算真正接收到客户端发送过来的HTTP请求。

    发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种把数据信息包装起来的做法称为封装(encapsulate)。

    与HTTP关系密切的协议

    IP协议

    Internet Protocol 网际协议位于网络层。几乎所有使用网络的系统都会使用IP协议,非常重要。

    IP的作用:把各种数据包传送给对方。确保确实传送到对方那里,则需要满足各类条件,其中两个重要的条件是IP地址MAC地址(Media Access Control Address)。

    IP地址指明了节点被分配到的地址,MAC地址指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可换,但MAC地址基本不会更改。

    IP间的通信依赖MAC地址,在网络上,通信的双方通常是经过多台计算机和网络设备中专才能连接对方。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时会采用ARP协议(Address Resolution Protocol)。ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。

    image-20200722101637938

    TCP协议

    Transmission Control Protocol 位于传输层,提供可靠字节流服务

    • 字节流服务:为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。
    • 可靠的传输服务:能够把数据准确可靠地传给对方。

    为了准确无误地将数据传送到目标处,TCP协议采用了三次握手(three-way handshaking)策略。握手过程中使用了TCP的标志——SYN(synchronize)和ACK(acknowledgement)。

    image-20200722102256617

    wrieshark抓包演示

    为什么采用三次握手?而不是两次握手或者四次握手?

    TCP既要保证数据可靠性传输,又要提高传输的效率,而三次恰恰可以满足以上两方面的需求。

    比如说A和B进行TCP连接,保证建立连接成功的条件是:

    • A 知道自己能够给 B 发数据
    • B 知道自己能够给 A 发数据

    A 怎么知道自己成功将数据发送到 B 了呢?A 通过比较A.Seq是否和接收到的B.Ack相差 1.

    两次握手,服务端不能确定服务端是否能向客户端发送数据

    四次握手,能满足需求,但是比三次握手浪费带宽。

    负责域名解析的DNS服务

    DNS(Domain Name System)位于应用层,它提供域名到IP地址之间的解析服务。

    image-20200722123736217

    各种协议与HTTP协议的关系

    TIM截图20200722123842

    URI和URL

    URI: Uniform Resource Identifier 统一资源标识符

    URL: Uniform Resource Locator 统一资源定位符

    • Uniform:规定统一的格式可方便处理多种不同类型资源,而不用根据上下文环境来识别资源指定的访问方式(用人话说就是:不管什么类型的资源,不管在哪里,通过URI我就能确定资源的位置,并且访问它)
    • Resource:资源的定义是“可标识的任何东西”
    • Identifier:标识符

    综上所述,URI就是某种协议方案(协议类型名称)表示的资源的定位标识符。

    采用HTTP协议时,协议方案就是http,除此之外,协议方案还有ftp、mailto、telnet、file等。

    怎么分辨URI和URL?

    URI侧重于是什么,URL侧重于怎么访问

    通过一个例子解释:

    https://www.cnblogs.com/realzhaijiayu/p/13359997.html

    这是一个URL,同时也是一个URI。

    为什么是一个URL?因为可以通过 https 协议访问到该 html 资源

    为什么是一个URI?因为上面这个字符串表示它博客园里面的一个 html 资源。

    如果现在将https://去掉,这就不是一个URL了,因为没有指明使用的协议,而它还是一个URI,因为它还是一个 html 资源了。

    一般情况下,可以理解为所有的URL都是URI,但并不是所有的URI都是URL。

    注意:如果将https://去掉,在浏览器中仍然可以访问,这是因为浏览器帮助我们自动补全了前面的协议。

    更多资料:https://stackoverflow.com/questions/176264/what-is-the-difference-between-a-uri-a-url-and-a-urn

    URI格式

    绝对URI:含有所有必要的信息

    相对URI:只提供相对路径

    image-20200722132702868

    • 登录信息:验证身份,可选
    • 服务器地址:待访问的服务器地址
    • 服务器端口号:SOCKS默认1080、HTTP默认80、HTTPS默认443(访问https://www.baidu.com:443会自动跳转到该网站,去掉端口号的显示)
    • 带层次的文件路径:与 UNIX 系统的文件目录结构相似
    • 查询字符串:可选
    • 片段标识符:可选
  • 相关阅读:
    1.Apache与Tomcat
    jeeplus 多选框
    GIT 回滚
    jsp 中data 转换 字符串
    Pattern和Matcher中表达式
    web.xml 详细介绍
    $.ajax()方法详解
    My 2016
    如何做好一个保安队长。
    集合之WeakHashMap
  • 原文地址:https://www.cnblogs.com/realzhaijiayu/p/13360175.html
Copyright © 2011-2022 走看看