计算机网络知识点全梳理(三.TCP知识点总结)

news2024/12/16 6:42:29

目录

TCP基本概念

为什么需要TCP

什么是TCP

什么是TCP链接

如何唯一确定一个 TCP 连接

TCP三次握手

握手流程

为什么是三次握手,而不是两次、四次

为什么客户端和服务端的初始序列号 ISN 不同

既然 IP 层会分片,为什么 TCP 层还需要 MSS 

TCP四次挥手

挥手流程

为什么挥手需要四次 

为什么TCP挥手需要有TIME WAIT状态

除了四次挥手还有什么方法能断开连接

TCP重传机制

超时重传

快速重传(Fast Retransmit)

TCP滑动窗口

TCP拥塞控制

TCP与UDP

TCP和UDP区别

TCP和UDP的应用场景 


TCP基本概念

为什么需要TCP

IP层本身不具备可靠性特性,它不确保数据包的送达、顺序或完整性。为了实现网络数据包的可靠传输,必须依赖传输层的TCP协议。TCP提供了一种可靠的传输服务,确保数据包在接收端无损、连续、无重复且按正确顺序到达。

什么是TCP

TCP是一种面向连接、可靠且基于字节流的传输层通信协议。其特点包括:

  • 面向连接:TCP建立的连接是点对点的,不支持一对多的广播式通信,这与UDP的多播能力形成对比。
  • 可靠性:TCP能够在各种网络条件下确保数据包的送达,即使在网络链路变化的情况下也能保证数据的完整传输。
  • 字节流:TCP传输的数据是连续的字节流,没有明确的边界,因此可以传输任意大小的消息。此外,TCP保证数据的顺序性,只有当所有前序数据都到达后,才会将数据传递给应用层,并能自动丢弃重复的数据包。

什么是TCP链接

RFC 793定义了「连接」的概念:

它涉及一系列状态信息,这些信息共同确保了通信的可靠性和流量控制。这些状态信息包括套接字(Socket)、序列号和窗口大小。因此,建立一个TCP连接需要客户端和服务器就这些关键信息达成一致。

  • 套接字(Socket):由IP地址和端口号组成,用于标识通信的两端。
  • 序列号:用于解决数据包乱序问题,确保数据的正确排序。
  • 窗口大小:用于流量控制,调节数据传输速率以避免接收方过载。

如何唯一确定一个 TCP 连接

TCP连接可以通过一个四元组唯一标识,该四元组包含以下元素:

  • 源地址:标识发送方的IP地址。
  • 源端口:指定发送方的应用程序端口。
  • 目的地址:标识接收方的IP地址。
  • 目的端口:指定接收方的应用程序端口。

源地址和目的地址(各32位)位于IP头部,负责通过IP协议将数据包发送到目标主机。源端口和目的端口(各16位)位于TCP头部,用于指示TCP协议将数据包转发给正确的进程。

TCP三次握手

握手流程

TCP三次握手(Three-Way Handshake)是建立一个可靠的、面向连接的通信会话的过程。它确保了两端的发送和接收能力都是就绪的,从而可以开始数据传输。以下是TCP三次握手的详细步骤:

  1. SYN:初始的同步步骤。客户端发送一个带有SYN(同步序列编号)标志的TCP段到服务器,以初始化一个连接。这个SYN段包含客户端的初始序列号(ISN),用于确保数据传输的可靠性。

  2. SYN-ACK:同步和确认步骤。服务器收到客户端的SYN段后,如果同意建立连接,会回复一个带有SYN和ACK(确认应答)标志的TCP段。这个SYN-ACK段包含了服务器的初始序列号,同时也确认了客户端的SYN段。

  3. ACK:最终的确认步骤。客户端收到服务器的SYN-ACK段后,会发送一个带有ACK标志的TCP段作为响应。这个ACK段确认了服务器的SYN段,完成三次握手过程。

三次握手完成后,客户端和服务器都确认了对方的发送和接收能力,一个稳定的TCP连接就建立了。这个过程不仅确保了连接的可靠性,还防止了过时的连接请求突然传送到服务器,从而避免了潜在的错误。

为什么是三次握手,而不是两次、四次

