【网络协议】聊聊TCP的三挥四握

上一篇我们说了网络其实是不稳定的,TCP和UDP其实是两个不同的对立者,所以TCP为了保证数据在网络中传输的可靠性,从丢包、乱序、重传、拥塞等场景有自己的一套打法。

TCP格式

源端口和目标端口是不可缺少的,用以区分到达发送给拿个应用。
序号为了解决数据乱序的问题,解决数据先来后到的顺序问题。,确认序列号是为了保证对方又没有收到,用来重传的。对于TCP来说会努力保证TCP层面数据的可靠性。

接下来就是SYN发起一个连接、ACK是回复、RST是重新连接。FIN是结束连接等。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。

最重要的一个就是流量控制,是通过窗口大小进行设置的,比如发送方和接收方的可以处理的能力。但是处理流量控制之外还有拥塞控制,用以标记当前应该发送的数据速度。所以整体其实就是顺序问题、丢包问题、连接维护、流量控制、拥塞控制
在这里插入图片描述

TCP 的三次握手

三次握手的过程是这样的,
客户端发送:我要建立连接了
服务端:我收到连接了,开始建立
客户端:好的 建立完成。

为什么说一定要三次握手呢,其实网络是不稳定的,二次握手,其实没有办法保证,建立连接。比如A发送了,但是不知道B又没有收到可能会一直发送,假设B收到了,但是发送给A的响应消息可能丢失了A不一定能收到。

为什么三次 四次不行吗 或者 两次不行吗 ?

如果是二次握手。我们可以假设这样一种情况。当第一次请求因为网络延迟而没有及时到达。客户端(超时重发)再次发送建立连接的请求,服务端接收到客户端的请求,响应给客户端。此时 连接建立成功,发送数据结束后关闭连接,但是因为第一次请求因为网络延迟 现在才到达,也就是存在一个时间差,服务端会误以为 客户端会再次建立一个链接。所以会创建一个新的连接。

客户端发送 syn标志的数据包 一次握手-服务端
服务端 发送syn ack标志的数据包 二次握手 客户端
客户端-发送带有带有ack标志的数据包 三次握手 服务端

客户端向服务端报告我要和你建立连接,顺便把我自己的一个发送的能力发给服务器,让服务器知道。服务器判断我是否可以给你创建连接,把我的一个接收的能力返回给客户端,只有三次握手 才能保证 双方的发送能力和接收能力都能达到一个协商的过程,但是因为协议没有100%可靠的,三次就够了,四次也不能保证100%可靠。
在这里插入图片描述
并且TCP也通过包序号来保证数据 如果丢失了,可以重传。
一开始都是CLOSE状态,服务端启动监听某个端口,处于LISTEN状态,客户端发起第一次连接SYN,服务端收到之后返回SYN,ACK处于SY-RCVD状态,客户端收到之后处于ESTABLISHED状态,因为它一发一收成功了,所以服务端也处于ESTABLISHED。

TCP 四次挥手

在这里插入图片描述
首先我们应该梳理一下,四次挥手流程,客户端发送一个FIN终止信号,表示客户端想要断开连接。当客户端FIN信号发送到服务端后,服务端接收到客户端的终止请求,服务端先发送一个ACK信号对客户端的FIN信号的确认。当服务端也想断开连接的时候,服务端也需要发送一个FIN信号给客户端,客户端响应客户端的FIN的确认。所以断开需要分别客户端发送一个FIN和ACK,服务端也需要发送一个FIN和ACK。

四次挥手主动方为什么需要等待2MSL?
首先我们先说一下,主动断开方接收到被动关闭方的FIN的终止信号,会立马发送一个ACK对于被动关闭方的确认,进入TIME_WAIT时间,等到2MSL关闭连接。
你可以解释一下什么MSL嘛?
MSL表示最大报文生存周期,任何报文在网络上存在的最长时间,超过这个时间报文将被废弃。主动关闭方需要等待2MSL是为了 防止最后一次ACK没有被正确的传输到被动关闭方,而被动关闭方,需要发送第三次的FIN信号。

TCP 状态机

状态机说白了就是从一个状态迁移到另一个状态。
在这里插入图片描述

小结

本篇主要介绍创建连接,关闭连接,以及TCP的状态机。

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

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

相关文章

软件测试行情不好,我还是啃下了27K的offer

o “会代码吗?” o “会,Java、Python我都会一些!” o “有没有用代码开发过一些测试工具平台呢?” o “额。。。这个。。。没做过。。。” o “那你回去等消息吧” 软件测试行业发展到今天,测试人员会代码&#x…

牛客网刷题-(6)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

Android [SPI,AutoSerivce,ServiceLoader]

记录一下在Android中使用SPI的过程。 1.项目gralde文件。 plugins {id kotlin-kapt } dependencies {implementation com.google.auto.service:auto-service:1.0-rc7 kapt "com.google.auto.service:auto-service:1.0-rc7" } 这个AutoServ…

linux下安装 Chrome 和 chromedriver 以及 selenium webdriver 使用

1 安装 Chrome yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm2 下载 chromedriver # 进入下载目录 cd soft/crawler_tools# 查看chrome 版本号 google-chrome --version# 在chromedriver下载地址中找到对应版本,下载对…

电脑视频怎么转音频mp3

如果你在电脑上观看视频时喜欢上某个片段的背景音乐,且想将喜欢的背景音乐制作为手机铃声。我是建议你将此视频转换为 MP3 格式,因为 MP3 几乎与所有设备相兼容,让你可以在不同设备上不受限制地去聆听它。那该如何转换呢?无需担心…

