计算机网络知识点

1. URI 和 URL

统一资源定位符(Uniform Resource Locator,缩写:URL),是对资源的引用和访问该资源的方法。俗称网址,就是浏览器地址栏里面的内容。

URL 语法为:protocol://userInfo@host:port/path?query#fragment

  • 协议部分:file,ftp,http,https,magnet,telnet
  • 用户信息:服务器登录信息
  • 用户信息,主机,端口在一起构成权威机构
  • 查询字符串向服务器提供附加参数。一般只在 http URL 中使用,包含表单数据,作为输入提供给在这个服务器上运行的程序。
  • 片段:指向远程资源的某个特定部分。片段标识符目标在 HTML 文档中用 Id 属性创建。

URI 与 URL 类似,统一资源标志符(Uniform Resource Identifier,缩写:URI),提供了一种识别资源的方法。但与 URL 不同的是,URI 不提供定位所述资源的方法。

URI 的最常见的形式是统一资源定位符(URL),经常指定为非正式的网址。由此,可以看出 URI 是 URL 的超集,并且每个 URL 本质上也是一个 URI。

URI 是 URL 的父级,URL 是 URI 的子级。可能有人就奇怪了,明明是 URL 包含了 URI 为啥 URI 反而是父级?想要理解这个概念,最好的说明就是 Java 的继承关系。URL 继承了 URI 。因为 URL 继承了所有 URI 的内容,所以它比 URI 更加详细,但是 URI 是它的父级。

2. 网络协议

网络协议就是计算机之间通信过程中要遵循的一些约定好的规则。

常见网络协议:

名称 作用 默认端口
TCP(Transmission Control Protocol,传输控制协议) 一种可靠的面向连接的传送服务。
UDP (User Datagram Protocol,用户数据报协议) 提供了无连接的数据包服务,该服务提供了不可靠的、"尽力而为"的初步传送。
IP (Internet Protocol,Internet 协议) 一个无连接的协议,主要负责在主机之间寻址,并为数据包设定路由。
HTTP(HyperText Transfer Protocol,超文本传输协议) 主要的 web 浏览器和 web 服务器支持使用。 80
HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer,安全超文本传输协议) 在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性 433
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议) 是为网络系统间的电子邮件交换而设计的。 25
DNS(Domain Name Service, 域名解析服务) 作用是将域名转换为 IP 地址,或将 IP 地址转换为域名,用于解析完全合格域名。 53

3. 网络分层

互联网协议按照功能不同分为 OSI 七层或 TCP/IP 五层或 TCP/IP 四层。

  • 应用层:应用层的任务是通过应用进程之间的交互来完成特定的网络作用,常见的应用层协议有域名系统 DNS, HTTP 协议等。
  • 表示层:表示层的主要作用是数据的表示、安全、压缩。可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
  • 会话层:会话层的主要作用是建立通信链接,保持会话过程通信链接的畅通,同步两个节点之间的对话,决定通信是否被中断以及通信中断时决定从何处重新发送。
  • 传输层:传输层的主要作用是负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议 TCP 和用户数据协议 UDP。
  • 网络层:网络层的主要作用是选择合适的网间路由和交换结点,确保数据及时送达。常见的协议有 IP 协议。
  • 数据链路层:数据链路层的作用是在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。 常见的协议有 SDLC、HDLC、PPP 等。
  • 物理层:物理层的主要作用是实现相邻计算机结点之间比特流的透明传输,并尽量屏蔽掉具体传输介质和物理设备的差异。

4. DNS

DNS(DOMAIN NAME SYSTEM) 是一个域名系统,是万维网上作为域名和 IP 地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。

4.1 DNS 作用

通过主机名,最终得到该主机名对应的 IP 地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法,域名是互联网上的身份标识,是不可重复的唯一标识资源。

4.2 DNS 解析的过程

第一步:客户机提出域名解析请求,并将该请求发送给本地域名服务器。

第二步:当本地域名服务器收到请求后,就先查询本地缓存,如果有该纪录项,则本地域名服务器就直接把查询结果返回。

第三步:如果本地缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根子域) 主域名服务器地址。

第四步:本地服务器再向返回域名服务器发送请求,然后接受请求服务器查询自己缓存,如果没有该纪录,则返回相关下级域名服务器地址。

第五步:重复第四步,直到找到正确纪录。

第六步:本地域名服务器把返回结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。

5. TCP 三次握手

三次握手的本质就是确定发送端和接收端具备收发信息的能力,在能流畅描述三次握手的流程及其中的字段含义作用的同时还需要记住每次握手时接收端和发送端的状态。

先看一张很经典的图,发送端有 CLOSED、SYN-SENT、ESTABLISHED 三种状态,接收端有 CLOSED、LISTEN、SYN-RCVD、ESTABLISHED 四种状态。

