2025-04-18
TCP如何保证可靠传输
2025-04-18 ~ 2025-04-18

TCP(传输控制协议)通过多种机制确保数据的可靠传输,以下是其核心机制及工作原理:


1. 三次握手建立连接

  • 目的:确保双方通信能力正常,同步初始序列号(ISN)。
  • 过程
    1. 客户端发送SYN(同步序列号)报文。
    2. 服务端回复SYN-ACK(确认+同步)。
    3. 客户端发送ACK确认。
  • 作用:避免历史重复连接导致的资源浪费,为后续数据传输奠定基础。

2. 数据分块与序列号

  • 分块(Segmentation):将数据分割为适合传输的MSS(最大报文段大小)
  • 序列号(Sequence Number):每个字节分配唯一序列号,标识数据顺序。
  • 作用:接收方按序列号重组数据,解决乱序或重复问题。

3. 确认应答(ACK)与超时重传

  • ACK机制:接收方收到数据后,发送ACK确认(值为期望收到的下一个序列号)。
    • 示例:发送序列号1-1000的数据,接收方回复ACK 1001
  • 超时重传
    • 发送方未收到ACK时,启动重传计时器(RTO动态调整)。
    • 超时后重发数据,多次失败则断开连接。

4. 滑动窗口与流量控制

  • 滑动窗口:发送方维护一个窗口,允许连续发送多个报文段(无需逐个等待ACK)。
    • 窗口大小:由接收方通过TCP头部窗口字段动态通知(流量控制)。
  • 流量控制:防止接收方缓冲区溢出。若缓冲区满,窗口大小设为0,发送方暂停发送(通过零窗口探测保持同步)。

5. 拥塞控制

  • 目的:避免网络过载,动态调整发送速率。
  • 核心算法
    • 慢启动:窗口从1开始指数增长,直到阈值(ssthresh)。
    • 拥塞避免:窗口线性增长,避免激进发送。
    • 快重传:收到3个重复ACK时立即重传(无需等待超时)。
    • 快恢复:重传后窗口降为阈值,进入拥塞避免阶段。

6. 四次挥手释放连接

  • 过程
    1. 主动方发送FIN
    2. 被动方回复ACK(半关闭状态)。
    3. 被动方发送FIN
    4. 主动方回复ACK,进入TIME_WAIT状态(等待2MSL确保最后一个ACK到达)。
  • 作用:确保双方资源释放,处理延迟报文。

7. 其他辅助机制

  • 校验和:通过CRC校验检测数据损坏,丢弃错误报文(触发重传)。
  • 选择性确认(SACK):允许接收方告知缺失的数据块,减少不必要的重传。

总结

TCP通过连接管理、序列号、确认重传、滑动窗口、拥塞控制等机制,在不可靠的IP层上实现了:

2025-04-16
HTTPS通信的整个过程
2025-04-16 ~ 2025-04-16
状态码 定义
1xx 报告 接收到请求,继续进程
2xx 成功 步骤成功接收,被理解,并被接受
3xx 重定向 为了完成请求,必须采取进一步措施
4xx 客户端出错 请求包括错的顺序或不能完成
5xx 服务器出错 服务器无法完成显然有效的请求

403: Forbidden

2025-04-16
计算机网络——计算机网络常见面试题总结
2025-04-16 ~ 2025-04-16

一、OSI,TCP/IP,五层协议的体系结构,以及各层协议

osi

OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。

2025-04-06
BGP协议
2025-04-06 ~ 2025-04-06
边界网关协议(Border Gateway Protocol,BGP)是一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议。 由于不同的管理机构分别控制着他们各自的路由选择域,因此,路由选择域经常被称为自治系统AS(Autonomous System)。
2025-04-06
TCP建立时三次握手及需要的原因
2025-04-06 ~ 2025-04-06

TCP三次握手

三次握手

  • 第一次握手🤝: 客户端向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时随机生成初始序列号 seq=x,此时,客户端进程进入了 SYN-SENT状态,等待服务器的确认。
  • 第二次握手🤝: 服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己随机初始化一个序列号 seq=y,此时,服务器进程进入了SYN-RCVD状态,询问客户端是否做好准备。
  • 第三次握手🤝: 客户端进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,此时,连接建立,客户端进入ESTABLISHED状态,服务器端也进入ESTABLISHED状态。

