跳至主要內容

EkkoSonya's Blog

好好学习,天天向上

Net13 - 杂

Cookie 和 Session

Session 是基于Cookie 实现的另一种记录服务端和客户端会话状态的机制。

Session 是存储在服务端,而 SessionId 会被存储在客户端的 Cookie 中。

Session 的认证过程

  1. 客户端第一次发送请求到服务端,服务端根据信息创建对应的 Session,并在响应头返回 SessionID
  2. 客户端接收到服务端返回的 SessionID 后,会将此信息存储在 Cookie 上,同时会记录这个 SessionID 属于哪个域名
  3. 当客户端再次访问服务端时,请求会自动判断该域名下是否存在 Cookie 信息,如果有则发送给服务端,服务端会从 Cookie 中拿到 SessionID,再根据 SessionID 找到对应的 Session,如果有对应的 Session 则通过,继续执行请求,否则就中断

codeNet八股大约 1 分钟
Net1 - 重要知识点1

基础

OSI 与 TCP/IP 网络模型

OSI 七层模型

物联网书会使用 (物数网传会表应)

物理层,数据链路层,网络层,传输层,会话层,表示层,用户层

OSI 七层模型 是国际标准化组织提出一个网络分层模型,其大体结构以及每一层提供的功能如下图所示

alt text

每一层都专注做一件事情,并且每一层都需要使用下一层提供的功能

比如传输层需要使用网络层提供的路由和寻址功能,这样传输层才知道把数据传输到哪里去


codeNet八股大约 8 分钟
Net10 - 传输层协议 (Socket + UDP)

传输层

Socket

即套接字,是应用层 与 TCP/IP 协议族通信的中间软件抽象层,表现为一个封装了 TCP / IP协议族 的编程接口(API)

Socket是一个编程接口,让你不用关心TCP/IP协议细节,直接调用函数就能收发数据

类型 协议 特点 用途
TCP Socket TCP 可靠、有序、面向连接 HTTP、邮件、FTP
UDP Socket UDP 快速、无连接 视频直播、在线游戏、DNS

codeNet八股大约 5 分钟
Net11 - 网络层 (IP 1)

网络层

网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信

alt text

网络层与数据链路层有什么关系

IP(网络层) 和 MAC (数据链路层)之间的区别和关系

IP 的作用是主机之间通信用的,而 MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输

在区间内移动相当于数据链路层,充当区间内两个节点传输的功能,区间内的出发点好比源 MAC 地址,目标地点好比目的 MAC 地址。

整个旅游行程表就相当于网络层,充当远程定位的功能,行程的开始好比源 IP,行程的终点好比目的 IP 地址


codeNet八股大约 9 分钟
Net12 - 网络层 (IP 2)

网络层

IP 地址与路由控制

IP地址的网络地址这一部分是用于进行路由控制。

路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在主机和路由器上都会有各自的路由器控制表。

在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。

下面以下图的网络链路作为例子说明:


codeNet八股大约 9 分钟
Net2 - 重要知识点2 (浏览器访问网页全过程)

基础

浏览器访问网页全过程

整体流程

  1. 在浏览器中输入指定网页的 URL
  2. 浏览器通过 DNS 协议,获取域名对应的 IP 地址
  3. 浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求 (三次握手)
  4. 浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容
  5. 服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器
  6. 浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示
  7. 浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求 (TCP 四次挥手)

codeNet八股大约 5 分钟
Net3 - 应用层协议 (HTTP)

应用层

HTTP 协议

HTTP 是超文本传输协议,也就是 HyperText Transfer Protocol

是一种用于传输超文本和多媒体内容的协议,主要是为 Web 浏览器与 Web 服务器之间的通信而设计的

当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的。

HTTP 使用客户端-服务器模型,客户端向服务器发送 HTTP Request(请求),服务器响应请求并返回 HTTP Response(响应)

alt text

codeNet八股大约 8 分钟
Net3 - 应用层协议 (HTTP 与 HTTPS)

应用层

HTTP 与 HTTPS

两者区别

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的

codeNet八股大约 7 分钟
Net5 - 应用层协议 (HTTP/1.1 2 3)

应用层

HTTP/1.1 2 3

HTTP/1.1

HTTP/1.1 相比 HTTP/1.0 性能上的改进:

  • 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
  • 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

但 HTTP/1.1 还是有性能瓶颈:

  • 请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分;
  • 发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
  • 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞;
  • 没有请求优先级控制;
  • 请求只能从客户端开始,服务器只能被动响应

codeNet八股大约 3 分钟
Net6 - 应用层协议 (WebSocket)

应用层

WebSocket

HTTP 特点

从HTTP协议的角度来看,就是点一下网页上的某个按钮,前端发一次HTTP请求,网站返回一次HTTP响应。这种由客户端主动请求,服务器响应的方式也满足大部分网页的功能场景。

但有没有发现,这种情况下,服务器从来就「不会主动」给客户端发一次消息

比如:

  • 在线聊天:服务器有新消息但无法主动推送,客户端得不断轮询问"有新消息吗?"
  • 实时通知:用户登录后,管理员发来通知,用户要等到刷新页面才能看到
  • 协作编辑:多人编辑同一个文档,别人的改动无法实时显示

codeNet八股大约 9 分钟