diva-notes
  • README
  • Ads
    • 定价策略
    • 广告层级
    • 归因模型
    • 买量
    • Chat GPT
    • Google
  • AI
    • 参考资料
    • Chat GPT
    • stable-diffusion-webui安装
  • Algorithm
    • 倍增
    • 并查集
    • 参考
    • 环的判断
    • 凸包
    • 蓄水池抽样
    • 最短路径
    • 最小生成树
    • KMP算法
    • Rabin-Karp算法
    • Tarjan桥算法
  • Architecture
    • Serverless
  • Career
  • CICD
    • 代码质量
    • CICD实践
  • Data Structure
    • 布谷鸟过滤器
    • 布隆过滤器
    • 浮点
    • 红黑树
    • 锁
    • LSM树
  • DB
    • My SQL
      • 隔离级别
      • 架构
      • 索引
      • 锁
      • 页结构
      • 主从同步
      • ACID
      • Log
      • MVCC
      • Questions
    • Postgres
      • 持久化
      • 对比MySQL
      • 隔离级别
      • 索引
      • Greenpulm
      • MVCC
    • 倒排索引
    • 列式存储
    • H Base
    • HDFS
    • MPP数据库选型
    • Questions
  • Distributed System
    • 分布式事务
    • 服务网格
    • BASE理论
    • CAP
    • Etcd
    • Raft协议
    • ZAB协议
  • Go
    • 1.语言基础
      • 1.CPU寄存器
      • 2-1.函数调用
      • 2-2.函数调用栈
      • 2.接口
      • 3.汇编
      • 4.调试
    • 2.编译
      • 1.编译
      • 2.词法与语法分析
      • 3.类型检查
      • 4.中间代码生成
      • 5.机器码生成
    • 3.数据结构
      • 1.数组array
      • 2.切片slice
      • 3.哈希表map
      • 4.字符串
    • 4.常用关键字
      • 1.循环
      • 2.defer
      • 3.panic和recover
      • 4.make和new
    • 5.并发编程
      • 1.上下文Context的实现
      • 2-1.runtime.sema信号量
      • 2-2.sync.Mutex的实现
      • 2-3.sync.WaitGroup
      • 2-4.sync.Once的实现
      • 2-5.sync.Map的实现
      • 2-6.sync.Cond
      • 2-7.sync.Pool的实现
      • 2-8.sync.Semaphore的实现
      • 2-9.sync.ErrGroup
      • 3.定时器Timer的实现
      • 4.Channel的实现
      • 5-1.调度-线程
      • 5-2.调度-MPG
      • 5-3.调度-程序及调度启动
      • 5-4.调度-调度策略
      • 5-5.调度-抢占
      • 6.netpoll实现
      • 7.atomic
    • 6.内存管理
      • 1-1.内存分配基础-TCmalloc
      • 1-2.内存分配
      • 2.垃圾回收
      • 3.栈内存管理
    • 参考
    • 各版本特性
    • 坑
    • Go程序性能优化
    • http.Client
    • net.http路由
    • profile采样的实现
    • Questions
    • time的设计
  • Kafka
    • 高可用
    • 架构
    • 消息队列选型
    • ISR
    • Questions
  • Network
    • ARP
    • DNS
    • DPVS
    • GET和POST
    • HTTP 2
    • HTTP 3
    • HTTPS
    • LVS的转发模式
    • NAT
    • Nginx
    • OSI七层模型
    • Protobuf
    • Questions
    • REST Ful
    • RPC
    • socket缓冲区
    • socket详解
    • TCP滑动窗口
    • TCP连接建立源码
    • TCP连接四元组
    • TCP三次握手
    • TCP数据结构
    • TCP四次挥手
    • TCP拥塞控制
    • TCP重传机制
    • UDP
  • OS
    • 磁盘IO
    • 调度
    • 进程VS线程
    • 零拷贝
    • 内存-虚拟内存
    • 内存分配
    • 用户态VS内核态
    • 中断
    • COW写时复制
    • IO多路复用
    • Questions
  • Redis
    • 安装
    • 参考
    • 高可用-持久化
    • 高可用-主从同步
    • 高可用-Cluster
    • 高可用-Sentinel
    • 缓存一致性
    • 事务
    • 数据结构-SDS
    • 数据结构-Skiplist
    • 数据结构-Ziplist
    • 数据结构
    • 数据类型-Hashtable
    • 数据类型-List
    • 数据类型-Set
    • 数据类型-Zset
    • 数据淘汰机制
    • 通信协议-RESP
    • Questions
    • Redis6.0多线程
    • Redis分布式锁
    • Redis分片
  • System Design
    • 本地缓存
    • 错误处理
    • 大文件处理
    • 点赞收藏关注
    • 短链接生成系统
    • 负载均衡
    • 高并发高可用
    • 规则引擎
    • 集卡活动
    • 秒杀系统
    • 评论系统
    • 熔断
    • 限流
    • 延迟队列
    • Docker
    • ES
    • K 8 S
    • Node.js
    • Questions
  • Work
    • Bash
    • Charles
    • Code Review
    • Ffmpeg
    • Git
    • intellij插件
    • I Term 2
    • Mac
    • mysql命令
    • Nginx
    • postgresql命令
    • Protoc
    • Ssh
    • Systemd
    • Tcp相关命令
    • Vim
