TCP常见问题

一、TCP简介

1.1 TCP协议特点

(1)  面向连接: 三次握手

(2)  可靠性:(a)三次握手、四次挥手种ACK、SEQ确认  (b)丢包、误码时TCP协议种序号和确认号是保证可靠传输的核心   (c)重传机制 (合理RTT时间内未收到确认)

(3)  面向字节流: 消息边界(无法确定)------>引发粘包问题

(4)  只支持单播 (不支持多播、广播)------->端到端的通信

(5)  全双工通信:客户端send——客户端buffer-- -- -- MSS-- -- --服务端buffer——服务端recv;      MSS决定了通信双方最大数据段

   buffer内容写入方式一: 写入一条则立即发送一个数据段 

   buffer内容写入方式二: 写入多条再发送一个数据段(此时数据段size < MSS)

1.2 TCP协议的传输机制

(1) 重传机制:        (a)基于时间(超时重传)(b)基于确认信息(快速重传)                  解决问题: 丢包、重复传、失序

(2) 流量控制机制:   基于滑动窗口                                                                                                解决问题:控制对端发送速率、丢失数据可重传

(3) 拥塞控制机制: (a)慢启动(慢开始) (b)拥塞避免 (c)快速重传 (d)快速恢复       解决问题:   网络拥堵,TCP重传导致丢包、延时;TCP继续重传、延时这种恶性循环

(4)可靠传输机制:     (a)基于连续 ARQ 协议  (b)基于滑动窗口协议                                      解决问题:  TCP协议可靠性

1.3 TCP协议的包头

序号:        本报文的第一个字节index

确认号:    期望收到next报文发送第一个字节index(潜在表示该确认号之前的字节都是OK的)

数据偏移:整个TCP包头size

6个标志字段:(1)URG标记紧急数据,赋予插队的权利  (2) ACK 确认  (3)通知接收方不用等缓存区填满,先赶紧推送  (4)RST 重新建立连接(5) SYN 同步  (6)FIN 完成

窗口:       接收窗口(告诉对端自己能接收多大数据量)

选项字段: MSS长度、时间戳、窗口扩大多少等

二、TCP三次握手、四次挥手、TCP状态

2.1. 三次握手

                                                        

客户端服务端
CLOSEDCLOSED
前2次握手期间客户端处于SYN-SENTListen(第一次握手期间)
前2次握手期间客户端处于SYN-SENTSYN-RCVD(第二、三次握手期间)
三次握手后Established三次握手后Established

2.2. 四次挥手

四次挥手状态
服务端        客户端
FIN-WAIT-1(第一次挥手和第二次挥手期间)CLOSE-WAIT(第二次挥手和第三次挥手期间)
FIN-WAIT-2(第二次挥手和第三次挥手期间)LAST-ACK(第三次挥手后第四次挥手前)
TIME-WAIT(第三次挥手后)CLOSED

2.3. 上图涉及了TCP的10种状态转换(还有一种中间态closing不常见)

客户端:CLOSED      SYNC-SENT              ESTABLISHED CLOSE-WAIT LAST-ACK   CLOSED   

服务端:CLOSED  LISTEN  SYNC-RCVD  ESTABLISHED FIN-WAIT1 FIN-WAIT2 TIME-WAIT CLOSED

2.4. TCP三次握手、四次挥手常见面试问题

>  为什么需要三次握手? (防止丢包)

    三次握手本质: 保证端到端具备通信能力; 

     (1)客户端发送SYN ACK给 服务端,服务端收到,确认了客户端的send功能

     (2)服务端发送SYN ACK SEQ给客户端,客户端收到,确认了服务端的send、receive功能

     (3)客户端再发送ACK SEQ给服务端,服务端收到,确认了客户端的receive功能

       如果是2次握手,无法确认客户端是否具有receive功能; 引入下面问题

(a)假定服务端数据ready,  此时服务端给客户端发送数据,客户端会忽略服务端发送过来的数据;(丢包)

(b)假定客户端真不具有receive功能,则也不会给服务端发送消息了

>  为什么需要四次挥手?

 四次挥手本质:关闭一个连接(也是两端、且考虑数据未传完的情况)

      (1)客户端发送 FIN SEQ给服务端,服务端status:close_wait         客户端status: FIN_WAIT1  不能够send, 但仍能够receive

      (2)服务端发送ACK SEQ给客户端,服务端status: close_wait(等待关闭); 原因:服务端数据有可能正在sending,没有发完       客户端status:FIN_WAIT1  ---->FIN_WAIT2

        (3)  服务端sended完成发送FIN SEQ给客户端,服务端status: LAST_ACK(等待确认)   客户端status:FIN_WAIT2

        (4) 客户端发送ACK SEQ给服务端, 服务端status: LAST_ACK---->CLOSED;   客户端:FIN_WAIT2---->TIME_WAIT         

        四次挥手确认后,服务端处于CLOSED状态,客户端需要TIME_WAIT等待2MSL才能进入CLOSED; 至此一个连接才算关闭

        第一次握手断了客户端的send能力,第二次只是简单应答服务端收到客户端断开请求, 第三次握手断了服务端的send能力,第四次服务端收到请求确认彻底断开;

>  客户端为什么需要等待2MSL才能进入CLOSED状态(防止丢包)

      假定第四次挥手的报文丢失,服务端未收到客户端发送ACK、SEQ的话,(最后残留)sending------>sended的数据会由server重新发送给client,client再回ACK、SEQ给server;

这一个来回所需的时间正好是2MSL;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当面试官问到TCP的常见面试问题,你可以参考以下回答: 1. TCP是什么?TCP是传输控制协议(Transmission Control Protocol)的缩写,是一种面向连接的、可靠的传输协议,用于在网络中传输数据。 2. TCP的特点有哪些?TCP具有以下特点: - 可靠性:TCP使用确认和重传机制来确保数据的可靠传输。 - 面向连接:在数据传输之前,TCP需要建立连接,并在数据传输完成后关闭连接。 - 流量控制:TCP使用滑动窗口机制来控制发送方和接收方之间的数据流量。 - 拥塞控制:TCP使用拥塞窗口和拥塞避免算法来控制网络拥塞情况。 - 高效性:TCP使用了各种优化算法,如快速重传、快速恢复等,以提高传输效率。 3. TCP的三次握手是什么?三次握手是TCP建立连接使用的过程,具体步骤如下: - 第一次握手:客户端向服务器发送一个SYN包,请求建立连接。 - 第二次握手:服务器收到SYN包后,回复一个SYN+ACK包,表示接受连接请求。 - 第三次握手:客户端收到服务器的SYN+ACK包后,回复一个ACK包,表示连接建立成功。 4. TCP的四次挥手是什么?四次挥手是TCP关闭连接使用的过程,具体步骤如下: - 第一次挥手:客户端向服务器发送一个FIN包,请求关闭连接。 - 第二次挥手:服务器收到FIN包后,回复一个ACK包,表示接受关闭请求。 - 第三次挥手:服务器发送一个FIN包,请求关闭连接。 - 第四次挥手:客户端收到FIN包后,回复一个ACK包,表示连接关闭完成。 5. TCP和UDP的区别是什么?TCP和UDP是两种不同的传输协议,主要区别如下: - 连接性:TCP是面向连接的协议,而UDP是无连接的协议。 - 可靠性:TCP提供可靠的数据传输,而UDP不保证数据的可靠性。 - 传输效率:TCP的传输效率相对较低,而UDP的传输效率较高。 - 数据包大小:TCP对数据包大小没有限制,而UDP对数据包大小有限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值