为什需要三次,两次不行吗?

假如现在客户端想向服务端进行握手,它发送了第一个连接的请求报文,但是由于网络信号差或者服务器负载过多,这个请求没有立即到达服务端,而是在某个网络节点中长时间的滞留了,以至于滞留到客户端连接释放以后的某个时间点才到达服务端,那么这就是一个失效的报文,但是服务端接收到这个失效的请求报文后,就误认为客户端又发了一次连接请求,服务端就会想向客户端发出确认的报文,表示同意建立连接。 假如不采用三次握手,那么只要服务端发出确认,表示新的建立就连接了。但是现在客户端并没有发出建立连接的请求,其实这个请求是失效的请求,一切都是服务端在自相情愿,因此客户端是不会理睬服务端的确认信息,也不会向服务端发送确认的请求,但是服务器却认为新的连接已经建立起来了,并一直等待客户端发来数据,这样的情况下,服务端的很多资源就没白白浪费掉了。 采用三次握手的办法就是为了防止上述这种情况的发生,比如就在刚才的情况下,客户端不会向服务端发出确认的请求,服务端会因为收不到确认的报文,就知道客户端并没有要建立连接,那么服务端也就不会去建立连接,这就是三次握手的作用

2025-04-06
TCP断连时四次挥手及需要的原因
2025-04-06 ~ 2025-04-06

TCP断联四次挥手

四次挥手

  • 第一次挥手👋: 客户端进程发出连接释放FIN报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=x,此时,客户端进入FIN-WAIT-1(终止等待1)状态。
  • 第二次挥手👋: 服务端进程收到连接释放FIN报文,发出确认ACK报文,ACK=1,ack=x+1,并且带上自己的序列号seq=y,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。此时,服务端通知高层的应用进程,客户端向服务端的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务端若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。客户端收到服务端的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,在这之前依然可以接收服务端发送过来的最后的数据。
  • 第三次挥手👋: 服务端将最后的数据发送给客户端完成后,就向客户端发送连接释放FIN报文,FIN=1,ack=x+1,此时的序列号为seq=z,此时,服务端就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  • 第四次挥手👋: 客户端接收到服务端的连接释放FIN报文后,必须发出确认报文,ACK=1,ack=z+1,而自己的序列号是seq=x+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。此时服务端收到客户端发送过来的确认报文,就立即撤销自己的传输控制块TCB,进入CLOSED状态,注意此时的TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,客户端没有收到服务端发来的任何数据,证明服务端已正常关闭,此时客户端会撤销相应传输控制块TCB后,进入CLOSED状态。至此,TCP的连接才真正的断开了。(服务端结束TCP连接的时间要比客户端稍微早一些)

为什么TIME_WAIT状态还需要等2*MSL(Max SegmentLifetime,最大分段生存期)秒之后才能返回到CLOSED状态呢?

因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SENT状态到ESTABLISH状态那样),但是我们必须假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

2023-06-18
二层交换机和三层交换机区别
2023-06-18 ~ 2023-06-18

什么是二层与三层交换机?

通常情况下,OSI模型分为七层:应用层,表示层,会话层,传输层,网络层,数据链路层和物理层。

OSI

二层交换机工作于OSI模型的二层(数据链路层),故而称为二层交换机,主要功能包括物理编址、错误校验、帧序列以及流控。 而三层交换机位于三层(网络层),是一个具有三层交换功能的设备,即带有三层路由功能的二层交换机,但它是二者的有机结合,并不是简单地把路由器设备的硬件及软件叠加在局域网交换机上。

2023-06-18
免费arp
2023-06-18 ~ 2023-06-18

免费(Free ARP)的作用是什么

解决方案 A:主机主动使用自己的IP地址作为目标地址发送ARP请求,此种方式称免费ARP。免费ARP有两个方面的作用:

  1. 用于检查重复的IP地址 正常情况下应当不能收到ARP回应,如果收到,则表明本网络中存在与自身IP地址重复的地址。

2.用于通告一个新的MAC地址 发送方换了块网卡,MAC地址变了,为了能够在ARP表项老化前就通告所有主机,发送方可以发送一个免费ARP。