TCP三次握手的原因可以从以下三个方面进行分析:

  • 防止历史连接的重复初始化:这是三次握手的主要原因。RFC 793指出,三次握手的核心目的是防止旧的重复连接请求导致混乱。在网络环境中,数据包可能会因网络拥堵等原因延迟到达,甚至比新的数据包先到达目标主机。三次握手通过序列号和上下文信息,使客户端能够识别并终止历史连接,避免因旧的连接请求而建立不必要的连接。

  • 同步双方的初始序列号:TCP通信双方必须维护一个序列号,这是可靠传输的关键。序列号的作用包括:去除重复数据、按序接收数据包、标识已接收的数据包。因此,当客户端发送带有初始序列号的SYN报文时,需要服务器的ACK响应来确认接收;同样,服务器发送初始序列号时也需要客户端的确认。三次握手确保了双方的初始序列号被可靠同步。

  • 避免资源浪费:三次握手减少了不必要的资源开销。如果使用两次握手,将无法防止历史连接的建立,可能导致资源浪费,并且无法可靠同步双方的序列号。而四次握手虽然也能同步序列号,但三次握手已经是最少的可靠连接建立步骤,因此没有必要增加通信次数。

总结:TCP通过三次握手防止历史连接的建立,减少双方不必要的资源开销,并帮助双方同步初始序列号。序列号确保数据包不重复、不丢失且按序传输。不使用两次握手和四次握手的原因在于:两次握手无法防止历史连接的建立和资源浪费,也无法可靠同步序列号;而三次握手已经是最少的可靠连接建立步骤,无需更多的通信次数。

为什么客户端和服务端的初始序列号 ISN 不同

为了避免旧连接的残留报文干扰新连接,每次建立TCP连接时都会重新初始化一个新的序列号。这样做的主要目的是:

  • 区分报文:通过为每个新连接分配一个独特的序列号,通信双方可以准确识别并丢弃不属于当前连接的报文段,从而避免数据错乱。

  • 增强安全性:防止恶意用户伪造具有相同序列号的TCP报文,并使其被对方接收。独特的序列号使得攻击者难以预测有效的序列号,从而提高了连接的安全性。

既然 IP 层会分片,为什么 TCP 层还需要 MSS 

首先先解释两个概念:

  • MTU(Maximum Transmission Unit):指一个网络包的最大长度,以太网中通常为1500字节。

  • MSS(Maximum Segment Size):指除去IP和TCP头部后,一个网络包所能容纳的TCP数据的最大长度。

如果TCP报文(头部+数据)交给IP层进行分片,可能会导致以下问题:

  • IP层分片的隐患:当IP层需要发送的数据超过MTU时,它会将数据分片成多个小于MTU的片段。目标主机的IP层负责重组这些片段后再交给TCP层。然而,如果其中一个IP分片丢失,整个IP报文的所有分片都需要重传,因为IP层本身没有超时重传机制,这由TCP层负责。

  • TCP层的重传效率:当接收方发现TCP报文(头部+数据)的某一分片丢失时,不会发送ACK给发送方。发送方的TCP层在超时后会重传整个TCP报文(头部+数据),这导致IP层分片传输效率低下。

因此,为了提高传输效率,TCP协议在建立连接时通常会协商双方的MSS值。当TCP层发现数据超过MSS时,它会先进行分片,确保形成的IP包长度不会超过MTU,从而避免IP层分片。通过TCP层分片,如果一个TCP分片丢失,重发时以MSS为单位进行,而不需要重传所有分片,显著提高了重传效率。

TCP四次挥手

挥手流程

 

TCP四次挥手(Four-Way Handshake)是终止一个TCP连接的过程。它确保了数据的完整性,并允许双方有序地关闭连接。以下是TCP四次挥手的详细步骤:

  1. FIN:当一方(通常是客户端)完成数据发送并希望关闭连接时,它会发送一个带有FIN(结束)标志的TCP段。这个FIN段表示发送方已经没有更多数据要发送了,但它仍然可以接收数据。

  2. ACK:接收方(通常是服务器)收到FIN段后,会发送一个带有ACK(确认)标志的TCP段作为响应。这个ACK段确认了FIN段的接收,但此时连接尚未完全关闭,因为接收方可能还有数据要发送。

  3. FIN:当接收方也完成数据发送并准备好关闭连接时,它会发送一个带有FIN标志的TCP段。这表示接收方也没有更多数据要发送了。

  4. ACK:最后,发送方收到第二个FIN段后,会发送一个带有ACK标志的TCP段作为响应,确认FIN段的接收。此时,连接正式关闭。

四次挥手确保了双方都有机会发送完所有数据,并确认对方已经接收完所有数据。这个过程允许TCP连接优雅地关闭,避免了数据丢失或不完整的情况。四次挥手的目的是:

  • 确保双方都明确知道对方已经没有数据要发送。

  • 避免连接突然中断导致的数据丢失。

  • 允许双方在关闭连接前完成所有必要的数据传输和确认。