Powered by GitBook
On this page
  1. Network

Questions

LAN: Local Area Network,局域网

WAN: Wide Area Network,广域网

在浏览器中输入url后发生了什么

  1. 解析 URL,获取域名、资源名,生成 HTTP 请求

  2. DNS 解析 URL 对应的 IP

  3. 根据IP建立 TCP 连接(四层)

  4. 浏览器发起 HTTP 请求。请求经过 TCP、IP 层(三层)、MAC 层(二层)的封装,组成以太网帧

  5. 通过硬件网卡将包转为电信号,通过网线发出去

  6. 经过交换机(二层,基于 MAC)、路由器(三层,基于 IP)的转发,最终到达服务器

  7. 服务器一层一层地去掉各层封装,逐层传递,直到应用层。应用处理请求,并响应

  8. 响应经过同样的封装、解码步骤,经过同样的路径,传回给浏览器。

  9. 浏览器解码响应,渲染页面。

HTTP协议的组成

方法 + 资源路径 + 版本 + header头部 + body正文

<method> <URL> <version>
<headers>

<request body>

头部和正文如何分割:头部和请求正文之间使用一个空行分割

cookie 在哪一部分:header

Cookie: name=value; name2=value2

常见的HTTP Headers

Accept: 浏览器端可以接受的 MIME 类型。例如:Accept: text/html

Accept-Encoding: 浏览器申明自己可接收的编码方法,通常指定压缩方法。例如: Accept-Encoding: gzip, deflate

Accept-Language: 浏览器申明自己接收的语言。例如:Accept-Language: en-us

Accept-Charset: 浏览器可接受的字符集

Content-Length: 消息正文长度

Content-Type: 请求体结构。例如:Content-Type: application/x-www-form-urlencoded

Cookie: 用于位置服务端会话状态。通常由服务端返回,客户端写入本地,请求时再带上。格式类似 kv 结构,多个 kv 以分号分隔

Connection: 控制长连接

  • Connection: keep-alive: HTTP 1.1 默认值,请求完成后,客户端和服务器之间的 TCP连接不会关闭,

    • 通过设置 TCP keepalive 的属性,客户端在底层会定时发送心跳报文,服务器端收到心跳报文直接丢弃,不关心其内容。

  • Connection: close: 请求完成后, TCP连接就会关闭。下次请求需要重建连接

Host: HTTP 1.1 唯一的必传字段,用于指定资源的主机和端口号

Referer: 告诉服务器我是从哪个链接过来的,服务器可以以此做统计

User-Agent: 客户端使用的操作系统和浏览器的名称和版本

设计一个基于 UDP 差不多可靠的算法

TCP 和 UDP 其实是对成本和质量的不同取舍。TCP 重质量但成本大。UDP 重成本小但质量差。

HTTP3 使用的 QUIC 实际上就是基于 UDP 的。

  1. 可靠连接:增加握手机制

  2. 数据完整性:增加 CRC / Checksum 校验和

  3. 乱序:增加 SEQ 序列号

  4. 丢包:增加 ACK 机制

一些缩写

MSS: Max Segment Size,最大报文段长度

RTT: Round Trip Time,往返时延

SSL: Secure Socket Layer,安全套接字层。由Netscape开发的专门用户保护Web通讯的协议层,最新版本为3.0,通过互相认证、使用数字签名确保完整性

TLS: Transport Layer Security,传输层安全协议。是IETF (Internet Engineering Task Force,Internet工程任务组) 制定的一种新的协议。最新版本的TLS 1.0 建立在SSL 3.0协议规范之上,可以理解为SSL 3.1

参考

PreviousProtobufNextREST Ful

Last updated 2 years ago

小林coding