tcp专题

目录

一.TCP的连接建立

1.1面向连接

1.2TCP报文结构

1.3TCP三次握手

1.4TCP的状态变化

1.5为什么必须是三次握手,而不是两次或者四次

二.TCP的连接断开

2.1TCP的"四次挥手

2.2TCP的状态变化

2.3为什么要有TIME_WAIT状态

2.4为什么TIME_WAIT状态的时间是2MSL 


一.TCP的连接建立

1.1面向连接

面向连接:在发送数据前,需要先建立一条点到点的连接

点到点:只有双方进行通信

连接:双方前协商的一系列约定

TCP四元组:

源IP地址源端口号
目标IP地址目的端口号

可以唯一区分和标识一条TCP连接

1.2TCP报文结构

序列号:TCP是基于"字节流"的协议,定义为字节流的编号

确认序列号:发送方发送的下一个字节的序号

头部长度:最短20个字节,变长头部

1.3TCP三次握手

SYN报文:客户端向服务器发送请求建立连接的信号

  1. 客户端发送SYN包:客户端向服务器发送一个SYN包,其中包含客户端的初始序列号以及请求建立连接的标志位。

  2. 服务器回复SYN-ACK包:服务器接收到客户端的SYN包后,会回复一个带有SYN和ACK标志的包,其中SYN标志表示同意建立连接,ACK标志表示确认客户端的SYN包已经收到,同时还会告知自己的初始序列号。

  3. 客户端回复ACK包:最后,客户端会回复一个带有ACK标志的包,其中ACK标志表示确认服务器的SYN-ACK包已经收到,连接已经建立成功。

1.4TCP的状态变化

客户端:

               1.关闭状态: 在发送SYN请求建立连接之后,进入到下一个状态

                2.SYN_SENT :客户端等待服务器返回SYN_ACK报文

                3.建立完成:收到服务器返回的SYN_ACK报文,因为此时客户端指向服务器的会话 已经                      建立完成

               客户端发送给服务器的最后一个ACK报文,是允许携带数据的

服务器:

              1.关闭状态:当服务器应用程序创建一个监听的套接字之后,将进入到下一个状态

              2,Listen(侦听状态):当接收到客户端发送的SYN报文之后,为TCP连接分配缓存空                       间,同时,发送SYN_ACK报文段,进入到下一个状态

              3,SYN_RCVD状态:等待客户端回复ACK,收到之后,将进入到下一个状态

              4,建立完成状态

1.5为什么必须是三次握手,而不是两次或者四次

为什么不是两次握手

为什么不是两次握手

三次握手可以防止旧的重复连接造成混乱

二.TCP的连接断开

2.1TCP的"四次挥手

2.2TCP的状态变化

客户端:

建立完成状态 --- 发送完所有字节流后,携带最后一组字节流的数据段同时将FIN标记位置 1,之后,进入到下一个状态

FIN_WAIT_1 --- 等待服务器回复ACK,收到ACK应答之后,将进入到下一个状态

FIN_WAIT_2 --- 等待服务器发送FIN断开请求,将回复ACK进行确认,进入下一个状态

 TIME_WAIT --- 等待2MSL时间后进入下一个状态

CLOSE --- 关闭状态,断开TCP的连接,释放掉所有TCP连接

服务器:

建立完成状态 --- 收到客户端发送的FIN断开请求后,服务器将回复一个ACK确认报文,之 后,进入到下一个状态

CLOSED_WAIT --- 等待服务器自身字节流的发送,当自身所有字节流传递完毕后,将发送一个 FIN断开请求,之后进入到下一个状态

LAST_ACK --- 等待客户端进行最后的ACK应答,当收到客户端发送的ACK确认报文之后,将进 

 入到下一个状态

CLOSE --- 关闭状态,断开TCP的连接,释放掉所有TCP连接占用的资源

2.3为什么要有TIME_WAIT状态

保证TCP会话可以正常关闭

2.4为什么TIME_WAIT状态的时间是2MSL 

MSL  --  报文最大生存时间

设置为2MSL时间的原因

1,最后一个ACK报文丢失,等待对方重传,一来一回正好两个MSL时间,设置为此,则可以 保证TCP会话的正常断开

2,设置2MSL,足以让两个方向上的数据报都丢弃,再出现新的连接时,不至于被历史报文 造成数据错乱

3,太长也不行,导致资源占用过大

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发者职场“生存状态”大调研报告分析 - 第四版

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

《文献阅读》- 遗传算法作为量子近似优化算法的经典优化器(未完成)

文章目录 标题摘要关键词结论研究背景1.介绍 研究内容、成果3. 量子近似优化算法:基本概念及应用 常用基础理论知识2.相关工作酉矩阵 潜在研究点文献链接 标题 Genetic algorithms as classical optimizer for the Quantum Approximate Optimization Algorithm 参…

linux进阶(脚本编程/软件安装/进程进阶/系统相关)

