惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
The Register - Security
The Register - Security
S
Secure Thoughts
有赞技术团队
有赞技术团队
Hacker News - Newest:
Hacker News - Newest: "LLM"
月光博客
月光博客
Engineering at Meta
Engineering at Meta
www.infosecurity-magazine.com
www.infosecurity-magazine.com
WordPress大学
WordPress大学
N
News | PayPal Newsroom
F
Fortinet All Blogs
Forbes - Security
Forbes - Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Y
Y Combinator Blog
L
LINUX DO - 最新话题
Google Online Security Blog
Google Online Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
阮一峰的网络日志
阮一峰的网络日志
Application and Cybersecurity Blog
Application and Cybersecurity Blog
V2EX - 技术
V2EX - 技术
H
Heimdal Security Blog
G
Google Developers Blog
Vercel News
Vercel News
Martin Fowler
Martin Fowler
TaoSecurity Blog
TaoSecurity Blog
腾讯CDC
Cyberwarzone
Cyberwarzone
罗磊的独立博客
S
Securelist
T
Tor Project blog
Recorded Future
Recorded Future
小众软件
小众软件
Attack and Defense Labs
Attack and Defense Labs
L
LINUX DO - 热门话题
The Cloudflare Blog
爱范儿
爱范儿
S
Security @ Cisco Blogs
雷峰网
雷峰网
Schneier on Security
Schneier on Security
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
S
Schneier on Security
大猫的无限游戏
大猫的无限游戏
Recent Announcements
Recent Announcements
Blog — PlanetScale
Blog — PlanetScale
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
Latest news
Latest news
M
MIT News - Artificial intelligence

Shiroha白羽的博客