为什么挥手需要四次 

从挥手过程可以看出,服务器通常需要时间来完成数据的发送和处理,因此服务器的ACK和FIN包通常分开发送。这导致了四次挥手比三次握手多了一次交互。这种设计确保了双方都有机会完成数据传输,并确认对方已经接收完所有数据,从而优雅地关闭TCP连接。

为什么TCP挥手需要有TIME WAIT状态

  • 确保最终的ACK被成功接收:在TCP四次挥手过程中,主动关闭连接的一方在发送最后一个ACK确认包后,会进入TIME_WAIT状态。如果这个ACK丢失,被动关闭连接的一方未收到确认,会重发FIN报文。主动关闭的一方在TIME_WAIT状态下保持一段时间,以便能够重发ACK,确保连接正确关闭。

  • 防止旧的重复分段干扰新连接:TCP连接关闭后,可能会有延迟或失效的报文仍在网络中传输。如果立即使用相同的IP地址和端口建立新连接,可能会受到这些旧报文的干扰。TIME_WAIT状态确保旧连接的所有报文都超时失效后,才允许新连接使用相同的IP地址和端口,避免数据混乱。

除了四次挥手还有什么方法能断开连接

  • RST(Reset):TCP RST标志用于立即强制终止连接。发送方通过发送带有RST标志的TCP报文,指示接收方立即断开连接。

  • 超时(Timeout):如果连接在设定的超时时间内未传输任何数据包,连接双方可以自动断开连接。

TCP重传机制

TCP实现可靠传输的关键机制之一是序列号和确认应答。当数据到达接收端时,接收端会返回确认应答消息。然而,网络环境复杂,数据传输可能遇到问题,如数据包丢失。为此,TCP采用了多种重传机制来应对数据丢失。

超时重传

发送数据时,TCP设置一个定时器。如果在指定时间内未收到对方的ACK确认应答,将重发数据。超时重传适用于数据包丢失或确认应答丢失的情况。

  • 超时时间(RTO):RTO(Retransmission Timeout)是超时重传时间的指标。RTO的设置应略大于报文往返时间(RTT),以确保重传机制的效率。

  • RTO设置的影响:如果RTO过长,重传会延迟,影响性能;如果RTO过短,可能导致不必要的重传,增加网络拥塞。

快速重传(Fast Retransmit)

快速重传机制不依赖时间,而是基于数据驱动的重传。

  • 当发送端收到三个相同的ACK报文时,会在定时器过期前重传丢失的报文段。

  • 快速重传解决了超时时间的问题,但面临另一个问题:重传时应选择重传丢失的单个报文段还是所有报文段。

此外,TCP还使用了其他机制如选择性确认(SACK)和重复选择性确认(D-SACK)来提高重传的效率和准确性。这些机制共同确保TCP能够在各种网络条件下实现可靠的传输。

TCP滑动窗口

在网络环境中,数据传输速率需要灵活调整以适应网络条件。发送方需要掌握接收方的处理能力,以避免过量发送数据导致接收方无法及时处理。

TCP的滑动窗口机制正是为了解决这一问题,它实现了流量控制。通过这一机制,接收方可以通知发送方其缓冲区的可用空间,发送方则根据这些信息调整数据的发送速率。滑动窗口的核心功能是平衡发送方和接收方的数据传输速率,防止发送方发送的数据超出接收方的处理能力,从而避免接收方缓冲区溢出。

此外,滑动窗口机制允许发送方在未收到上一个数据包的确认(ACK)的情况下,继续发送多个数据包。这种做法提高了网络的吞吐量,减少了因等待确认而产生的延迟,从而实现了更高效的数据传输。

TCP拥塞控制

TCP拥塞控制是一组机制,旨在防止网络过载,同时最大化网络资源的利用效率。它通过动态调整数据传输速率来适应网络条件,确保网络不会因过多的未确认数据而发生拥塞。拥塞控制的核心在于拥塞窗口(Congestion Window, cwnd),它限制了未被确认的报文段的数量。

  • 慢启动(Slow Start):在连接建立初期,发送方以较慢的速度增加数据发送速率。拥塞窗口(cwnd)从一个最大报文段大小(MSS)开始,每次收到ACK后成倍增加,直到达到预设的慢启动阈值(ssthresh)或检测到网络拥塞迹象。

  • 拥塞避免(Congestion Avoidance):一旦cwnd达到ssthresh,TCP进入拥塞避免阶段,cwnd的增长模式从指数增长变为每个往返时间(RTT)增加一个MSS的线性增长。这一阶段的目的是温和地探测网络容量,以维持网络的稳定性。

  • 快速重传(Fast Retransmit):当发送方收到三个或更多重复的ACK时,它会立即重传疑似丢失的报文段,而不必等待超时。这一机制减少了重传延迟,加快了对数据丢失的响应。

  • 快速恢复(Fast Recovery):在执行快速重传后,TCP不会回到慢启动状态,而是将cwnd减半至ssthresh,并开始线性增长cwnd,以迅速恢复到丢包前的传输速率。这种方法允许TCP更快地从丢包事件中恢复,同时避免了不必要的性能下降。

