Web访问流程

  • 1、输入地址
  • 2、浏览器查找域名的 IP 地址
  • 3、浏览器向 web 服务器发送一个 HTTP 请求
  • 4、服务器的永久重定向响应
  • 5、浏览器跟踪重定向地址
  • 6、服务器处理请求
  • 7、服务器返回一个 HTTP 响应
  • 8、浏览器显示 HTML
  • 9、浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)

TCP/IP协议

  • 四个概念层

    • 应用层:为用户提供所需要的各种服务;应用层协议包括HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)、SSH(安全远程登陆)、DNS(域名解析)以及许多其他协议。
    • 传输层:为应用层实体提供端到端的通信功能,保证了数据包的传输顺序和数据的的完整性;TCP传输控制协议和UDP用户数据报协议。
      • TCP协议是一个面向连接的、可靠的传输协议,它提供一种可靠的字节流,能保证数据完整、无损并且按顺序到达。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外,TCP试图将数据按照规定的顺序发送。
      • UDP协议是一个面向无连接的数据报协议,是一个**“尽力传递”和“不可靠”**协议,不会对数据包是否已经到达目的地进行检查,并且不保证数据包按顺序到达。
      • 总体来说,TCP协议传输效率低,但可靠性强;UDP协议传输效率高,但可靠性略低,适用于传输可靠性要求不高、体量小的数据(比如QQ聊天数据)。
    • 网络层:主要解决主机到主机之间的通信问题;网络层协议的代表包括:ICMP、IP、IGMP等。
    • 链路层:其主要协议有ARP、RARP等。
  • IP协议

    • 互联网上每个计算机的唯一标识就是IP地址;
    • 分组传输:IP协议将数据分成若干个数据包进行传输,每个数据包包含了目标地址等信息。
    • 不可靠传输:IP协议不保证数据包的可靠传输,数据包在传输过程中可能会丢失、重复或乱序。
    • 简单路由:IP协议使用简单的路由算法,每个路由器只根据目标地址来选择下一个路由器,而不考虑其他因素。
    • 网络层协议:IP协议位于网络层,它与上层协议(如TCP、UDP)和下层协议(如数据链路层)进行交互。
  • IPV4

    • 共四组,每组8个bit;如192.168.1.10
    • 共$2^{32}$ 个IP地址,目前已经分配完了;
  • IPV6

    • 共八组,每组16个bit
    • 共$2^{128}$个IP地址;
  • 特殊IP

    • 127.0.0.1也称localhost:,本地IP,永远只会寻找本地IP;
  • TCP协议

    • 建立在IP协议之上,负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。

    • TCP三次握手

      • 客户端向服务器发送SYN(同步)数据包,表示客户端想要建立连接,并告诉服务器自己的初始序号(seq=x)。

      • 服务器接收到客户端的SYN数据包后,向客户端发送SYN+ACK(同步和确认)数据包,表示服务器已经收到了客户端的请求,并告诉客户端自己的初始序号(seq=y)和确认序号(ack=x+1)。

      • 客户端接收到服务器的SYN+ACK数据包后,向服务器发送ACK(确认)数据包,告诉服务器已经收到了服务器的确认,并确认自己的序列号(seq=x+1),服务器的初始序号(ack = y+1)。此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态 触发三次握手。

      • TCP三次握手的目的是为了确保客户端和服务器之间的通信能够正常进行,防止因为网络延迟等因素导致的连接失败。同时,它也可以防止网络中的恶意攻击,比如TCP SYN攻击等。

    • 断开一个 TCP 连接则需要**“四次挥手**”,缺一不可 :

      1. 第一次挥手 :客户端发送一个 FIN(SEQ=X) 标志的数据包->服务端,用来关闭客户端到服务器的数据传送。然后,客户端进入 FIN-WAIT-1 状态。
      2. 第二次挥手 :服务器收到这个 FIN(SEQ=X) 标志的数据包,它发送一个 ACK (SEQ=X+1)标志的数据包->客户端 。然后,此时服务端进入CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态。
      3. 第三次挥手 :服务端关闭与客户端的连接并发送一个 FIN (SEQ=y)标志的数据包->客户端请求关闭连接,然后,服务端进入LAST-ACK状态。
      4. 第四次挥手 :客户端发送 ACK (SEQ=y+1)标志的数据包->服务端并且进入TIME-WAIT状态,服务端在收到 ACK (SEQ=y+1)标志的数据包后进入 CLOSE 状态。此时,如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后,客户端也可以关闭连接了。
  • socket

    • Socket通常包括以下几个要素:

      • IP地址:用于标识网络中的计算机。
      • 端口号:用于标识计算机上的进程。
      • 协议类型:用于标识通信使用的协议类型,比如TCP、UDP等。
    • Socket通信的流程通常包括以下几个步骤:

      • 服务器程序创建一个Socket,并绑定到一个IP地址和端口号。
      • 客户端程序创建一个Socket,并连接到服务器的IP地址和端口号。
      • 服务器程序接收连接请求,并创建一个新的Socket来处理客户端请求。
      • 客户端程序发送数据到服务器,服务器程序接收数据并处理。
      • 服务器程序发送数据到客户端,客户端程序接收数据并处理。
      • 客户端和服务器程序关闭Socket。

