计算机网络面试核心

2-1 网络基础知识讲解 2-2 TCP的三次握手 2-3 TCP 的四次挥手 2-4 TCP 和 UDP 的区别 2-5 TCP 的滑动窗口 2-6 HTTP 相关 2-7 HTTP和HTTPS的区别 2-8 Socket 相关

2-1 网络基础知识讲解

OSI 开放式互联参考模型

OSI 七层模型

OSI 的“实现”:TCP/IP

网络七层 TCP/IP概念层模型 数据格式 功能 包含协议
应用层 应用层 数据 网络服务与使用者应用程序间的一个接口 HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
表示层 数据表示、安全、压缩 没有协议
会话层 会话层连接到传输层的映射;会话连接的流量控制;数据传输;会话连接恢复与释放;会话连接管理、差错控制 没有协议
传输层 传输层 数据段 用一个寻址机制来标识一个特定的应用程序(端口号) TCP、UDP
网络层 网络层 数据包 基于网络层地址(IP地址)进行不同网络系统间的路径选择 IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25
数据链路层 数据链路层 数据帧 在物理层上建立、撤销、标识逻辑链接和链路复用以及差错校验等功能。通过使用接收系统的硬件地址或物理地址来寻址 以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP
物理层 物理层 比特流 建立、维护和取消物理链接 线路、无线电、光纤、信鸽

2-2 TCP的三次握手

传输控制协议 TCP 简介

  • 面向连接的、可靠的、基于字节流的传输层通信协议。
  • 将应用层的数据流分割成报文段并发送给目标节点的 TCP 层。
  • 数据包都有序号,对方收到则发送 ACK 确认,未收到则重传 。
  • 使用校验和来检验数据在传输过程中是否有误。

TCP 报文头

TCP 报文头

一般使用IP+协议+端口号(Socket套接字)标识网络中的一个进程

TCP Flags

  • URG:紧急指针标志
  • ACK:确认序号标志
  • PSH:push 标志
  • RST:重置连接标志
  • SYN:同步序号,用于建立连接过程
  • FIN:finish 标志,用于释放连接

握手是为了建立连接,TCP 三次握手的流程图如下:

TCP 三次握手

  • 第一次握手:建立连接时,客户端发送 SYN 包(syn=j)到服务器,并进入 SYN_SEND 等待状态,等待服务器确认;
  • 第二次握手:服务器收到 SYN 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;
  • 第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

记录一次 TCP 三次握手过程
TCP 三次握手

为什么需要三次握手才能建立起连接

  • 为了初始化 Sequence Number 的初始值。

首次握手的隐患——SYN 超时

  • 问题起因分析
    • Server 收到 Client 的 SYN,回复 SYN-ACK 的时候未收到 ACK 确认。
    • Server 不断重试直至超时,Linux 默认等待63(1+2+4+8+16+32)秒才断开连接。
  • 针对SYN Flood 的防护措施
    • SYN 队列满后,通过 tcp_syncookies 参数回发 SYN Cookie。
    • 若为正常连接则 Client 会回发 SYN Cookie ,直接建立连接。

建立连接后,Client 出现故障怎么办

  • 保活机制
    • 向对方发送保活探测报文,如未收到响应则继续发送。

2-3 TCP 的四次挥手

挥手是为了终止连接,TCP 四次挥手的流程图如下:

TCP 四次挥手

  • 第一次挥手:Client 发送一个 FIN,用来关闭 Client 到 Server 的数据传送,Client 进入 FIN_WAIT_1 状态;
  • 第二次挥手:Server 收到 FIN 后,发送给一个 ACK 给 Client,确认序号为收到序号+1(与 SYN 相同,一个 FIN 占用一个序号),Server 进入 CLOSE_WAIT 状态
  • 第三次挥手:Server 发送一个 FIN,用来关闭 Server 到 Client 的数据传送,Server 进入 LAST_ACK状态;
  • 第四次挥手:Client 收到 FIN 后,Client 进入TIME_WAIT状态,接着发送一个 ACK 给 Server,确认序号为收到序号+1,Server 进入CLOSED状态,完成四次挥手。

记录一次TCP 四次挥手过程
TCP 四次挥手

为什么会有 TIME_WAIT 状态

  • 确保有足够的时间让对方收到 ACK 包。
  • 避免新旧连接混淆。

为什么需要四次握手才能断开连接

  • 因为全双工,发送方和接收方都需要 FIN 报文和 ACK 报文。

服务器出现大量 COLSE_WAIT 状态的原因

  • 对方关闭 socket 连接,我方忙于读或写,没有及时关闭连接
    • 检查代码,特别是释放资源的代码。
    • 检查配置,特别是处理请求的线程配置。

2-4 TCP 和 UDP 的区别

UDP 简介

  • UDP 报文结构
    • UDP报文结构.png
  • UDP 特点
    • 面向非连接。
    • 不维护连接状态,支持同时向多个客户端传输相同的消息。
    • 数据包报头只有8个字节,额外开销小。
    • 吞吐量只受限于数据生成速率、传输速率以及机器性能。
    • 尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表。
    • 面向报文,不对应用程序提交的报文信息进行拆分或者合并。