TCP与UDP

TCP和UDP区别

  • 连接性:TCP是面向连接的协议,数据传输前必须建立连接;UDP无需建立连接,可立即传输数据。

  • 服务模式:TCP提供一对一服务,每条连接仅连接两个端点;UDP支持一对一、一对多、多对多的通信模式。

  • 可靠性:TCP提供可靠的数据传输,确保数据无误差、不丢失、不重复且按序到达;UDP尽力而为的传输,不保证数据的可靠交付。

  • 拥塞控制与流量控制:TCP具备拥塞控制和流量控制机制,以确保数据传输的稳定性;UDP缺乏这些机制,即使网络拥堵,也不会影响UDP的发送速率。

  • 头部开销:TCP头部长度较长,通常为20字节,若使用选项字段则更长;UDP头部固定为8字节,开销较小。

  • 传输方式:TCP流式传输,无边界,但保证数据顺序和可靠性;UDP分包传输,有边界,但可能导致数据包丢失和乱序。

  • 分片处理:TCP数据大于最大段大小(MSS)时,在传输层分片,接收端在传输层重组。若分片丢失,仅需重传丢失的分片;UDP数据大于最大传输单元(MTU)时,在IP层分片,接收端在IP层重组。若分片丢失,实现可靠传输的UDP需重传所有数据包,效率较低。因此,UDP报文通常应小于MTU。

TCP和UDP的应用场景 

TCP:由于其面向连接的特性以及对数据可靠交付的保证,TCP常用于需要高可靠性的应用,如:

  • FTP:文件传输协议,需要确保文件数据的完整性和顺序。

  • HTTP/HTTPS:超文本传输协议及其安全版本,用于网页浏览,要求数据的准确传输。

UDP:由于其无连接的特性,能够即时发送数据,且处理简单高效,UDP常用于以下场景:

  • 数据包总量较少的通信:DNS(域名系统)和SNMP(简单网络管理协议),这些应用对实时性要求高,而对数据丢失的容忍度也较高。
  • 多媒体通信:如视频和音频流,这些应用需要快速传输,即使偶尔丢包也不会显著影响用户体验。
  • 广播通信:UDP支持一对多的广播通信,适用于需要向多个接收者发送相同数据的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2260358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)

分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者,我总喜欢翻看各种项目附带的论文,虽然大多时候是瞎研究,但却乐在其中。该项目能够完美保留公式、图表、目录和注释,对于需要阅读外文文献的…

前端成长之路:CSS元素显示模式

元素显示模式 网页中的标签非常的多,在不同的地方会使用到不同类型的标签,了解这些标签的特点可以更好的布局我们的网页。 元素显示模式就是元素(标签)按照什么方式进行显示,比如:div标签会自己独占一行&a…

如何在 Ubuntu 22.04 上使用 vnStat 监控网络流量

简介 vnStat是一个免费的、开源的、基于控制台的Linux操作系统网络流量监控工具。通过vnStat,你可以在不同的时间段监控网络统计数据。它简单、轻量级,并且消耗的系统资源很小。vnStat允许你按小时、日、月、周和日生成网络流量数据。本教程将向你展示如…

解决pip下载慢

使用pip下载大量安装包,下载速度太慢了 1、问题现象 pip安装包速度太慢 2、解决方案 配置国内源 vi /root/.config/pip/pip.conf[global] timeout 6000 index-url https://mirrors.aliyun.com/pypi/simple/ trusted-host mirrors.aliyun.com

RabbitMQ中的Publish-Subscribe模式

