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

[传输层]TCP协议

文章目录

  • 报文格式
  • 连接管理
  • 可靠传输

面向连接的传输层协议
每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
TCP提供可靠有序,不丢不重
TCP是面向字节流的

TCP工作模型:
在这里插入图片描述
发送方有一个缓存,缓存:
1.待发送
2.已发送但未得到确认
接收方也有一个缓存,缓存:
收到但未确认的
不按序到达的

TCP提供全双工的通信方式

报文格式

MSS:Maximum Segment Size,一个TCP报文中最大可携带多少有效数据

在这里插入图片描述
数据偏移:首部长度,4B为单位,有4位,表示TCP首部长度,所以TCP首部长度范围在20B到4*15=60B

连接管理

在这里插入图片描述

三个阶段:
连接建立-数据传送-连接释放

方式:
客服/服务器方式,主动发起连接的叫客户,被动等待连接建立的叫服务器
客户和服务器都是进程

连接建立:
三次握手
有件事不知当讲不当讲 (询问)
当讲你说吧 (确认)
好的,,巴拉巴拉 (对确认再确认)

在这里插入图片描述
ROUND1:
客户端发送连接请求报文段,无应用层数据
SYN=1,seq=x(随机)

ROUND2:
服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据
SYN=1, ACK=1, seq=y(随机), ack=x+1

ROUND3:
客户端为该TCP连接分配缓存和变量,并向服务器返回确认的确认,并可以携带数据
SYN=0,ACK=1,seq=x+1, ack=y+1

SYN洪泛攻击

连接释放:
四次挥手
我说完了
好的那我想说巴拉巴拉
好我也说完了
好的

在这里插入图片描述
ROUND1:
FIN=1, seq=u

ROUND2:
ACK=1, seq=v, ack=u+1

经过ROUND1和ROUND2,已经单方面断开了A到B的连接,A已经不能向B发送数据了,但B还能向A发送数据

ROUND3:
FIN=1, ACK=1, seq=w(w取决于ROUND2之后服务器端又发了多少), ack=u+1

ROUND4:
客户端回一个确认报文段,再等到2MSL(最长报文段寿命)后,连接彻底关闭
ACK=1,seq=u+1,ack=w+1

但是不一定非要首先客户端去释放连接,也可以服务器首先去释放连接,但是发起连接必须要客户端去发起

ACK报文,握手3,挥手2,挥手4,还有数据传输中的确认报文(你传过来一个,我回一个确认报文),这些确认报文,都不消耗序号

可靠传输

网络层提供的是best-effort,不可靠传输,那么传输层,就要用TCP协议实现可靠传输

校验
报文格式里的校验字段

序号
序号字段

确认
确认报文段
如果由于传输速度等原因失序,那么会发送应到达的报文的确认报文,然后发送方收到以后知道失序,重传

重传
TCP的发送方如果在规定时间内没有收到确认,就要重传已发送的报文段,

重传时间,如果过短,就会导致有些报文还没到就要重传
如果过长,网络空闲又过大

自适应算法RTTs(加权平均往返时间)
冗余确认(冗余ACK)

在这里插入图片描述

相关文章:

[传输层]TCP协议

文章目录 报文格式连接管理可靠传输 面向连接的传输层协议 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的 TCP提供可靠有序,不丢不重 TCP是面向字节流的 TCP工作模型: 发送方有一个缓存,缓存: 1.待发送 2…...

Linux(1)编译链接和gcc

1、gcc分布编译链接 (1)预编译 gcc -E main.c -o main.i (2)编译 gcc -S main.i -o main.s (3)汇编 gcc -c main.s -o main.o (4)链接 gcc main.o -o main 执行&#xff1a…...

视频编解码学习7之视频编码简介

视频编码技术发展历程与主流编码标准详解 视频编码技术是现代数字媒体领域的核心技术之一,它通过高效的压缩算法大幅减少了视频数据的体积,使得视频的存储、传输和播放变得更加高效和经济。从早期的H.261标准到最新的AV1和H.266/VVC,视频编码…...

LeetCode 热题 100 19. 删除链表的倒数第 N 个结点

LeetCode 热题 100 | 19. 删除链表的倒数第 N 个结点 大家好,今天我们来解决一道经典的链表问题——删除链表的倒数第 N 个结点。这道题在 LeetCode 上被标记为中等难度,要求删除链表的倒数第 n 个结点,并返回链表的头结点。 问题描述 给你…...

【Java ee初阶】网络编程 UDP socket

网络编程 socket api 是传输层提供的api。 UDP 无连接,不可靠传输,面向数据报,全双工。 TCP 有链接,可靠传输,面向字节流,全双工。 UDP socket api 数据报 DatagrammSocket 代表了操作系统中的socket文…...

旅游推荐数据分析可视化系统算法

旅游推荐数据分析可视化系统算法 本文档详细介绍了旅游推荐数据分析可视化系统中使用的各种算法,包括推荐算法、数据分析算法和可视化算法。 目录 推荐算法 基于用户的协同过滤推荐基于浏览历史的推荐主题推荐算法 亲子游推荐算法文化游推荐算法自然风光推荐算法…...