第一次握手:客户端向服务端发起建立连接请求,客户端会随机生成一个起始序列号 x,客户端向服务端发送的字段中包含标志位 SYN=1,序列号 seq=100。第一次握手前客户端的状态为 CLOSE,第一次握手后客户端的状态为 SYN-SENT。此时服务端的状态为 LISTEN​ 第二次握手:服务端在收到客户端发来的报文后,会随机生成一个服务端的起始序列号 y,然后给客户端回复一段报文,其中包括标志位 SYN=1,ACK=1,序列号 seq=y,确认号 ack=x+1。第二次握手前服务端的状态为 LISTEN,第二次握手后服务端的状态为 SYN-RCVD,此时客户端的状态为 SYN-SENT。(其中 SYN=1 表示要和客户端建立一个连接,ACK=1 表示确认序号有效)​ 第三次握手:客户端收到服务端发来的报文后,会再向服务端发送报文,其中包含标志位 ACK=1,序列号 seq=x+1,确认号 ack=y+1。第三次握手前客户端的状态为 SYN-SENT,第三次握手后客户端和服务端的状态都为 ESTABLISHED。

6. TCP 四次挥手

和三次握手一样,先看一张非常经典的图,客户端在四次挥手过程中有 ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、TIME-WAIT、CLOSED 等五个状态,服务端有 ESTABLISHED、CLOSE-WAIT、LAST-ACK、CLOSED 等四种状态。

第一次挥手:客户端向服务端发送的数据完成后,向服务端发起释放连接报文,报文包含标志位 FIN=1,序列号 seq=u。此时客户端只能接收数据,不能向服务端发送数据。

第二次挥手:服务端收到客户端的释放连接报文后,向客户端发送确认报文,包含标志位 ACK=1,序列号 seq=V,确认号 ack=u+1。此时客户端到服务端的连接已经释放掉,客户端不能像服务端发送数据,服务端也不能向客户端发送数据。但服务端到客户端的单向连接还能正常传输数据。

第三次挥手:服务端发送完数据后向客户端发出连接释放报文,报文包含标志位 FIN=1,标志位 ACK=1,序列号 seq=w,确认号 ack=u+1。

第四次挥手:客户端收到服务端发送的释放连接请求,向服务端发送确认报文,包含标志位 ACK=1,序列号 seq=u+1,确认号 ack=w+1。

7. HTTP 协议

超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于 TCP/IP 协议传输数据,互联网上应用最为广泛的一种网络协议,所有的 WWW 文件都必须遵守这个标准。设计 HTTP 的初衷是为了提供一种发布和接收 HTML 页面的方法。

发展历史:

版本 时间 内容 发展现状
HTTP/0.9 1991 年 不涉及数据包传输,规定客户端和服务器之间通信格式,只能 GET 请求 没有作为正式的标准
HTTP/1.0 1996 年 传输内容格式不限制,增加 PUT、PATCH、HEAD、 OPTIONS、DELETE 命令 正式作为标准
HTTP/1.1 1997 年 持久连接(长连接)、节约带宽、HOST 域、管道机制、分块传输编码 2015 年前使用最广泛
HTTP/2 2015 年 多路复用、服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场

7.1 HTTP 状态码

HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器的处理是否正常、通知出现的错误等工作。

状态码分类:

类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

常见状态码:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它 URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

7.2 HTTP 请求方式

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

方法 描述
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立或对已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

8. HTTPS 协议

HTTPS 是身披 SSL 外壳的 HTTP。

HTTPS 是一种通过计算机网络进行安全通信的传输协议,经由 HTTP 进行通信,利用 SSL/TLS 建立全信道,加密数据包。HTTPS 使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

SSL 协议 (Secure Socket Layer) 是一种安全传输协议,SSL 是 SecureSocketLayer 的缩写,即安全套接层协议。

TLS(Transport Layer Security) 传输层安全是 IETF 在 SSL3.0 基础上设计的协议,实际上相当于 SSL 的后续版本。

9. 对称加密和非对称加密

9.1 对称加密

对称加密:也称为对称密码,是指在加密和解密时使用同一密钥得加密方式。

常用对称加密算法:

  • DES 算法全称 Data Encryption Standard,是一种使用密钥加密的块算法。现在认为是一种不安全的加密算法,因为现在已经有用穷举法攻破 DES 密码的报道了。
  • 3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
  • AES 加密算法采用分组密码体制,每个分组数据的长度为 128 位 16 个字节,密钥长度可以是 128 位 16 个字节、192 位或 256 位,一共有四种加密模式。

9.2 非对称加密

