Computer Network

本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。

基础

详情

OSI 模型是一个分层的网络通信模型,共有七层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。它们的职能如下:

  • 应用层,负责给应用程序提供统一的接口;
  • 表示层,负责把数据转换成兼容另一个系统能识别的格式;
  • 会话层,负责建立、管理和终止表示层实体之间的通信会话;
  • 传输层,负责端到端的数据传输;
  • 网络层,负责数据的路由、转发、分片;
  • 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;
  • 物理层,负责在物理网络中传输数据帧;
详情

TCP/IP 模型共有四层,分别是应用层、传输层、网络层和数据链路层。它们的职能如下:

  • 应用层,负责向用户提供一组应用程序,比如 HTTP、DNS、FTP 等;
  • 传输层,负责端到端的通信,比如 TCP、UDP 等;
  • 网络层,负责网络包的封装、分片、路由、转发,比如 IP、ICMP 等;
  • 网络接口层,负责网络包在物理网络中的传输,比如网络包的封帧、 MAC 寻址、差错检测,以及通过网卡传输网络帧等;

HTTP

  • https 建立连接的过程(SSL/TLS 协商的过程)
  • 对称加密和非对称加密的优缺点

TCP

三次握手

四次挥手

详情

粘包问题是由于 TCP 协议的特性造成的,TCP 是一个面向字节流的协议,它并不关心数据的边界,只是把数据当成一个连续的字节流来处理。 粘包的问题出现在不知道一个用户消息的边界在哪,如果知道了边界在哪,接受方就可以通过边界划分出有效的用户消息。

解决粘包的方法有:

  • 通过消息长度来划分消息边界;
  • 通过特殊字符来划分消息边界,比如换行符、分号等;
  • 通过自定义消息结构来划分消息边界,比如在消息头中添加消息长度字段等;

操作系统的 TCP 协议栈主要负责:

  • 维护连接状态,TCP 连接的建立和断开;
  • 按顺序接受和发送数据包;
  • 自动重传丢失的数据包;
  • 合并 TCP 段,放到内核的 socket 缓冲区;

::: details 为什么是三次握手?不是两次、四次? TCP 建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能够帮助双方同步初始化序列号。序列号不能保证数据包不重复、不丢弃和按序传输。

不使用两次握手四次握手的原因:

  • 两次握手:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
  • 四次握手:三次握手已经是理论上最少可靠连接建立的次数,所以不需要使用更多的通信次数。

:::

  • cookie 和 session 的区别
Common Resources for Materials Calculation