c语言第一个小游戏:贪吃蛇小游戏08(贪吃蛇完结)

贪吃蛇撞墙和想不开咬死自己 #include <curses.h> #include <stdlib.h> struct snake{ int hang; int lie; struct snake *next; }; struct snake food; struct snake *head; struct snake *tail; int key; int dir; #define UP 1 #define DOWN -1 …...

使用PhpStudy搭建Web测试服务器

一、安装PhpStudy 从以下目录下载PhpStudy安装文件 Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn) 安装成功之后打开如下界面 点击启动Apache 查看网站地址 在浏览器中输入localhost:88,出现如下页面就ok了 二、与Unity交互 1.配置下载文件路径&#xff0c;点击…...

c语言第一个小游戏:贪吃蛇小游戏06

实现贪吃蛇四方向的风骚走位 实现代码 #include <curses.h> #include <stdlib.h> struct snake{ int hang; int lie; struct snake *next; }; struct snake *head; struct snake *tail; int key; int dir; //全局变量 #define UP 1 //这个是宏定义&a…...

Qt应用程序启动时的一些思路:从单实例到性能优化的处理方案

程序启动时优化的价值 在桌面软件开发领域&#xff0c;应用程序的启动过程就像音乐的序曲&#xff0c;决定了用户对软件品质的第一印象。比如首次启动等待超过3秒时&#xff0c;会让大多数用户产生负面看法&#xff0c;而专业工具软件的容忍阈值甚至更低。Qt框架作为跨平台开发…...

【前端三剑客】Ajax技术实现前端开发

目录 一、原生AJAX 1.1AJAX 简介 1.2XML 简介 1.3AJAX 的特点 1.3.1AJAX 的优点 1.3.2AJAX 的缺点 1.4AJAX 的使用 1.4.1核心对象 1.4.2使用步骤 1.4.3解决IE 缓存问题 1.4.4AJAX 请求状态 二、jQuery 中的AJAX 2.1 get 请求 2.2 post 请求 三、跨域 3.1同源策略…...

一文详解Spring Boot如何配置日志

一、写在前面 对于日志文件&#xff0c;相信大家都并不陌生&#xff0c;通过在关键位置打印相关的日志&#xff0c;有利于快速跟踪和定位软件系统运行中存在的问题。 在之前的 Java 实现日志记录的文章中&#xff0c;我们介绍了能实现日志记录的主流框架有 Log4j、Log4j2、Lo…...

Springboot | 如何上传文件

文章目录 1. 核心上传逻辑&#xff1a;FileUploadController2. 使文件系统中的文件可通过 HTTP 访问&#xff1a;WebConfig3. 安全性配置&#xff1a;WebSecurityConfig4. 前端实现&#xff08;这里用的是Angular&#xff09; 在许多应用程序开发中&#xff0c;我们经常需要实现…...

axios结合AbortController取消文件上传

<template><div><input type"file" multiple change"handleFileUpload" /><button click"cancelUpload" :disabled"!isUploading">取消上传</button><div>总进度&#xff1a;{{ totalProgress }}…...

spring中的@Async注解详解

一、核心功能与作用 Async 是Spring框架提供的异步方法执行注解&#xff0c;用于将方法标记为异步任务&#xff0c;使其在独立线程中执行&#xff0c;从而提升应用的响应速度和吞吐量。其主要作用包括&#xff1a; 非阻塞调用&#xff1a;主线程调用被标记方法后立即返回&…...

MyBatis 报错:Column count doesn‘t match value count at row 1 详解与解决

本文适用于使用 MyBatis MySQL 开发中出现 “Column count doesnt match value count at row 1” 报错的朋友&#xff0c;尤其是在批量插入或更新数据时&#xff0c;遇到 XML 映射文件中 insert 标签报错的问题。 一、遇到的问题&#xff1a; 二、错误原因分析 列数与值数量不…...

第四天——贪心算法——种花

1. 题目 有一个花坛&#xff0c;其中0 表示该位置是空的&#xff0c;可以种花。1 表示该位置已经有花&#xff0c;不能种花。 规则&#xff1a;新种的花不能种在相邻的位置&#xff08;即如果某个位置已经种了花&#xff0c;它的左右两个相邻位置不能再种花&#xff09;。给定…...

【人工智能】自然语言编程革命:腾讯云CodeBuddy实战5步搭建客户管理系统,效率飙升90%

CodeBuddy 导读一、产品介绍1.1 **什么是腾讯云代码助手&#xff1f;**1.2 插件安装1.2.1 IDE版本要求1.2.2 注意事项1.2.4 插件安装1.2.4.1 环境安装1.2.4.2 安装腾讯云AI代码助手** 1.2.5 功能介绍1.2.5.1 Craft&#xff08;智能代码生成&#xff09;1.2.5.2 Chat&#xff08…...

