首页 > 其他分享 >TCP基础了解

TCP基础了解

时间:2024-12-20 22:00:54浏览次数:8  
标签:基础 TCP 发送 了解 服务器 序列号 连接 客户端

什么是 TCP ?

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

  • 面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;

  • 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;

  • 字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。并且 TCP 报文是「有序的」,当「前一个」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复」的 TCP 报文会自动丢弃

用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket、序列号和窗口大小称为连接。

所以我们可以知道,建立一个 TCP 连接是需要客户端与服务端达成上述三个信息的共识。

  • Socket:由 IP 地址和端口号组成

  • 序列号:用来解决乱序问题等

  • 窗口大小:用来做流量控制

TCP 头格式有哪些?

我们先来看看 TCP 头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。

序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。

确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。

控制位:

  • ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1

  • RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。

  • SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。

  • FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段

为什么需要 TCP 协议? TCP 工作在哪一层?

IP 层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP 协议来负责。

因为 TCP 是一个工作在传输层可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

详细来看

TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层协议,以下是关于它的详细介绍:

主要特点

  • 面向连接:在数据传输之前,需先通过三次握手建立连接,数据传输完成后,再通过四次挥手释放连接,确保数据传输的可靠性和顺序性123.
  • 可靠性:通过序号、确认和重传机制来保证数据可靠传输。发送方发送数据后,接收方会发送确认消息,若发送方在一定时间内未收到确认消息,就会重传数据123.
  • 流量控制:采用滑动窗口机制,发送方根据接收方的处理能力动态调整发送数据的速率,防止数据丢失或拥塞,确保接收方能够处理接收到的数据123.
  • 拥塞控制:利用拥塞窗口和慢启动等机制,避免网络拥塞导致数据丢失和网络性能下降,以维护网络的稳定性123.
  • 全双工通信:允许通信双方同时进行数据的发送和接收,提高了通信效率123.
  • 面向字节流:将数据视为无结构的字节流进行传输,没有消息边界的概念,需要应用层协议来解决消息的边界问题123.

工作原理

  • 三次握手建立连接45 :
    • 第一次握手:客户端向服务器发送一个 SYN(Synchronize)包,请求建立连接,并随机生成一个初始序列号,此时客户端进入 SYN_SEND 状态。
    • 第二次握手:服务器收到 SYN 包后,回应一个 SYN+ACK(Synchronize-Acknowledge)包,确认收到客户端的请求,并也随机生成一个初始序列号,同时将客户端的序列号加 1 作为确认号,此时服务器进入 SYN_RECV 状态。
    • 第三次握手:客户端收到服务器的 SYN+ACK 包后,向服务器发送一个 ACK 包,确认收到服务器的响应,将服务器的序列号加 1 作为确认号,此时客户端进入 ESTABLISHED 状态,服务器收到客户端的 ACK 包后,也进入 ESTABLISHED 状态,连接建立成功。
  • 数据传输:连接建立后,发送方将应用层数据分割成合适大小的数据包,并为每个数据包添加 TCP 报头,其中包含序列号等信息,然后通过网络发送给接收方。接收方收到数据包后,根据序列号对数据进行重组和排序,并检查数据的完整性,若数据无误,则向发送方发送确认消息123.
  • 四次挥手释放连接4 :
    • 第一次挥手:客户端发送一个 FIN(Finish)包给服务器,表示自己没有数据要发送了,请求关闭连接,此时客户端进入 FIN_WAIT_1 状态。
    • 第二次挥手:服务器收到 FIN 包后,向客户端发送一个 ACK 包,确认收到客户端的关闭请求,此时客户端进入 FIN_WAIT_2 状态,服务器进入 CLOSE_WAIT 状态。
    • 第三次挥手:服务器处理完剩余数据后,也发送一个 FIN 包给客户端,请求关闭连接,此时服务器进入 LAST_ACK 状态。
    • 第四次挥手:客户端收到服务器的 FIN 包后,向服务器发送一个 ACK 包,确认收到服务器的关闭请求,此时客户端进入 TIME_WAIT 状态,等待一段时间(2MSL,Maximum Segment Lifetime)后,确保服务器收到了 ACK 包,客户端才正式关闭连接,服务器收到客户端的 ACK 包后,立即关闭连接。

TCP 报文格式

一个 TCP 报文段分为首部和数据两部分,其首部格式如下5 :

源端口(16 位)目的端口(16 位)
序列号(32 位)
确认序列号(32 位)
报头长度(4 位)预留(6 位)代码位(6 位)窗口大小(16 位)
校验和(16 位)紧急指针(16 位)
可选项(0 或 32 位)

应用场景

