TCP

TCP 简介 什么是 TCP 的三次“握手”?相信大部分人都知道这个面试中常问的面试题,在这篇文章中,我会详细地解释它的细节,到时候你会发现,这是个非常简单的问题。 阅读详情

经常我们会提到TCP/IP协议,其实TCP/IP协议是包含很多协议的合集
就是TCP和IP一起协同工作,TCP负责应用软件和网络软件之间的通信,IP负责计算机之间的通信,网络上的两个终端都遵从同一个协议(比如TCP/IP),才能互相稳定的通信

TCP/IP的主要特点

  • TCP是面向连接的传输层协议,应用程序在使用TCP协议前,必须先建立TCP连接,在数据传输完毕后,必须释放已经建立的TCP连接。
  • TCP连接是点对点的,也就是一对一,和UDP不同的是,UDP可以一对多,多对多
  • TCP是可靠传输,通过TCP传输的数据,不丢失,不乱序,不出错
  • TCP是面向字节流的,不像UDP是面向报文的。TCP把应用层交付下来的数据看成一连串的无结构的字节流,TCP并不知道所传输的字节流的含义。

    那么TCP是怎么做到可靠传输的呢?这其中需要几个机制来保证数据的可靠传输

1.确认机制ACK:接收方显示的告诉发送方分组已经正确接收
2.重传机制
3.校验和:检测位错误
4.序列号:发送方给每个分组增加序列号,解决接收方收到重复分组的问题
5.停等策略:发送方等待“合理”时间,如果没有收到ACK就会重传

停等是一个很浪费时间的事情,所以为了提高资源利用率,引入了流水线机制和窗口滑动协议。

流水线机制允许用户在收到ACK之前连续发送多个分组,那么序列号的范围就要扩大,同时发送方和接收方需要更大的存储空间以缓存分组。

窗口滑动协议(Sliding-Window protocol)顾名思义,随着协议的运行,窗口在序列号空间内向前滑动,窗口尺寸N代表最多有N个等待确认的消息,窗口滑动协议主要有GBN和SR

TCP连接

三次握手和四次挥手
TCP连接过程中解决以下三个问题:

1. 要使每一方能够确认对方的存在;
2. 要允许双方协商一些参数,比如最大窗口值,时间戳选项等;
3. 能够对运输实体资源进行分配。

建立连接
这个过程称为三次握手,南那么为什么要是三次握手,而不是两次握手,一次握手呢?这是为了防止已经失效的连接请求突然又传给了服务端,举例来说吧

比如A要和B建立连接,正常情况下,A发出请求,但是由于丢失没有收到确认,于是A又重传了一次连接请求,然后确认,建立连接数据传输完毕后,释放连接。A一共发送了两个连接报文其中第一个丢失,第二个丢失,没有出现已经失效的连接请求报文段

再来考虑异常情况,如果A发送的连接请求没有丢失而是延时到达B,那么B会以为这是A的又一次握手,于是连接再次简称,然而A并没有数据传输需求,这样B的资源就别白白浪费了。

第一步,客户端发送TCP SYN给客户端,SYN为1,不传输数据
第二步,服务端接收到SYN后,给客户端返回一个SYNACK
第三步,客户端接收到SYNACK后,发送ACK给服务端,可能会传输数据

图解如下:

这里写图片描述

关闭连接

第一步,客户端给服务端发送TCP FIN(多数情况下是客户端发起请求,服务端也可以发起请求)
第二步,服务端收到FIN后,回复ACK,关闭连接,给客户端发送FIN
第三步,客户端收到FIN,回复ACK

为了确保服务端能够正确的关闭并且释放资源,客户端会进入等待阶段,一般建议等待时间设置为2分钟,如果在等待阶段中重复收到FIN,会重新发送ACK

第四步,服务端收到ACK,关闭连接

图解如下:

这里写图片描述

下图表示了一个完整的过程:

这里写图片描述

TCP-BPF :通过BPF定制TCP行为 TCP-BPF :通过BPF定制TCP行为 TCP-BPF是近期由facebook工程师发明,推送到内核的。 它的设计初衷是提供一种新的定制TCP参数和行为的机制。例如可以灵活的修改tcp 缓冲区大小,SYN RTO, SYN-ACK RTO 参数等。那么这种新的机制有什么神奇之处?过去的机制又有何短处?且听下文。 介绍 Linux 本身提供了一些机制可以修改TCP的一些参数。 setsockopt 我们知道当我们建立了socket 之后,可以通过setsockopt 修改一些TCP的参数,例如SO_R 阅读详情

相关推荐

浅谈tcp协议与tcp_tw