一般市第二种,以bash进程执行 shelle脚本编程 env环境变量 set查看所有变量 read设置变量值 echo用于控制台输出 类似java中的sout declear/typeset声明类型 范例 test用于测试表达式 if/else case while for 函数 脚本示例 软件安装及进阶 fork函数(复制一个进程(开启一个进…

XMLHttpRequest的readyState状态值

readyState状态值 功能:在Ajax请求与服务器响应中,是通过XMLHttpRequest对象完成。而readyState状态值则是记录XMLHttpRequest对象在这个过程进行变化的状态。 readyState状态值readyState分别有5个状态值 0:请求未初始化:在未点击…

Python爬虫基础之Selenium详解

目录 1. Selenium简介2. 为什么使用Selenium?3. Selenium的安装4. Selenium的使用5. Selenium的元素定位6. Selenium的交互7. Chrome handless参考文献 原文地址:https://program-park.top/2023/10/16/reptile_3/ 本文章中所有内容仅供学习交流使用&…

【LeetCode刷题(数据结构与算法)】:合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的 **思路:定义一个头尾指针置为NULL while循环依次比较两个链表的值的大小 遍历链表 比较完数值大小过后连接到tail的尾部 然后各自的链表的节点的next指针指向下一…

数字秒表VHDL实验箱精度毫秒可回看,视频/代码

名称:数字秒表VHDL精度毫秒可回看 软件:Quartus 语言:VHDL 代码功能: 数字秒表的VHDL设计,可以显示秒和毫秒。可以启动、停止、复位。要求可以存储6组时间,可以回看存储的时间 本资源内含2个工程文件&am…

【AIGC核心技术剖析】Hotshot-XL 一种 AI 文本转 GIF 模型(论文 + 代码:经过训练可与Stable Diffusion XL一起使用)

Hotshot-XL 是一种 AI 文本转 GIF 模型,经过训练可与Stable Diffusion XL一起使用。 Hotshot-XL 可以使用任何经过微调的 SDXL 模型生成 GIF。这意味着两件事: 您将能够使用您可能想要使用的任何现有或新微调的 SDXL 模型制作 GIF。 如果您想制作个性化主题的 GIF,您可以…

【AIGC核心技术剖析】改进视频修复的传播和变压器(动态滤除环境中的物体)

基于流的传播和时空变压器是视频修复(VI)中的两种主流机制。尽管这些组件有效,但它们仍然受到一些影响其性能的限制。以前基于传播的方法在图像域或特征域中单独执行。与学习隔离的全局图像传播可能会由于光流不准确而导致空间错位。此外&…

2023_Spark_实验十八:安装FinalShell

下载安装包 链接:https://pan.baidu.com/s/14cOJDcezzuwUYowPsOA-sg?pwd6htc 提取码:6htc 下载文件名称:FinalShell.zip 二、安装 三、启动FinalShell 四、连接远程 linux 服务器 先确保linux系统已经开启,不然连接不上 左边…

华为eNSP配置专题-VRRP的配置

文章目录 华为eNSP配置专题-VRRP的配置0、参考文档1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、基本终端构成和连接 2.VRRP的配置2.1、PC1的配置2.2、接入交换机acsw的配置2.3、核心交换机coresw1的配置2.4、核心交换机coresw2的配置2.5、配置VRRP2.6、配置出口…

Windows10 Docker 安装教程

Docker Desktop是什么? Docker Desktop是适用于Windows的Docker桌面,是Docker设计用于在Windows 10上运行。它是一个本地 Windows 应用程序,为构建、交付和运行dockerized应用程序提供易于使用的开发环境。Docker Desktop for Windows 使用 …

解决方案|智能制造升级,汽车行业借力法大大电子签进入“快车道”

《“十四五”智能制造发展规划》明确智能制造是制造强国建设的主攻方向,其发展程度直接关乎我国制造业质量水平。发展智能制造对于巩固实体经济根基、建成现代化产业体系、实现新型工业化具有重要作用。 规划明确指出要深入实施智能制造工程,着力提升创…

HBase基础

HBase基础 参考 https://www.bilibili.com/video/BV1bC4y1b7Q1 HBase 简介 定义 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库(k-v)。 数据量越大,优势越明显;数据量小,比较消耗内存,耗资源;数据量大…

【数之道 05】走进神经网络模型、机器学习的世界

神经网络 神经网络(ANN)神经网络基础激活函数 神经网络如何通过训练提高预测准确度逆向参数调整法 (BackPropagation)梯度下降法链式法则增加一层 b站视频连接 神经网络(ANN) 最简单的例子,视…

vue重修【005】自定义路由、插槽

文章目录 版权声明自定义指令指令初识指令中配置项指令语法指令值v-loading指令的封装分析实现 插槽默认插槽插槽默认值具名插槽作用域插槽使用步骤完整案例 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程…

【系统与工具】系统环境——VMware安装系统

文章目录 0.1 安装VMware0.2 下载ubuntu镜像0.3 创建系统实例0.4 安装ubuntu0.5 实例配置项0.5.1 安装VMware tools0.5.2 修改静态IP0.5.3 ssh连接 0.6 克隆0.6.1 克隆实例生成MAC地址 0.6.2 修改静态ip0.6.3 修改主机密码名称 参考:https://blog.csdn.net/m0_51913…

Lua快速入门教程

文章目录 1、Linux安装Lua2、语法练习2.1、变量2.2、循环2.3、函数2.4、数组2.5、迭代器2.6、Table操作2.7、Lua 模块与包2.8、加载机制2.9、Lua 元表(Metatable) 3、Lua 协同程序(coroutine)4、文件IO操作4.1、简单模式4.2、完全模式 5、错误处理 内容来源菜鸟教程&#xff0c…

GO 语言的方法??

GO 中的方法是什么? 前面我们有分享到 GO 语言的函数,他是一等公民,那么 GO 语言中的方法和函数有什么区别呢? GO 语言中的方法实际上和函数是类似的,只不过在函数的基础上多了一个参数,这个参数在 GO 语…

AAOS CarMediaService 服务框架

文章目录 前言MediaSessionCarMediaService作用是什么?提供了哪些接口?如何使用?CarMediaService的实现总结 前言 CarMediaService 是AAOS中统一管理媒体播放控制、信息显示和用户交互等功能的服务。这一服务依赖于android MediaSession框架…