目标跟踪ZoomTrack: Target-aware Non-uniform Resizing for Efficient Visual Tracking

论文作者:Yutong Kou,Jin Gao,Bing Li,Gang Wang,Weiming Hu,Yizheng Wang,Liang Li 作者单位:CASIA; University of Chinese Academy of Sciences; ShanghaiTech University; Beijing Institute of Basic Medical Sciences; People AI, Inc 论文链接&…

2023年腾讯云2核4G配置服务器性价比怎么样?

2023年腾讯云2核4G配置服务器性价比怎么样?性价比高!CPU具有100%计算性能,而且双11优惠价一年166元,三年566元,性价比超级高! 2023腾讯云双11优惠活动:轻量2核4G5M服务器166.6元/年,3年566.6元…

达梦:开启sql日志记录

前言 开启sql日志记录,可协助排查定位数据库问题。生产开启会有一定的性能消耗,建议打开 SQL 日志异步刷盘功能 1.配置sqllog.ini文件 sqllog.ini 用于 SQL 日志的配置,当且仅当 INI 参数 SVR_LOG1 时使用。 运行中的数据库实例,可…

GoLong的学习之路(三)语法之运算符

书接上回,我们进展到了GoLong的基本数据类型,接下来说运算符(其实和常见的编程语言的逻辑规则一样) 运算符 运算符用于在程序运行时执行数学或逻辑运算。(不可谓不重要) Go 语言内置的运算符有&#xff…

如何做好建筑翻译呢

近年来,随着跨国工程项目增加,建筑翻译也越来越受到重视。尤其是建筑图纸翻译在工程设计、规划和施工等方面都具有重要意义。那么,如何做好建筑翻译呢,建筑工程翻译哪个比较正规? 在建筑行业日新月异的发展中&#xff…

leetcode第80题:删除有序数组中的重复项 II

题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 …

orb-slam3编译手册(Ubuntu20.04)

orb-slam3编译手册(Ubuntu20.04) 一、环境要求1.安装git2.安装g3.安装CMake4.安装vi编辑器 二、源代码下载三、依赖库下载1.Eigen安装2.Pangolin安装3.opencv安装4.安装Python & libssl-dev5.安装boost库 三、安装orb-slam3四、数据集下载及测试 写在…

javascript原生态xhr上传多个图片,可预览和修改上传图片为固定尺寸比例,防恶意代码,加后端php处理图片

//前端上传文件 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml" lang"UTF-8"></html> <html><head><meta http-equiv"Content-Type" content"text/html;charsetUTF-8;"/><title…

权限系统设计(转载)

1 为什么需要权限管理 2 权限模型 2.1 权限设计 2.2 为什么需要角色 2.3 权限模型的演进 2.4 用户划分 2.5 理想的RBAC模型 3 权限系统表设计 3.1 标准RBAC模型表设计 3.2 理想RBAC模型表设计 4 结语 1 为什么需要权限管理 日常工作中权限的问题时时刻刻伴随着我们&a…

出差学小白知识No5:|Ubuntu上关联GitLab账号并下载项目(ssh key配置)

1 注冊自己的gitlab账户 有手就行 2 ubuntu安装git &#xff0c;并查看版本 sudo apt-get install git git --version 3 vim ~/.ssh/config Host gitlab.example.com User your_username Port 22 IdentityFile ~/.ssh/id_rsa PreferredAuthentications publickey 替换gitl…

Spring Authorization Server 1.1 扩展 OAuth2 密码模式与 Spring Cloud Gateway 整合实战

目录 前言无图无真相创建数据库授权服务器maven 依赖application.yml授权服务器配置AuthorizationServierConfigDefaultSecutiryConfig 密码模式扩展PasswordAuthenticationTokenPasswordAuthenticationConverterPasswordAuthenticationProvider JWT 自定义字段自定义认证响应认…

渗透测试工具-sqlmap使用

sqlmap是一个开源渗透测试的自动化工具&#xff0c;可以自动检测和利用SQL注入漏洞并接管数据库服务器。它配备了一个强大的检测引擎&#xff0c;许多用于终极渗透测试的利基功能&#xff0c;以及广泛的开关&#xff0c;包括数据库指纹识别、从数据库中获取数据、访问底层文件系…

mysql-linux归档版安装

什么是归档版安装&#xff1f;简单来说就是编译好的软件压缩打包版。 说明&#xff1a;我这里服务器之前已经装过一个不同版本的mysql&#xff0c;已经占用了3306端口&#xff0c;所以这里我用3307端口来演示&#xff0c;命令和官方的稍有不同&#xff0c;不过步骤都是差不多的…

MES管理系统解决方案实现生产信息全程追溯

生产制造企业在生产过程中&#xff0c;最令人头疼的问题之一就是产品信息的追溯。当产品出现质量问题时&#xff0c;需要在庞大的数据中寻找出问题批次的产品和同批次的物料&#xff0c;并进行召回处理&#xff0c;这样的工作量十分巨大。为了解决这一问题&#xff0c;许多企业…

树莓派4b,应用窗口/最小化后在任务栏不显示

最近树莓派价格下降&#xff0c;入手了一个树莓派4B 8G版&#xff0c;安装的是64位的官方bullseye系统&#xff0c; 和自己家里吃灰的树莓派2b比较起来&#xff0c;真是香太多&#xff5e; 由于还不熟悉新系统&#xff0c;一不小心把任务栏给删掉了&#xff0c; 重新添加任务栏…