既然打开 net.ipv4.tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接,那为什么 Linux 内核默认是关闭状态呢? tcp_tw_reuse 的作用是让客户端很快的复用 time_wait 的端口,相当于跳过了这个状态,所以默认关闭 【如果 TIME_WAIT 状态持续时间过短或者没有,会有什么问题?】 因为开启 tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接时,相当于缩短了 TIME_WAIT 状态的持续时间。 使用

果子哥丶的博客 6539

TCP全连接占满问题

在实际工作中经常碰到一种情况,流量上涨的时候,服务端会出现大量的超时。此时的处理办法一般是扩容。 实际上就算没有流量上涨,当某个接口速度变慢时,调用该接口的服务也会出现超时。 不管是流量上涨(qps增加)还是接口变慢,导致超时的直接原因都是系统吞吐量不足(系统吞吐量 = qps / 响应时间)。 当系统吞吐量不足时,大量请求就会在接口上堆积得不到及时的处理,表现出来就是连接超时或接口超时。 TCP半连接队列和全连接队列 创建tcp连接时需要三次握手。 首先客户端向服务端发送一个连接请求,包含一个SYN包

xiaoyi52的专栏 6225

TCP监视器增强版 一款监视网络状况(如流量、端口、连接网络的进程等)的软件。

一款监视网络状况(如流量、端口、连接网络的进程等)的软件。

服务器tcp连接占满_服务器出现大量TIME_WAIT解决方案

一 、故障原因: 服务器突然出现大量time_wait(因为大量连接资源被占用后不释放的话,会导致网站正常访问不能响应)。如何应对?我这边先检查了监控和服务器当前的状态(time_wait连接确实异常):1、监控2、登录服务器检查二、排查思路:1、猜测是否因为程序打开大量文件句柄,没有关闭导致。(问了研发同事,排查过后没有这种情况)2、调大当前文件句柄 3、调优sysctl.conf文件4、检查n...

weixin_39938855的博客 5050

TCPView监视和管理tcp连接工具

监视和管理电脑所有的tcp连接 非常实用,比如解决端口冲突等问题。

Procedural modeling

What is procedural modeling? One content generation option is modeling buildings, plants, clouds, cities, and worlds using an underlying system of rules. 1 Procedural Modeling: Grammars A rule-based generative system loosely organized as: ...

qq_24505417的博客 711

TCP是百分百可靠的吗?

我们知道,TCP是面向连接的,可靠的传输层协议,那么TCP是100%可靠无缺陷的吗?不是的,

喜码拉雅 3973

ESP32-CAM图传小车:端边协同的嵌入式视觉系统设计

在物联网边缘智能场景中,嵌入式视觉系统需平衡实时性、算力与成本。其核心在于理解图像采集、硬件编码、低延迟传输与分层计算的基本原理——OV2640等CMOS传感器配合JPEG硬件编码可显著降低主控负载;TCP流式协议比HTTP/RTSP更适配资源受限MCU;而‘计算卸载’架构将OpenCV等重负载移至Android端,使ESP32专注实时控制与传输,既发挥FreeRTOS任务调度优势,又规避了PSRAM带宽与内存瓶颈。该模式广泛适用于教育机器人、智能巡检及DIY视觉终端等场景,本文以WiFi图传坦克小车为载体

weixin_42524864的博客 373

监控tcp连接数

tcp

小胡子 419

基于Python实现基于遥感指数的水体提取

基于Python实现基于遥感指数的水体提取

gis收藏家的博客 6146

监控tcp连接

TCP(Transmission Control Protocol)传输控制协议: 提供面向连接的可靠的数据传输、适合传输大数据、速度慢 三次握手: Key的定义:传参形式定义: 获取参数:自定义模板如之前。

weixin_49888561的博客 1154

DOTS 性能基石:为什么传统 Unity 代码难以满足现代游戏需求?(DOTS 系列教程 · 第1篇)

本文探讨了Unity游戏开发中的性能优化问题,指出性能问题不应在最后才考虑,而应贯穿整个开发过程。文章分析了性能问题的三大表现(渲染开销、物理模拟、游戏逻辑),并解释了依赖硬件升级的不可行性。重点剖析了传统Unity代码性能低下的六大根源:垃圾回收卡顿、编译器优化不足、多核利用不足、数据结构和代码缓存不友好、过度抽象等问题。最后指出Unity项目中常见的反模式,如主线程垄断、内存碎片化等,为后续学习DOTS高性能架构解决方案奠定基础。

分享知识,拥抱变化 150

【TCP专题】TCP连接建立

在这里我们整理一些关于TCP协议的知识。这块的内容写起来是非常费劲的,因为本身TCP协议就不是一个简单的协议,它能获得如今的地位,和其复杂且出色的表现是分不开的。

Linkjiee的博客 7522

支付宝h5参数如何实现跳转?(包含相关Demo代码)

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 3245

RK3588芯片:ALSA音频通路下HDMI与耳机自动切换的技术探索