非对称加密之所以不对称,指的就是加密用一个密钥,而解密的时候用的是另外一个密钥。

常用非对称加密算法:

  • RSA 是目前应用最广泛的数字加密和签名技术,比如国内的支付宝就是通过 RSA 算法来进行签名验证。它的安全程度取决于秘钥的长度,目前主流可选秘钥长度为 1024 位、2048 位、4096 位等,理论上秘钥越长越难于破解。
  • DSA,数字签名算法,和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和 RSA 相当,但其性能要比 RSA 快。
  • ECDSA,椭圆曲线签名算法,是 ECC 和 DSA 的结合,相比于 RSA 算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障,据称 256 位的 ECC 秘钥的安全性等同于 3072 位的 RSA 秘钥,和普通 DSA 相比,ECDSA 在计算秘钥的过程中,部分因子使用了椭圆曲线算法。

HTTP 协议本身是无状态的。什么是无状态呢?即服务器无法判断用户身份。

Cookie 实际上是一小段的文本信息(key-value 格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用 response 向客户端浏览器颁发一个 Cookie。客户端浏览器会把 Cookie 保存起来。

当浏览器再请求该网站时,浏览器把请求的网址连同该 Cookie 一同提交给服务器。服务器检查该 Cookie,以此来辨认用户状态。

打个比方,我们去银行办理储蓄业务,第一次给你办了张银行卡,里面存放了身份证、密码、手机等个人信息。当你下次再来这个银行时,银行机器能识别你的卡,从而能够直接办理业务。

11. Session

在 WEB 开发中,服务器可以为每个用户浏览器创建一个会话对象(session 对象)。

注意:一个浏览器独占一个 session 对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的 session 中,当用户使用浏览器访问其它程序时,其它程序可以从用户的 session 中取出该用户的数据,为用户服务。

12. Token

Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 便将此 Token 返回给客户端,以后客户端只需带上这个 Token 前来请求数据即可,无需再次带上用户名和密码。

基于 Token 的身份验证是无状态的,我们不用将用户信息存在服务器或 Session 中。这种概念解决了在服务端存储信息时的许多问题。没有 session 信息意味着你的程序可以根据需要去增减机器,而不用去担心用户是否登录和已经登录到了哪里。

13. Ajax

Asynchronous JavaScript And XML(异步 JavaScript 及 XML)实现异步请求的技术。

什么是同步请求?

场景:页面上有一个 a 标签,用户点击 a 标签,浏览器发出一个请求,然后服务器给出一个响应。(请求,其实是用户的操作,触发的)

什么是异步请求?

向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果我们可以再来处理这个事。

14. JSON

JSON(JavaScript Object Notation) 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。

JSON 的结构分为两种:

"名/值"对的集合

对象是一个无序的"'名称/值'对"集合。一个对象以"{"(左括号)开始,"}"(右括号)结束。每个"名称"后跟一个":"(冒号);"'名称/值' 对"之间使用","(逗号)分隔。

例子:{ "name":"阿土","age":20 }

值的有序列表

数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。

在上面两种 JSON 对象中可以使用的值包括有:

15. RESTful 风格

REST 这个词是 2000 年 Roy Fielding 在他的博士论文中提出的,Fielding 参与了 HTTP 协议的设计。

REST 是 Representational State Transfer(表现层状态转移)的缩写,如果一个架构符合 REST 原则,就称它为 RESTful 架构。

RESTful API 就可以理解成"符合 REST 风格的 API",请求 = 动词 + 宾语。

动词使用五种 HTTP 方法,对应 CRUD 操作。

  • GET:从服务器获取资源

  • POST:在服务器新建一个资源

  • PUT:在服务器更新资源(客户端提供改变后的完整资源)

  • PATCH:在服务器更新资源(客户端提供改变的属性)

  • DELETE:从服务器中删除资源

RESTful 风格 API 例子:

GET    /zoos: 列出所有动物园

POST /zoos: 新建一个动物园

GET  /zoos/:id: 获取某个指定动物园的信息

PUT /zoos/:id: 更新某个指定动物园的全部信息

PATCH /zoos/:id 更新某个指定动物园的部分信息

DELETE /zoos/:id: 删除某个动物园

GET /zoos/:id/animals 列出某个指定动物园的所有动物

DELETE /zoos/:id/animals/:id: 删除某个指定动物园的指定动物
相关推荐
Yaml41 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~1 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616881 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7892 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java2 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~2 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
程序媛小果3 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot
小屁孩大帅-杨一凡3 小时前
java后端请求想接收多个对象入参的数据
java·开发语言
java1234_小锋3 小时前
使用 RabbitMQ 有什么好处?
java·开发语言
长安初雪4 小时前
Request 和 Response 万字详解
计算机网络·servlet