计算机网络常考面试题整理(不定期更新)

计算机网络体系结构


计算机网络常考面试题整理(不定期更新)_第1张图片

  1. 七层协议
    图上图(a)所示,其中表示层和会话层用途如下:

    • 表示层:信息的语法、语义以及它们的关联,如加密解密、转换翻译、压缩解压缩
    • 会话层:不同机器上的用户之间建立及管理会话
  2. 五层协议

    • 应用层:为特定应用程序提供数据传输服务,例如HTTP、DNS等。数据单位为报文
    • 运输层:提供的是进程间的通用数据传输服务。由于应用层协议很多,定义通用的运输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议TCP。提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP主要提供完整性服务,UDP主要提供及时性服务
    • 网络层:为主机之间提供数据传输服务,而运输层协议是为主机中的进程提供服务。网络层把运输层传递下来的报文段或者用户数据报封装成分组
    • 数据链路层:网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的结点提供服务。数据链路层把网络层传来的分组封装成帧
    • 物理层:考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路感觉不到这些差异
  3. 数据在各层之间的传递过程
    在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部和尾部
    路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要运输层和应用层。
    计算机网络常考面试题整理(不定期更新)_第2张图片

  4. TCP/IP 体系结构
    它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。
    现在的TCP/IP体系结构不严格遵循OSI分层概念,应用层可能会直接使用IP层或者网络接口层
    计算机网络常考面试题整理(不定期更新)_第3张图片

    TCP/IP协议族是一种沙漏形状,中间小两边大,IP协议在其中占用举足轻重的地位
    计算机网络常考面试题整理(不定期更新)_第4张图片

运输层


网络层只把分组送到目的主机,但是真正通信的并不是主机而是主机中的进程。运输层提供了进程间的逻辑通信,运输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看见的两个运输层实体之间有一条端到端的逻辑通信信道。

UDP和TCP的特点


  • 用户数据报协议UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加UDP首部)
  • 传输控制协议TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块)

UDP首部格式


计算机网络常考面试题整理(不定期更新)_第5张图片
首部字段只有8个字节,包括源端口、目的端口、长度、检验和。12字节的伪首部是为了计算检验和临时添加的

TCP首部格式


计算机网络常考面试题整理(不定期更新)_第6张图片

  • 序号:用于对字节流进行编号,例如序号为301,表示第一个字节的编号为301,如果携带的数据长度为100字节,那么下一个报文段的序号为401
  • 确认号:期望收到的下一个报文段的序号。例如B正确收到A发送来的一个报文段,序号为501,携带的数据长度为200字节,一次B期望下一个报文段的序号为701,B发送给A的确认保温段中确认号就为701
  • 数据偏移:指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度
  • 确认ACK:当ACK=1时确认号字段有效,否则无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
  • 同步SYN:在连接建立时用来同步序列号。当SYN=1,ACK=0时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中SYN=1,ACK=1
  • 终止FIN:用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接
  • 窗口:窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的

TCP的三次握手


计算机网络常考面试题整理(不定期更新)_第7张图片

假设 A 为客户端,B 为服务器端。

  1. 首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。
  2. A 向 B 发送连接请求报文段,SYN=1,ACK=0,选择一个初始的序号 x。
  3. B 收到连接请求报文段,如果同意建立连接,则向 A 发送连接确认报文段,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
  4. A 收到 B 的连接确认报文段后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
  5. B 收到 A 的确认后,连接建立。

三次握手的原因
为了防止失效的连接请求到达服务器,让服务器错误打开连接。
失效的连接请求是指,客户端发送的连接请求在网络中滞留,客户端因为没及时收到服务器端发送的连接确认,因此就重新发送了连接请求。滞留的连接请求并不是丢失,之后还是会到达服务器。如果不进行第三次握手,那么服务器会误认为客户端重新请求连接,然后打开了连接。但是并不是客户端真正打开这个连接,因此客户端不会给服务器发送数据,这个连接就白白浪费了。

TCP的四次挥手


计算机网络常考面试题整理(不定期更新)_第8张图片

以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。

  1. A 发送连接释放报文段,FIN=1;
  2. B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据;
  3. 当 B 要不再需要连接时,发送连接释放请求报文段,FIN=1
  4. A 收到后发出确认,进入 TIME-WAIT 状态,等待 2MSL 时间后释放连接。
  5. B 收到 A 的确认后释放连接。

四次挥手的原因
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

TIME_WAIT
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:

  1. 确保最后一个确认报文段能够到达。如果 B 没收到 A 发送来的确认报文段,那么就会重新发送连接释放请求报文段,A 等待一段时间就是为了处理这种情况的发生。
  2. 等待一段时间是为了让本连接持续时间内所产生的所有报文段都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文段。

你可能感兴趣的:(计算机网络常考面试题整理(不定期更新))