当前位置: 首页 > news >正文

TCP传输---计算机网络

TCP结构

在这里插入图片描述

  • 源端口和目标端口:标识通信的应用程序。
  • 序列号:标记发送的数据段的顺序序号。
  • 确认号 ( ACK):确认接收到的数据序号。
  • 标志位:控制连接状态,包括 SYN(同步)、ACK(确认)、FIN(结束)、RST(重置)等。
  • 窗口大小:表示接收方的缓冲区大小。

TCP三次握手

  1. 第一次握手:客户端发送 SYN
  • TCP头部变化:
    • 源端口 12345,目标端口 80
    • 序列号:随机初始为 1000
    • ACK:0,未确认对方数据
    • 标志位:SYN=1,其余为0,申请连接
    • 窗口大小:65535,本地缓冲区大小
  1. 第二次握手:服务器响应 SYN+ACK
  • TCP头部变化:
    • 源端口 80,目标端口 12345
    • 序列号:随机初始为 2000
    • ACK:1001,告诉对方下次希望接受的序列号
    • 标志位:SYN=1,ACK=1
    • 窗口大小:65535,本地缓冲区大小
  1. 第三次握手:客户端发送 ACK
  • TCP头部变化:
    • 源端口 12345,目标端口 80
    • 序列号:1001
    • ACK:2001,告诉对方下次希望接受的序列号
    • 标志位:ACK=1
    • 窗口大小:65535,本地缓冲区大小
    • 此时如果有数据可以发送数据
客户端                服务器
  | ---- SYN (SEQ=1000) ----> |
  | <--- SYN+ACK (SEQ=2000, ACK=1001) --- |
  | ---- ACK (SEQ=1001, ACK=2001) ----> |

为什么是三次握手

三次握手的核心目的是:客户端和服务器都确认对方的发送能力和自己的接收能力。

为什么两次不行?

1.客户端发送 SYN。
2.服务器发送 SYN+ACK,连接建立。
  • 如果第二次报文丢失,服务器认为连接已建立,但客户端仍在等待,导致连接不可用。
  • 如果网络中有延迟的旧 SYN 包到达服务器,服务器回复 SYN+ACK,但客户端没有第三次 ACK(因为不是新连接),服务器不会误建连接。

为什么不需要四次?

1.客户端 SYN。
2.服务器 ACK。
3.服务器 SYN。
4.客户端 ACK。

第二步和第三步可以合并为 SYN+ACK,没必要分开。

TCP四次挥手

  1. 第一次挥手:客户端发送 FIN
  • TCP 头部变化:
    • 源端口:12345,目标端口:80
    • 序列号:5000(假设当前序列号)
    • 确认号 (ACK):3000(假设已确认服务器的序列号)
    • 标志位:FIN=1, ACK=1
    • 窗口大小:0(不再接收数据)
  1. 第二次挥手:服务器发送 ACK
  • TCP 头部变化:
    • 源端口:80,目标端口:12345
    • 序列号 (SEQ):3000
    • 确认号 (ACK):5001(客户端 SEQ + 1)
    • 标志位:ACK=1
    • 窗口大小:65535
  1. 第三次挥手:服务器发送 FIN
  • TCP 头部变化:
    • 源端口:80,目标端口:12345
    • 序列号 (SEQ):3000
    • 确认号 (ACK):5001
    • 标志位:FIN=1, ACK=1
    • 窗口大小:0
  1. 第四次挥手:客户端发送 ACK
  • TCP 头部变化:
    • 源端口:12345,目标端口:80
    • 序列号 (SEQ):5001
    • 确认号 (ACK):3001(服务器 SEQ + 1)
    • 标志位:ACK=1
    • 窗口大小:65535
客户端                服务器
  | ---- FIN (SEQ=5000) ----> |
  | <--- ACK (ACK=5001) ------ |
  | <--- FIN (SEQ=3000) ------ |
  | ---- ACK (ACK=3001) ----> |

为什么四次挥手

TCP 是全双工协议,连接关闭时需要双方都确认:

  • 自己不再发送数据。
  • 已接收对方所有数据。

为什么三次不行?

1.客户端 FIN。
2.服务器 FIN+ACK(合并确认和关闭)。
3.客户端 ACK。
如果服务器还有数据未发完,合并 FIN+ACK 会导致数据丢失。

为什么四次挥手之后要等2MSL?

在四次挥手中,客户端发送的最后一次 ACK(第四次挥手)可能在网络中丢失。服务器重传 FIN,1MSL 覆盖重传 FIN 的时间,1MSL 覆盖 ACK 的传输时间

TCP传输可靠性保证

  • 前提:三次握手和四次挥手建立 可靠连接
  • 序列号和确认ACK保证有序不丢包
  • 超时重传:重新传送丢失的包
  • 流量控制和拥塞控制:一个保障接收端处理正常;一个控制网络当中的流量

拥塞控制-拥塞发送

在这里插入图片描述

拥塞控制-快恢复

在这里插入图片描述

相关文章:

  • 【C/C++算法】从浅到深学习--- 简单模拟算法(图文兼备 + 源码详解)
  • 基于深度学习的图片识别系统(上)
  • 数据库分类、存储引擎、介绍、Mysql、SQL分类
  • SpringBoot接口防抖(防重复提交)的一些实现方案
  • 【开源宝藏】30天学会CSS - DAY7 第七课 CSS 关键帧打造Preloader 追逐动画
  • search_fields与filterset_fields的使用
  • Linux fority source和__builtin_xxx
  • 每日一题-力扣-2116. 判断括号字符串是否可以变为有效-20250323
  • C语言指针
  • 云原生 | 下一代CI/CD工具,Tekton入门部署指南
  • C++学习:六个月从基础到就业——C++基础语法回顾:控制流语句
  • Spark2 之 Expression/Functions
  • Simple-BEV的bilinear_sample 作为view_transformer的解析,核心是3D-2D关联点生成
  • 穿越之程序员周树人的狂人日记Part3__人机共生纪元
  • Extend module 01:Keyboard
  • 具身系列——NLP工程师切入机器人和具身智能方向
  • LabVIEW液压振动锤控制系统
  • 清华大学.智灵动力-《DeepSeek行业应用实践报告》附PPT下载方法
  • 查询操作是否需要使用事务?
  • 软件测试面试:支付功能如何测试?
  • 南京做网站公司哪家好/企业管理培训机构
  • 政府网站建设规划署/企业产品营销策划推广
  • 域外网站/关键词查询工具包括哪些
  • 做seo网站标题重要吗/网站seo置顶
  • 社区网站的建设/广州seo网站公司
  • 老板办公室装修设计/网站排名seo培训