TCP 和 UDP 的区别

TCPUDP
是否连接面向连接无连接
是否可靠可靠传输,使用流量控制和拥塞控制不可靠传输,不使用流量控制和拥塞控制
连接对象个数只能一对一通信支持一对一、一对多、多对一和多对多交互通信
传输方式面向字节流面向报文
首部开销首部最小20字节,最大60字节首部开销小,仅8字节
适用场景适用于要求可靠性传输的应用,如文件传输适用于实时应用(视频会议、视频直播等)

2-5 TCP 的滑动窗口

RTT 和 RTO

  • RTT:发送一个数据包到收到对应的 ACK,所花费的时间。
  • RTO:重传时间间隔。

TCP 使用滑动窗口做流量控制与乱序重排

  • 保证 TCP 的可靠性。
  • 保证 TCP 的流控特性。

2-6 HTTP 相关

超文本传输协议 HTTP 主要特点

  • 支持客户/服务器模式(C/S).
  • 简单快速
  • 灵活
  • 无连接
  • 无状态

HTTP 请求结构

HTTP 请求报文

HTTP 响应结构

HTTP 响应报文

请求/响应的步骤

  • 客户端连接到 WEB 服务器
  • 发送 HTTP 请求
  • 服务器接受请求并返回 HTTP 响应
  • 释放连接 TCP 连接
  • 客户端浏览器解析 HTML 内容

在浏览器地址栏键入 URL,按下回车后经历的流程

  • DNS 解析
  • TCP 连接
  • 发送 HTTP 请求
  • 服务器处理请求并返回 HTTP 报文
  • 浏览器解析渲染页面
  • 连接结束

HTTP 状态吗

  • 1XX:指示信息——表示请求已接受,继续处理。
  • 2XX:成功——表示请求已被成功接收、理解、接受。
    • 200 OK:正常返回信息。
  • 3XX:重定向——要完成请求必须进行更进一步的操作。
    • 301 Moved Permanently:永久重定向。
    • 302 Found:临时跳转。
  • 4XX:客户端错误——请求有语法错误或请求无法实现。
    • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
    • 401 Unauthorized:请求未经授权。
    • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
    • 404 Not Found:请求资源不存在。
  • 5XX:服务器端错误——服务器未能实现合法的请求。
    • 500 Internal Server Error:服务器发生了不可预期的错误。
    • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

GET 请求和 POST 请求的区别

  • HTTP 报文层面:GET 将请求放在 URL,POST 放在报文体中。
  • 数据库层面:GET 符合幂等性和安全性,POST 不符合。
  • 其他层面:GET 可以被缓存、被存储,而 POST 不行。
  • Cookie 简介

    • 是由服务器发送给客户端的特殊信息,以文本的形式存放在客户端。
    • 客户端再次请求的时候,会吧 Cookie 回发。
    • 服务器接受到后,回解析 Cookie生成与客户端相对应的内容。
  • Cookie 的设置以及发送过程
    Cookie

  • Session 简介

    • 服务器端的机制,在服务器上保存信息。
    • 解析客户端请求并操作session id,按需保存状态信息。
  • Session的实现方式

    • 使用Cookie来实现。
    • 使用URL回写来实现。
  • Cookie和Session的区别

    • Cookie数据存放在客户的浏览器上,Session数据放在服务器上;
    • Session相当于Cookie更安全;
    • 若考虑减轻服务器负担可以考虑使用Cookie;

2-7 HTTP和HTTPS的区别

HTTPS

SSL(Security Sockets Layer,安全套接层)

  • 为网络通信提供安全及数据完整性的一种安全协议;
  • 是操作系统对外的API;
  • 采用身份验证和数据加密保证网络通信提供安全及数据完整性;

HTTPS数据传输流程

  • 浏览器将支持的加密算法信息发送给服务器;
  • 服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器;
  • 浏览器验证证书的合法性,并结合证书公钥加密信息发送给服务器;
  • 服务器使用私钥解密信息,验证哈希加密响应信息回发浏览器;
  • 浏览器解密响应信息,并对消息进行验证,之后进行加密交互数据;

HTTP和HTTPS的区别

  • HTTPS需要到CA申请证书,HTTP不需要;
  • HTTPS密文传输,HTTP明文传输;
  • 连接方式不同,HTTPS默认使用443端口,HTTP默认使用80端口;
  • HTTPS = HTTP + 加密 + 认证 + 完整性保护,较HTTP安全;

HTTPS不一定安全

  • 浏览器默认填充 http:// 请求需要跳转有被劫持的风险;
  • 可以使用HSTS优化;

2-8 Socket 相关

Socket 是对 TCP/IP 协议的抽象,是操作系统对外开放的接口。

Socket 通信流程

Socket 通信流程

Comment