端口

  • 应用程序的唯一标识;
  • 由两个字节表示的整数,范围0~65535;
  • 一个端口只能被一个应用程序使用;

HTTP

  • HTTP(Hypertext Transfer Protocol)(超文本传输协议)是一种应用层协议,用于在Web浏览器和Web服务器之间传输数据。

  • HTTP协议的基本工作流程如下:

    1. 客户端向服务器发送HTTP请求,请求可以是GET、POST、PUT、DELETE等方法,其中GET方法用于获取资源,POST方法用于提交数据,PUT方法用于修改资源,DELETE方法用于删除资源。
    2. 服务器接收到请求后,会根据请求的方法和URI(Uniform Resource Identifier)来确定要响应的资源,并返回HTTP响应消息。响应消息包括状态行、消息头和消息体。
    3. 客户端接收到响应消息后,会解析消息头和消息体,并根据状态码来判断请求是否成功。
  • 报文

    • 报文结构

      • 起始行(请求行,响应行)
      • 首部(key-value的形式)
      • 主体
    • 请求报文

    1
    2
    3
    4
    5
    6
    7
    8
    GET /v3/api-docs HTTP/1.1
    Host: localhost:8080
    Accept: application/json,*/*

    //首部与主体之间有空行
    ... // 请求主体:客户端发给服务端的数据

    // 以HTTP协议的1.1版本请求访问localhost:8080服务器上的/v3/api-docs资源
    • 响应报文
    1
    2
    3
    4
    5
    6
    7
    HTTP/1.1 200 OK
    Date:Sun,20 Dec 2020 06:33:44 GMT
    Content-Type:application/json

    ... //响应主体:服务端返回给客户端的内容

    //
  • 状态码

    • 1xx:信息状态码
    • 2xx:成功状态码
    • 3xx:重定向状态码
    • 4xx:客户端错误状态码
    • 5xx:服务端错误状态码
  • HTTP方法的安全性的幂等性

    • 安全性:不会对服务端造成影响,即无论怎么请求,服务端都不会因此而发生变化;简而言之就是只读
    • 幂等性:多次请求对服务器的影响与第一次一样;
    HTTP方法 接口说明 安全性 幂等性
    GET 获取资源(Read) 安全 幂等
    POST 创建资源(Create) 不安全 非幂等
    PUT 更新资源(Update) 不安全 幂等
    DELETE 删除资源(Delete) 不安全 幂等

HTTPS

  • HTTPS(HTTP安全)是一种用于Web服务器和客户端(如Web浏览器)通信的协议,它在HTTP协议的基础上添加了加密和身份验证功能,从而提供更安全的数据通信。HTTPS使用TLS(传输层安全)协议来加密数据传输,从而防止中间人攻击和窃听。

常用CMD命令

  • ipconfig:查看本机IP;
  • ping:通常用于测试网络连接是否正常,以及确定网络延迟和数据包丢失率等问题。它也可以用于诊断网络故障,并提供有关网络性能的有用信息。

RESTful

  • REST(Representational State Transfer):资源以某种表现形式在HTTP方法的作用下发生变化;

  • RESTful实践

    • 获取数据

      1
      GET "http://localhost:8080/rest/user/1" 

      定位id为1的用户(资源),用GET方法获取,查询资源;

    • 新增数据

      1
      2
      3
      4
      5
      6
      7
      POST "http://localhost:8080/rest/user"
      Content-Type:application/json
      {
      "name":"ming",
      "age":3,
      "email":"ming@test.com"
      }

      POST方法的参数通常会被放在请求体中,以Content-Type中的格式(JSON)提交到服务端;

    • 更新数据

      1
      2
      3
      4
      5
      6
      7
      8
      PUT "http://localhost:8080/rest/user"
      Content-Type:application/json
      {
      "id":1,
      "name":"ming",
      "age":21,
      "email":"ming@test.com"
      }

      与POST的区别在于请求参数还要指定一个唯一字段(如id);

    • 删除数据

      1
      DELETE "http://localhost:8080/rest/user/1" 
  • RESTful风格由URI定位资源

    • URI:Uniform Resource Identifier
    • URL:Uniform Resource Locator
    • URN:Uniform Resource Name

    所有的URLURN都可以称为URI

    URL可以定位资源,而URN不行;