Interview_计网_day20

\(TCP\) 粘包问题

粘包问题的本质在于接收方无法区分消息与消息之间的边界在哪里,可能把两个消息读成了一个消息。

解决方案有三种:

  1. 定长发送:在数据发送的时候,无论数据多大或者多小,都拆分成固定长度 \(LEN\) 来发送,随后一个包不足 \(LEN\) 时通过空白字节来填充。但会造成带宽浪费。
  2. 尾部标记法:在每个要发送的数据报尾部设置一个特殊的字节序列,用来表示数据报的结束。但这种序列的确定本身就是一个问题,什么样的序列可以做成标识序列,很难有确定的答案。
  3. 头部标记法:在报文头部注明发送的数据报大小,接收方接收的时候通过报头表明的数据大小进行读取,就必然只能读到一个数据。但不可以忽略每一个报头的累加值,对于内存的开销需要更大。

\(HTTP\) 协议

HTTP协议超级详解

\(HTTP\) 是基于 \(TCP/IP\) 通信协议来传递数据。

\(HTTP\) 采用请求响应模型。客户端发起一个 \(HTTP\) 请求到服务器的 \(80\) 端口。服务器则在 \(80\) 端口监听客户端的请求,一旦收到请求,服务器就会向客户端返回一个状态以及返回了内容。

\(HTTP\) 特点

  1. 支持 请求-响应 模式
    • \(HTTP\) 协议规定,请求从客户端发出,最后服务器端响应并返回。
  2. 简单快速
    • 客户向服务器请求的时候,只需传送请求方法(\(GET、POST\))和路径。由于 \(HTTP\) 协议简单,使得 \(HTTP\) 服务器的程序规模小,通信速度快。
  3. 灵活
    • \(HTTP\) 允许传输任意类型的数据对象。
  4. 无连接
    • 限制每次连接只处理一个请求。服务器端完成客户的请求并收到客户的应答后,就断开连接,尽快的释放资源给其他客户使用。
    • 早期的 \(HTTP\) 协议完成后立即断开,而 \(HTTP1.1\) 中会等待几秒后在断开,原因在于如果用户几秒内又有新的请求,那么还是通过之前的通道来收发消息,显然这样可以减少短时间内的建立耗时,提高效率。
  5. 无状态
    • \(HTTP\) 不保存状态,每当有新的请求发送时,就会有新的响应产生,协议本身不保留之前处理过的响应报文的信息。
    • 利用 \(Cookie\) 可以记录 \(HTTP\) 协议的请求信息。浏览器登录时直接从 \(Cookie\) 读取数据并发给服务器,服务器验证后响应给客户端。

\(HTTP\) 的返回码

类别 原因
1XX \(Information\)(信息性状态码) 接收的请求正在处理
2XX \(Success\)(成功状态码) 请求正常处理完毕
3XX \(Redirection\)(重定向状态码) 需要进行附加的操作以完成请求
4XX \(Client Error\)(客户端错误状态码) 请求有语法错误或请求无法实现
5XX \(Server Error\)(服务器错误状态码) 服务器未能实现合法的请求
  • \(200:\) 客户端请求成功。
  • \(303:\) 资源被移动到了新的位置
  • \(403:\) 禁止访问
  • \(404:\) 无法找到文件
  • \(502:\) 网关错误

在浏览器中输入 \(URL\) 后执行的全部过程,每层和协议

  1. 浏览器中输入 \(URL\),解析域名需要用到 \(DNS\) 协议。主机会询问本地域名服务器,如果没有就向 \(DNS\) 服务器查询该 \(URL\)\(IP\) 地址。查询方法分为递归查询和迭代查询。这里的传输过程中使用到了 \(UDP\) 协议。
    1. 递归查询过程:主机 -> 根域名服务器 -> 顶级域名服务器 -> 权限域名服务器 -> 顶级域名服务器 -> 根域名服务器 -> 主机
    2. 迭代查询过程:主机 -> 根域名服务器 -> 主机 -> 顶级域名服务器 -> 主机 -> 权限域名服务器 -> 主机
  2. 得到 \(IP\) 地址后,浏览器与服务器建立 \(HTTP\) 连接,发出读取文件的请求报文。这里用到了应用层的 \(HTTP\) 协议。
  3. 在传输层中,数据报通过 \(TCP\) 连接传输,用到了 \(TCP\) 协议。
  4. 传输报文过程中,会把报文发送给网络层,这里用到了 \(IP\) 协议、\(ARP\) 协议和路由选择协议。\(ARP\) 协议获得下一跳应该跳往的 \(MAC\) 地址,一跳一跳的发送给目标地址。
  5. 信息传输完成以后,释放 \(TCP\) 连接,浏览器显示获得的 \(html\) 文本内容。

\(HTTPS\) 协议以及和 \(HTTPS\) 的区别

\(HTTPS = HTTP + SSL\),是更加安全的 \(HTTP\) 协议,\(SSL\) 提供了鉴别和保密两个基本安全服务。

  1. \(HTTP\) 是明文传输,\(HTTPS\) 是密文传输,所以更加安全。
  2. \(HTTP\) 默认端口 \(80\)\(HTTPS\) 默认端口 \(443\)
  3. \(HTTPS\) 的服务器需要申请 \(CA\) 证书。
  4. \(HTTPS\) 通信过程中加入了加密过程
    • \(HTTP\) 通信:直接把报文交给 \(TCP\) 传输到目的主机。
    • \(HTTPS\) 通信:把报文交给 \(SSL\) 加密,然后 \(SSL\) 交给 \(TCP\) 传输到目的主机,目的主机获取报文后在交给 \(SSL\) 解密。

\(HTTPS\) 的优缺点

优点:

  • 传输过程中使用了密匙进行加密,安全性更高。
  • 可以认证用户和服务器,确保数据发送到正确的服务器和用户

缺点:

  • 握手阶段时延较高,因为需要完成 \(SSL\) 握手。
  • 部署成本高,需要使用证书来验证自身的安全性,购买 \(CA\) 证书。需要进行解密过程,占用 \(CPU\) 资源多,需要更好的服务器配置。

猜你喜欢

转载自www.cnblogs.com/Jiaaaaaaaqi/p/12399199.html