Golang 踩坑 —— interface 为参数的时候传 nil 指针 Codeforces Round 925 (Div. 3) Codeforces Round 924 (Div. 2) Codeforces Round 923 (Div. 3) Codeforces Round 922 (Div. 2) Codeforces Round 921 (Div. 2) Educational Codeforces Round 161 (Rated for Div. 2) Codeforces Round 920 (Div. 3) Codeforces Round 919 (Div. 2) Hello 2024 Good Bye 2023 Codeforces Round 918 (Div. 4) 个人备份的常用 macOS 清理命令 Codeforces Round 917 (Div. 2) Pinely Round 3 (Div. 1 + Div. 2) Educational Codeforces Round 160 (Rated for Div. 2) Codeforces Round 915 (Div. 2) Codeforces Round 914 (Div. 2) Codeforces Round 913 (Div. 3) Educational Codeforces Round 159 (Rated for Div. 2) Codeforces Round 912 (Div. 2) Codeforces Round 911 (Div. 2) CodeTON Round 7 (Div. 1 + Div. 2, Rated, Prizes!) Educational Codeforces Round 158 (Rated for Div. 2) Codeforces Round 910 (Div. 2) Codeforces Round 909 (Div. 3) Codeforces Round 908 (Div. 2) Educational Codeforces Round 157 (Rated for Div. 2) C++自定义的字面量 Codeforces Round 907 (Div. 2) Codeforces Round 916 (Div. 3) 关于 LRU map 的一些灵感 2023 杭州站 ICPC 现场赛 反复横跳的 Clang-Tidy(cert-dcl21-cpp) Codeforces Round 906 (Div. 2) 一段奇怪的 CPP 代码 Codeforces Round 905 (Div. 3) Codeforces Round 904 (Div. 2) Codeforces Round 903 (Div. 3) Educational Codeforces Round 156 (Rated for Div. 2) Codeforces Round 902 (Div. 2, based on COMPFEST 15 - Final Round) Codeforces Round 901 (Div. 2) Codeforces Round 900 (Div. 3) Codeforces Round 899 (Div. 2) Educational Codeforces Round#155 (Div. 2) Codeforces Round 898 (Div. 4) CodeTON Round 6 (Div. 2) Codeforces Round 897 (Div. 2) Codeforces Round 896 (Div. 2) Codeforces Round 887 (Div. 2) Codeforces Round 895 (Div. 3) 左值-右值-将亡值 blog.mauve.icu Pinely Round 2 (Div. 1 + Div. 2) Harbour.Space Scholarship Contest 2023-2024 (Div. 1 + Div. 2) Codeforces Round 894 (Div. 3) Codeforces Round 888 (Div. 3) Educational Codeforces Round#153 (Div. 2) Codeforces Round 893 (Div. 2) OTPAUTH,两步验证中的通用协议 Codeforces Round 892 (Div. 2) Codeforces Round 891 (Div. 3) Codeforces Round 890 (Div. 2) Educational Codeforces Round#152 (Div. 2) blog.mauve.icu Java Script 的 null 和 undefined 随想 记一次 SQL LEFT JOIN 没有得到预期结果的错误 Codeforces Round#789(Div. 2) GCC/G++ 预编译头性能优化 使用 Junit5 和 Mockito 实现 SpringBoot 的单元测试最优美的解决方案 centOS 防火墙 docker-compse 的问题 C++ 语言实现动态变化的线程池 Codeforces Round#744 (Div. 3) 计算机图形学 Windows 通过网络访问 WSL2 原生 JavaScript 实现图片裁剪 面试复习(计算机图形学) 面试复习(算法) Codeforces Round#706(Div. 2)-Let's Go Hiking 面试复习(Java) 面试复习(Git) 面试复习(Linux) 面试复习(数据库) 面试复习(操作系统) 面试复习(C++) Codeforces Round#699 (Div. 2) 清理 WSL2 的磁盘占用 Codeforces Round#697 (Div. 3) Windows 下的 NTFS 驱动器索引 BUG 计算机网络复习 记一次 Navicat 连接 MySQL 一直报认证错误(Access denied) 计算机网络实验复习 WSL1 使用 Docker 一直无法启动 我的ACM脚印 2020牛客暑期多校训练营(第三场)D-Points Construction Problem——构造 2020牛客暑期多校训练营(第三场)E-Two Matchings——复杂思维与简单dp 2020牛客暑期多校训练营(第二场)I-Interval——最大流转对偶图求最短路 Educational Codeforces Round 80 D. Minimax Problem——二分+二进制处理 Codeforces Round 606 E. Two Fairs——图论 Codeforces Round 612 (Div. 2) C. Garland——DP
面试复习(计算机网络)
Shiroha · 2021-02-23 · via Shiroha白羽的博客

OSI 模型

  • 哪七层
    • 应用层:协议与端口
    • 表示层
    • 会话层
    • 传输层:TCP、UDP
    • 网络层:IP、ARP
    • 数据链路层:mac地址
    • 物理层:物理字节流传输

ARP 协议

  • ARP 协议的作用
    • 将 IP 地址转为下一跳的 mac 地址

TCP 三次握手

序号数据发送内容发送方向客户端状态服务器状态
0CLOSEDLISTEN
1SYN=1 seq=x客户端 -> 服务器发送后转为 SYN_SENT接收后转为 SYN_RCVD
2SYN=1 ACK=1 ack=x+1 seq=y服务器 -> 客户端接收后转为 ESTABLISHEDSYN_RCVD
3ACK=1 ack=y+1客户端 -> 服务器ESTABLISHED接收后转为 ESTABLISHED
  • 为什么需要最后一次握手

    • 在最后一次握手前,不能确定服务器本身不能确定自己发送的数据能否被客户端所接收到
  • 如果最后一次的 ACK 包服务器没有接收到,即客户端已经进入了 ESTABLISHED 而服务器仍然没有进入到 ESTABLISHED,此时会发生什么

    • 服务器:由于仍然处于 SYN_RCVD 状态下,当超过一定时间后,服务器会重新发送 SYN+ACK 包,直到达到次数上限后,直接关闭本次连接
    • 客户端:因为已经进入了 ESTABLISHED,所以实际上已经可以发送数据了,当发送数据给服务器时,服务器会发现此连接并未建立,此时服务器将会按照 TCP 规则,发送 RST 包给客户端,当客户端接收到此 RST 包后,关闭连接

