8月更文挑战 | 前端计算机网络面试题汇总(TCP与UDP)

192 阅读3分钟

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

计算机网络试题汇总

1.OSI七层模型

高中记的一个口诀,哈哈哈:应表会传网数物

image.png

说明层级
提供为应用软件设置的接口(常用协议HTTPHTTPSFTPSSHTELNETSMTPPOP3等)应用层
数据转换成接收者能够兼容并且适合传输的格式表示层
对两台计算机进行通信时的通信连接进行配置维护会话层
传输表头TH)添加进数据而后形成数据包,传输表头内包含了所使用的协议等信息传输层
决定着数据的路径选择以及转寄,将网络表头NH)添加进数据数据包中,形成分组,网络表头中包含着网络资料网络层
负责网络寻址、错误侦测改错数据链路层
在局部局域网上发布数据帧,管理着通信设备与网络媒体间的互通物理层

2.TCP与UDP的区别

  1. 连接方面
    • TCP:TCP面向连接,发送数据时需要先建立连接
    • UDP:UDP面向无连接
  2. 可靠性方面
    • TCP:TCP面向可靠连接,通过TCP传输的协议不丢失无差错不重复,按顺序到达,因此适合进行大数据量的交换
    • UDP:UDP面向不可靠连接,尽最大努力进行数据交付,不确保数据到达
  3. 应用方面
    • TCP:TCP面向字节流,存在网络拥塞流量控制机制
    • UDP:UDP面向报文,网络拥塞不会影响传输速率,因此可能会存在丢包的情况,常用于:视频会议直播
  4. 连接对象
    • TCP:TCP仅能为一对一
    • UDP:UDP支持一对一一对NN对一N对N
  5. 首部开销
    • TCP:TCP头部20-60字节
    • UDP:UDP头部仅8字节

3.TCP的三次握手和四次挥手

三次握手

image.png

image.png

  • 客户端通过SYN报文发送请求信息,寻找服务端上开通的端口发起握手,并将状态设置为SYN_SEND
  • 服务端收到SYN报文,回复SYN+ACK报文,同意进行连接,并将状态设置为SYN_RCVD
  • 客户端收到服务端回复的SYN+ACK报文,将ACK报文发给服务端,表示收到同意信息,已建立连接,同时将状态设置为ESTABLISHED状态
  • 服务端收到ACK报文,知道连接已建立,也将状态设置为ESTABLISHED状态

简单来说:

客户端:我要和你建立连接 → 服务端:知道了,我准备好了,你连接吧 → 客户端:好的,收到你的信息了,连好了

四次挥手

image.png

在挥手之前,客户端服务端之间都已建立好了连接,故状态均为ESTABLISHED,若是客户端首先发起了挥手请求,则有以下流程:

  • 客户端发出FIN+ACK报文,报文中指定SEQ序列号,状态变为FIN_WAIT1
  • 服务端收到客户端发出FIN的报文,回复ACK报文,并将ACK设置为客户端报文SEQ序列号+1,表示服务端已收到客户端的挥手,服务端状态变为CLOSE_WAIT状态
  • 服务端准备断开连接,发出FIN报文,并指定一个序列号,状态变为LAST_ACK
  • 客户端收到服务端发出的FIN报文,发送一个ACK报文作为应答,此时状态为TIME_WAIT,等待一段时间保证服务端收到ACK报文后,状态变为CLOSE
  • 服务端收到ACK报文,断开连接,处于CLOSE状态