摘要:本文详细探讨了基于RK3588芯片的HDMI与耳机自动切换方案。文章首先剖析了ALSA音频架构的核心组件与工作原理,接着介绍了RK3588芯片的硬件特性及音频处理优势。重点阐述了自动切换的实现原理,包括硬件检测机制、ALSA驱动处理逻辑和软件控制流程,并提供了详细的配置步骤。同时针对常见问题如切换异常、音频质量下降等给出了解决方案。该方案通过合理配置设备树和ALSA文件,实现了音频输出的智能切换,提升了用户体验,展现了RK3588在音频处理领域的强大性能。未来随着AI音频技术的发展,该方案在智能家居、

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 266

TCP报文( tcp dup ack 、TCP Retransmission)

最近因使用FTP 上传数据的时候总是不能成功,抓包后发现 TCP 报文出现与两种类型的包。收集整理下。

神棍之路 1万+

Claude Code 分布式并行开发最佳实践:1中枢+10Worker跨多Git仓库全流程落地

本文介绍了一套基于Claude Code和Git Worktree的分布式并行开发方案,解决多仓库、微服务开发中的核心痛点。方案采用"1个决策中枢+10个并行Worker"架构,中枢负责任务拆解和调度,每个Worker绑定独立仓库实现完全隔离开发。关键优势包括:任务并行效率提升10倍、跨仓库依赖自动编排、版本统一管理、零第三方依赖。文章详细提供了环境准备、架构设计、中枢搭建和初始化脚本等全流程落地指南,特别适合多仓库协同的全栈开发场景。

AI天才研究院 243

[Linux][网络][TCP][一][TCP基础][TCP报头]详细讲解

[Linux][网络][TCP][一][TCP基础][TCP报头]详细讲解

SnowK博客 5434

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TCP Analysis Flags 之 TCP ZeroWindowProbe

实际在 TCP 分析中,关于TCP ZeroWindowProbe 和 ZeroWindowProbeAck当 Seq Num 等于之前下一个期望的 Seq NumTCP 段大小为 1反方向最后一次看到的接收窗口大小为零时设置影响或。具体的代码如下,总的来说这段代码的作用是检测零窗口探测包,并对其做出适当的标记,以便 Wireshark 进行后续的分析和显示。主要检测以下三个条件,如果都满足,则认为是一个零窗口探测数据包。检查 TCP 段长度是否为 1 字节;

7ACE的博客 1757

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TCP Analysis Flags 之 TCP Port numbers reused

实际在 TCP 分析中,关于的定义非常简单,如下,针对 SYN 数据包(而不是SYN+ACK),如果已经有一个使用相同 IP+Port 的会话,并且这个 SYN 的序列号与已有会话的 ISN 不同时设置。注意:官方文档此处说明的是 SYN,而非 SYN/ACK,和实际代码实现的却不一样,下述展开说明。具体的代码如下,主要作用是处理 SYN 以及 SYN/ACK 数据包,判断是新连接还是已有连接的重传,并相应地创建新会话或更新会话的序列号等,并设置相关标志位。

7ACE的博客 3567

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TCP Analysis Flags 之 TCP ZeroWindow

TCP Analysis Flags 之 TCP ZeroWindow

7ACE的博客 2084

解析TCP

TCP

m0_46661757的博客 3497

TCP Analysis Flags 之 TCP Dup ACK

TCP 段大小为 0窗口大小非零且没有改变,或者有有效的 SACK 数据下一个期望的 Seq Num 和 LastACK Num 是非 0 的(即连接已经建立)没有设置 SYN、FIN、RST具体的代码如下,总的来说这段代码的用于准确检测 TCP 重复 ACK 的情况,并记录相关信息以支持后续的重传机制分析,是 TCP 可靠传输的重要组成部分。这段代码的主要逻辑如下,如果所有下述条件均满足,则认为该数据包是一个重复确认包。检查 TCP 段大小是否为 0;检查窗口大小是否不为 0;

7ACE的博客 2025

TCP协议--TCP头部

《Linux高性能服务器编程》阅读笔记:1. TCP协议的概念  TCP和UDP是传输层的两个主要协议。TCP相对于UDP来说,是面向连接、字节流和可靠传输。  (1) 面向连接   使用TCP通信的双方必须先建立起连接,然后才能开始数据的读写。建立连接后双方的系统内核会为该连接分配必要的系统资源,用来管理连接的状态和传输在连接上的数据。TCP连接是全双工的,即双方的读写操作可以在同一连接上执行。

echo_bright_的博客 1万+

TCP通信实现

本文介绍了如何实现TCP通信,以及通过TCP通信引入了通信过程中,每个层协议数据的封包过程,以及封包内容,封包过程,

2301_78622258的博客 2975
上一篇: DNS解析
下一篇: HTTP
codezha
博客等级 码龄10年 28粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值