麦肯锡110页PPT企业组织效能提升调研与诊断分析指南

“战略清晰、团队拼命、资源充足&#xff0c;但业绩就是卡在瓶颈期上不去……”这是许多中国企业面临的真实困境。表面看似健康的企业&#xff0c;往往隐藏着“组织亚健康”问题——跨部门扯皮、人才流失、决策迟缓、市场反应滞后……麦肯锡最新研究揭示&#xff1a;组织健康度…...

【MySQL】第二弹——MySQL表的增删改查(CRUD)初阶

文章目录 &#x1f393;一. CRUD&#x1f393;二. 新增(Create)&#x1f393;三. 查询(Rertieve)&#x1f4d6;1. 全列查询&#x1f4d6;2. 指定列查询&#x1f4d6;3. 查询带有表达式&#x1f4d6;4. 起别名查询(as )&#x1f4d6; 5. 去重查询(distinct)&#x1f4d6;6. 排序…...

内存、磁盘、CPU区别,Hadoop/Spark与哪个联系密切

1. 内存、磁盘、CPU的区别和作用 1.1 内存&#xff08;Memory&#xff09; 作用&#xff1a; 内存是计算机的短期存储器&#xff0c;用于存储正在运行的程序和数据。它的访问速度非常快&#xff0c;比磁盘快几个数量级。在分布式计算中&#xff0c;内存用于缓存中间结果、存储…...

hz2新建Keyword页面

新建一个single-keywords.php即可&#xff0c;需要筛选项再建taxonomy-knowledge-category.php 参考&#xff1a;https://www.tkwlkj.com/customize-wordpress-category-pages.html WordPress中使用了ACF创建了自定义产品分类products&#xff0c;现在想实现自定义产品分类下的…...

离散制造企业WMS+MES+QMS+条码管理系统高保真原型全解析

在离散型制造企业的生产过程中&#xff0c;库存管理混乱、生产进度不透明、质检流程繁琐等问题常常成为制约企业发展的瓶颈。为了帮助企业实现全流程数字化管控&#xff0c;我们精心打造了一款基于离散型制造企业&#xff08;涵盖单件生产、批量生产、混合生产模式&#xff09;…...

【并发编程基石】CAS无锁算法详解:原理、实现与应用场景

一、什么是CAS&#xff1f; CAS&#xff08;Compare-And-Swap&#xff09; 是现代并发编程的核心算法之一&#xff0c;它通过处理器指令级的原子操作实现线程安全&#xff0c;无需传统锁机制。其核心逻辑可以用一个公式表示&#xff1a; CAS(V, E, N) {if (V E) { // 比较当…...

(自用)Java学习-5.8(总结,springboot)

一、MySQL 数据库 表关系 一对一、一对多、多对多关系设计外键约束与级联操作 DML 操作 INSERT INTO table VALUES(...) DELETE FROM table WHERE... UPDATE table SET colval WHERE...DQL 查询 基础查询&#xff1a;SELECT * FROM table WHERE...聚合函数&#xff1a;COUNT()…...

GOOSE 协议中MAC配置

在 GOOSE&#xff08;Generic Object Oriented Substation Event&#xff09;协议中&#xff0c;主站&#xff08;Publisher&#xff09;发送的 MAC 地址不需要与从站&#xff08;Listener&#xff09;的 MAC 地址一致&#xff0c;其通信机制与 MAC 地址的匹配逻辑取决于 GOOSE…...

机器学习之决策树与决策森林:机器学习中的强大工具

机器学习之决策树与决策森林&#xff1a;机器学习中的强大工具 摘要&#xff1a;本文深入探讨决策树和决策森林在机器学习中的应用优势及其适用场景。决策树凭借其易于配置、原生处理多种数据类型、鲁棒性及可解释性等特点&#xff0c;在小数据集和表格数据处理方面表现卓越。…...

【Redis】谈谈Redis的设计

Redis&#xff08;Remote Dictionary Service&#xff09;是一个高性能的内存键值数据库&#xff0c;其设计核心是速度、简单性和灵活性。以下从架构、数据结构、持久化、网络模型等方面解析 Redis 的设计实现原理&#xff1a; 1. 核心设计思想 内存优先&#xff1a;数据主要存…...

【C++】流(Stream)详解:标准流、文件流和字符串流

【C】流(Stream)详解&#xff1a;标准流、文件流和字符串流 在C编程中&#xff0c;流(Stream)是一个非常重要的概念&#xff0c;它为我们提供了统一的数据输入输出接口。本文将详细介绍C中的三种主要流类型&#xff1a;标准流、文件流和字符串流。 一、标准流(Standard Strea…...

基于 Spring Boot 瑞吉外卖系统开发(十三)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;十三&#xff09; 查询套餐 在查询套餐信息时包含套餐的分类名&#xff0c;分类名称在category表中&#xff0c;因此这里需要进行两表关联查询。 自定义SQL如下&#xff1a; select s.* ,c.name as category_name from setmeal…...