TCP 四次挥手

序号数据发送内容发送方向客户端状态服务器状态
0ESTABLISHEDESTABLISHED
1FIN=1 seq=x客户端 -> 服务器发送后转为 FIN_WAIT_1接收后转为 CLOSE_WAIT
2ACK=1 ack=x+1服务器 -> 客户端接收后转为 FIN_WAIT_2CLOSE_WAIT
3FIN=1 seq=y服务器 -> 客户端接收后转为 TIME_WAIT发送后转为 LAST_ACK
4ACK=1 ack=y+1客户端 -> 服务器发送后等待 2MSL 后转为 CLOSED接收后转为 CLOSED
  • 四次挥手的理解
    • 四次挥手可以认为是两次+两次,一次是由客户端发起的,客户端表示自己的数据已经发送完毕了,通过 FIN 包通知服务器,而服务器接收到后通过 ACK 包向客户端回复表示收到。另一次是由服务器发起的,因为客户端发送完成数据并不代表服务器发送完成数据了,所以还有服务器单独发起的 FIN 包,此时客户端发送 ACK 包表示确定

HTTP协议

  • 特点
    • 基于 TCP/IP (从 HTTP 3.0 开始,改为采用 UDP 协议)
    • 由客户端发起请求,服务器进行响应
    • 通过 URL 来区分服务
    • 无状态
    • 无连接
    • 提供了八种方法,其中最常见的两种为 GETPOST
  • 端口
    • HTTP 协议默认为 80 端口,HTTPS 协议为 443 端口
  • 状态码
状态码含义
1XX信息状态码
2XX成功状态码
3XX重定向状态码
4XX客户端错误码
5XX服务器错误码
  • 常见的状态码
状态码含义
200成功
302重定向
404客户端的 URL 不存在
500服务器错误
  • HTTP 和 HTTPS 的区别
    • HTTP 采用明文传输的方式,而 HTTPS 采用的是加密的方式传输
    • HTTPS 通常需要申请证书
  • GET 和 POST 的区别
    • GET 通常用于获取数据,GET 的请求参数会附在 URL 后,用 ? 分割 URL 和参数,用 & 分割多个参数,特殊字符进行 base64 转码,以明文的方式显示
    • POST 通常用于更新数据,POST 的请求参数会放在数据包的 Body 部分,相对更加安全,浏览器不会进行保存
  • HTTP 1.0 和 1.1 的区别
    • 持久连接
    • 管道机制:同一个连接中,客户端可以发送多个请求
    • 分块传输:服务器每产生一个数据,就发送一个数据
    • 新增了部分请求方式
  • HTTP 1.1 和 2.0 的区别
    • 完全采用二进制进行传输
    • 完全多路复用
    • 报头压缩

TCP 的可靠传输

  • TCP 的可靠传输的实现
    • 数据校验
    • 数据的合理分片和排序
    • 滑动窗口机制
      • 发送方保留了已经发送的数据的副本,用于重传
      • 发送方接收到 ACK 确认包后才会丢弃副本
      • 发送方维护一个重传时间,当没有接收到 ACK 确认包时将会进行重传
      • 通过拥塞控制来管理滑动窗口的大小
      • 发送方和接收方商讨发送速度,通过控制发送速度保证接收方有足够的内存空间来接受数据
  • TCP “粘包” 现象
    • 原因:TCP 是面向字节流的,而且在遇到多个连续的数据包时,会合并至一个数据包内发送,此时接收方将难以识别并读取内部的数据
    • 解决办法:在每个数据包前加上数据包的长度,使得每次读取数据时可以获取到数据包的长度而读出足够长的数据再进行解析