由于 TCP 具有可靠性高、能保证数据顺序等特点,适用于对数据传输质量要求较高的应用,如:

  • 文件传输:如 FTP 协议,可确保文件在网络传输过程中的完整性和准确性,避免文件损坏或丢失123.
  • 电子邮件:如 SMTP、POP3 等协议,保证邮件内容的可靠传递,确保用户能够准确无误地接收和发送邮件123.
  • 网页浏览:HTTP 协议在传输网页数据时,通常基于 TCP 连接,以保证网页的各个元素(如 HTML、CSS、图片等)能够完整、有序地传输到浏览器,呈现出正确的页面内容13.
  • 远程登录:如 Telnet、SSH 等协议,通过 TCP 连接实现用户与远程主机之间的可靠交互,确保命令和数据的准确传输123.

参考:

小林coding 

标签:基础,TCP,发送,了解,服务器,序列号,连接,客户端
From: https://blog.csdn.net/qq_62097431/article/details/144594734

相关文章

  • TCP三次握手,四次挥手
    三次握手第一次握手:客户端向服务器发送一个SYN包,其中SYN标志位被设置为1,表示客户端请求建立连接,并随机生成一个初始序列号seq=x。此时客户端进入SYN_SENT状态,等待服务器的确认1.第二次握手:服务器收到客户端的SYN包后,必须确认客户端的SYN,于是向客户端发送一个SYN......
  • 2024-2025-1 20241403 《计算机基础与程序设计》第十三周学习总结
    2024-2025-120241403《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标结构体的定义结......
  • Java 基础概览
    1.Java语言概述1.1Java简史Java是一种高级程序设计语言,由SUN(StanfordUniversityNetwork,斯坦福大学网络公司)公司于1995年推出,JamesGosling设计Java语言,并开发了Java编译器和Java虚拟机,因此也被人尊称为“Java之父”。SUN公司在2009年被Oracle(甲骨文)收购,此后持续更新,目前......
  • 了解Embeddings
    了解Embeddings什么是EmbeddingsEmbeddings(嵌入)在自然语言处理(NLP)中起着至关重要的作用,它们的主要目的是将高维、离散的文本数据(如单词或短语)转换为低维、连续的向量表示。这些向量不仅编码了词本身的含义,还捕捉到了词语之间的语义和句法关系。通过embeddings,原本难以直接......
  • 2024-2025-1 20241320 《计算机基础与程序设计》第13周学习总结
    2024-2025-120241320《计算机基础与程序设计》第13周学习总结作业信息|这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13|这个作业的目标|加入云班课,参考本周学习资源自学教材《C......
  • 量化分析选优质基金零基础入门
       一、基金量化分析的定义基金量化分析是指运用数学模型、统计方法和计算机技术对基金的各方面特征进行量化评估的过程。它涵盖了基金的业绩表现、风险水平、资产配置、投资风格等多个维度。业绩表现分析包括计算基金的各种收益率指标,如简单收益率、累计收益率、......
  • 【C++基础】03、表达式 (判断语句与循环语句)
            一、判断语句        1.if 语句        2.switch 语句二、循环语句        1.for循环        2.while循环        3.do-while循环一、判断语句1.if 语句if语句是最基本的条件语句,它允许程序根据条......
  • 转行AI产品经理,零基础也能轻松入门教程(非常详细),AI产品经理入门到精通,收藏这一篇就够了
    2024年,还有什么新风口?AI、元宇宙、NFT…很多人不知道,其实不管是元宇宙还是NFT,它们本质上就是人工智能领域。AI自身应用领域非常广泛,大批高薪岗位随之涌了出来,包括AI产品经理。AI产品经历具体工作内容是什么?薪资有多香?普通人如何进入AI人工智能行业?需要写代码吗?别急,小......
  • 大模型零基础教程(非常详细),大模型入门到精通,收藏这一篇就够了!
    什么是大模型大模型,是指在人工智能领域,特别实在自然语言处理和机器学习中,拥有大量参数的深度学习模型。这些模型通过在大规模数据集上进行训练,能够学到丰富的数据表示和模式,从而在各种任务上表现出色,如文本生成,语言理解,图像识别等。大模型是具有大量参数和复杂结构的模型......
  • AI产品经理基础教程(非常详细),AI产品经理入门到精通,收藏这一篇就够了!
    作为一个非算法出身的AI产品经理,转行之前我也有过纠结和顾虑,怕自己“干不了”。在做了3年AI产品之后,我的结论是:现如今大模型跑步落地的时期,存在很多信息差,非常适合“乱入”。当下转行AI产品经理的优势市场需求大,行业发展前景广阔从chatgpt问世以来,AI技术的发展是有目共......