在现代分布式系统中,消息队列(Message Queue)是实现异步通信和解耦系统的关键组件。RabbitMQ 是一个功能强大且广泛使用的开源消息代理,支持多种消息传递模式。其中,Publish/Subscribe(发布/订阅&#xff0…

专业140+总分410+浙江大学842信号系统与数字电路考研经验浙大电子信息与通信工程,真题,大纲,参考书。

考研落幕,本人本中游211,如愿以偿考入浙江大学,专业课842信号系统与数字电路140,总分410,和考前多次模考预期差距不大(建议大家平时做好定期模考测试,直接从实战分数中,找到复习的脉…

Unity类银河战士恶魔城学习总结(P178 Archer s arrow 弓箭手的箭)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节制作了一个弓箭手的箭 Arrow_Controller.cs 1.OnTriggerEnter2D方法 功能:检测箭矢与其他对象的碰撞。逻辑&#xff1…

后端接受前端传递数组进行批量删除

问题描述:当我们需要做批量删除功能的时候,我们循环单次删除的接口也能进行批量删除,但要删除100条数据就要调用100次接口,或者执行100次sql,这样系统开销是比较大的,那么我们直接采用接收的数组格式数据sq…

ByteCTF2024

wp参考: 2024 ByteCTF wp 2024 ByteCTF WP- Nepnep ByteCTF 2024 writeup by Arr3stY0u 五冠王!ByteCTF 2024 初赛WriteUp By W&M ByteCTF 2024 By W&M - W&M Team ByteCTF Re WP - 吾爱破解 - 52pojie.cn 2024 ByteCTF - BediveRe_R…

Envoy 服务发现原理大揭秘与核心要点概述

1 Envoy动态配置介绍 动态资源,是指由envoy通过xDS协议发现所需要的各项配置的机制,相关的配置信息保存 于称之为管理服务器(Management Server )的主机上,经由xDS API向外暴露;下面是一个 纯动态资源的基…

转盘抽奖功能(附加代码)

写在开头 上期代码主要实现PC端电商网站商品放大效果,本期就来实现积分随机抽奖效果,开发久了很多功能都是通过框架组件库来完成,但是如果组件满足不了开发需求,还需要开发人员手动封装组件,专门出这样一期文章&#x…

【CSS in Depth 2 精译_075】12.2 Web 字体简介 + 12.3 谷歌字体的用法

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体 ✔️12.3 谷歌字体 ✔️12.…

ARM嵌入式学习--第七天(GPT)

GPT -介绍 GPT有一个32位向上计数器,定时计数器值可以使用外部引脚上的事件捕获到寄存器中,捕获触发器可以被编程为上升沿和下降沿。GPT还可以在输出比较引脚上生成事件,并在定时器达到编程值时产生中断。GPT有一个12位预分频器,…

搭建Tomcat(一)---SocketServerSocket

目录 引入1 引入2--socket 流程 Socket(应用程序之间的通讯保障) 网卡(计算机之间的通讯保障) 端口 端口号 实例 client端 解析 server端 解析 相关方法 问题1:ServerSocket和Socket有什么关系? ServerSocket Soc…

SpringBoot快速使用

一些名词的碎碎念: 1> 俩种网络应用设计模式 C/S 客户端/服务器 B/S 浏览器/服务器 俩者对比: 2> 集群和分布式的概念 集群: 分布式: 例子: 一个公司有一个人身兼多职 集群: 招聘N个和上面这个人一样身兼多职 分布式: 招聘N个人,分担上面这个人的工作,进行工作的拆分. 工…

【含开题报告+文档+PPT+源码】基于SpringBoot的开放实验管理平台设计与实现

开题报告 设计开放实验管理平台的目的在于促进科学研究与教学的融合。传统实验室常常局限于特定地点和时间,而开放平台可以为学生、教师和研究人员提供一个便捷的交流与共享环境。通过在线平台,他们可以分享实验资源、交流经验,从而促进科学…

分布式 漏桶算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & 漏桶算法 & 总结》《分布式 & 漏桶算法 & 问题》 概述 简介 LBA Leaky Bucket Algorithm 漏桶算法是一种流行于网络通信领域的流量控制/频率限制算法。漏桶算法的核心原理是通过一个概念上的“漏桶”来…

linux glances vs top

一、安装 apt-get install glances glances top显示效果:

CTF知识集-PHP特性

title: CTF知识集-PHP特性 写在开头可能会用到的提示 call_user_func 调用的函数可以不区分大小写preg_match过滤存在长度溢出,长度超过100w检测失效。str_repeat(‘show’,250000); 生成100w个字符preg_match是无法处理数组的,例如:preg_match( n u m…

Hadoop运行Mapreduce问题集锦——Ubuntu虚拟机配置

一、端口访问问题 问题描述 运行任务前一直重连。具体来说,错误发生在尝试从czs-virtual-machine虚拟机的127.0.1.1地址连接到同一台机器的8032端口时,连接被拒绝。 如下: 2024-11-17 23:05:45,800 INFO retry.RetryInvocationHandler: java…