MST

星途 面试题库

面试题:网络编程中TCP/IP协议栈在局域网内实现可靠文件传输的原理

在局域网环境下,利用TCP/IP协议栈实现可靠文件传输。请阐述其主要原理,包括如何建立连接、数据传输机制以及错误处理等方面。
43.2万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

建立连接

  1. 三次握手
    • 客户端发起请求:客户端向服务器发送一个SYN(同步)包,该包中包含客户端的初始序列号(Sequence Number,seq),假设为x。此包用于向服务器表明客户端想要建立连接。
    • 服务器响应:服务器接收到客户端的SYN包后,会返回一个SYN + ACK包。其中SYN部分包含服务器的初始序列号,假设为y,ACK部分是对客户端SYN包的确认,确认号(Acknowledgment Number,ack)为x + 1。
    • 客户端确认:客户端收到服务器的SYN + ACK包后,再向服务器发送一个ACK包,确认号为y + 1,序列号为x + 1。至此,连接建立成功,双方可以开始传输数据。

数据传输机制

  1. 分段与封装
    • 文件数据被分割成合适大小的TCP段。每个TCP段包含头部和数据部分,头部包含源端口、目的端口、序列号、确认号、标志位等信息。
    • TCP段被封装在IP数据包中,IP数据包再根据局域网的链路层协议(如以太网协议)进一步封装成帧进行传输。
  2. 序列号与确认号
    • 发送方为每个发送的TCP段分配一个序列号,接收方通过确认号告知发送方已成功接收的数据。例如,接收方收到序列号为n的TCP段后,会返回确认号为n + 数据长度的ACK包,表明期望接收下一个序列号开始的数据。
  3. 滑动窗口
    • 发送方和接收方都维护一个滑动窗口。发送方的滑动窗口表示在未收到确认的情况下可以连续发送的数据量。接收方的滑动窗口表示接收方当前能够接收的数据量。
    • 发送方根据接收方返回的窗口大小调整自己的发送速率,从而实现流量控制,避免接收方因来不及处理数据而导致数据丢失。

错误处理

  1. 超时重传
    • 发送方在发送一个TCP段后,会启动一个定时器。如果在定时器超时前未收到接收方的确认,发送方会重传该TCP段。
    • 重传超时时间(RTO,Retransmission TimeOut)并非固定值,而是根据网络状况动态调整。例如,最初的RTO可能设置为一个默认值,每次重传后,RTO会适当增加,以适应网络的延迟变化。
  2. 校验和
    • TCP头部和数据部分都有校验和字段。发送方在发送数据时会计算校验和并填充到相应字段,接收方收到数据后重新计算校验和并与接收到的校验和进行比较。如果不一致,则认为数据在传输过程中发生了错误,会丢弃该TCP段,发送方会通过超时重传机制重新发送。
  3. 连接重置
    • 如果接收方收到一个不符合预期的TCP段(如序列号混乱等严重错误),或者在连接建立或数据传输过程中出现异常情况,接收方可以发送一个RST(复位)包给发送方,强制关闭连接。发送方收到RST包后,会立即终止该连接相关的操作。