TCP三次握手过程

什么是TCP

tcp是一个面向连接的、可靠的、基于字节流的传输层通信协议

  • 面向连接:TCP连接是一对一的,不能实现一对多或多对一,TCP在通信前要首先建立连接,连接成功后才能开始进行通信
  • 可靠的:TCP连接要保证通信过程的可靠性,所谓可靠性是指TCP能够检查比特错误并纠正比特错误,同时能够对丢包、失序情况作出一定的应对。
  • 基于字节流:

为什么需要TCP

由于下层网络层(IP层)不保证网络包的交付、按序交付和数据的完整性,因此需要TCP协议在运输层保证数据传输的可靠性。

TCP报文头格式

各字段作用:

  • 序列号:连接建立时该值是随机初始化的。其后在数据传输过程中,TCP 连接中传送的数据流中的每一个字节都编上一个序号,而序号字段的值则指的是本报文段所发送的数据的第一个字节的序号,以保证数据传输过程中不乱序。用来解决网络包的失序问题
  • 确认应答号:指期望收到对方的下一个报文段的数据的第一个字节的序号,发送端在收到确认应答后可认为在该序号之前的数据都已经被接收端正常接收。用以解决网络丢包的问题
  • 控制位:
    • ACK,该位为1时,确认应答号有效
    • SYN,该位为1,连接建立号,建立TCP连接所使用特殊字段,该位为1表示希望建立连接
    • FIN,同SYN字段的作用,是TCP断开连接时需要的特殊字段,该位为1表示希望断开连接
    • RST,该位为1,表示出现异常情况,需要强制断开连接
  • 源端口与目的端口:用于告诉TCP协议应该把网络数据包交给哪个进程
  • 首部长度:指出TCP报文的首部长度,单位为4字节,取值范围为0~15,故而TCP报文段的首部长度最大为60字节,固定字段为20字节,因此选项部分最大为40字节

如何确定一个TCP连接

一个TCP四元组可以确定一个TCP连接,其四元组组成为:

其中,源地址与目的地址在IP头部中,作用是将数据包通过IP协议发送给主机

源端口与目的端口存在于TCP头部中,作用是告诉TCP协议应该把报文发送给哪个进程

TCP建立连接的过程

TCP在通信前需要首先通过三次握手建立连接,之后才能进行通信,其过程如下:

  • 第一次握手:客户端发送SYN报文段,在tcp头部中,置SYN=1,并随机初始一个seq序号,但不携带任何数据。表示客户端要建立连接
  • 第二次握手:服务端收到客户端发来的链接请求后,在tcp头部中,置SYN=1,也随机初始化一个服务端的序号seq放入tcp头部,同时置ACK=1,对客户端也响应一个确认号ack放入头部,该阶段同样不携带数据。表示服务端同意建立连接
  • 第三次握手:客户端收到服务端的同意链接请求报文,此时服务端已经做好了要连接并发送数据的准备,要对服务端发送一个确认报文。在tcp头部中,置ACK=1,但SYN=0,且此后的数据传输过程中SYN都等于0,同时对服务端的序号响应一个确认号,在该阶段,客户端可以携带数据发送给服务端

参考:
4.1 TCP 三次握手与四次挥手面试题 | 小林coding (xiaolincoding.com)

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

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

相关文章

iOS 版 ONLYOFFICE 文档 v7.4已更新!

iOS 版 ONLYOFFICE 文档 v7.4已更新 全新版本的免费 ONLYOFFICE 文档管理与编辑应用现已在 iOS 设备上推出。继续阅读以了解有关本次更新的信息,也可以在本文中找到应用的下载链接。 关于 ONLYOFFICE 文档 ONLYOFFICE 文档是一款适合手机与平板电脑的移动端应用套件…

springboot中@Builder注解的详细用法实例,跟数据库结合。

在Spring Boot中,Builder注解是Lombok库提供的一个注解,用于生成带有Builder模式支持的构造器方法。通过Builder注解,可以简化对象的创建过程,特别适用于需要设置多个属性的情况。 下面是一个使用Builder注解的示例: …

基于python的FMCW雷达工作原理仿真

这篇文章将介绍如何使用python来实现FMCW工作原理的仿真,第1章内容将介绍距离检测原理,第2章内容会介绍速度检测原理。 第1章 第1部分: 距离检测原理 调制的连续波雷达通常也被叫做调频连续波(FMCW)雷达是一个使用频率调制来测量…

腾讯云避坑——无法远程root登录

因为各种原因,最近需要使用腾讯云来代替阿里云。 但在ubuntu18/20的服务器中,我使用另一个电脑试图用scp命令来拷贝服务器中的一些文件,命令为: scp root服务器ip:文件目录 本地目录但一直显示密码错误。 原因是腾讯云ubuntu系统在创建时并不…

BLIoTLink工业协议转换软件功能和使用教程

1.功能简介 BLIoTLink 是一款各种 PLC 协议、Modbus RTU 、Modbus TCP、DL/T645 等多 种协议转换为 Modbus TCP、OPC UA、MQTT、BACnet IP、华为云 IoT、亚 马逊云 IoT、阿里云 IoT、ThingsBoard、钡铼云 IoT 等协议的软件。 BLIoTLink 下行支持:各种 PLC 协议、Mod…

centos上安装并持久化配置LVS

1 实验背景 1)系统版本:centos7.8 2)虚拟机:3个centos虚拟机,(其中一个做Director Server,另外两个做Real Server) 3) LVS大致有NAT ,DR ,Tun这三种模式,这里搭建一个典型的DR模式的LVS Direc…

【漏洞复现】大华智慧园区综合管理平台deleteFtp接口远程命令执行

漏洞描述 大华智慧园区综合管理平台deleteFtp接口存在远程命令执行,攻击者可利用该漏洞执行任意命令,获取服务器控制权限。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益…

C 标准库 <locale.h>

C 标准库 <locale.h> locale.h 头文件定义了特定地域的设置&#xff0c;比如日期格式和货币符号。接下来我们将介绍一些宏&#xff0c;以及一个重要的结构 struct lconv 和两个重要的函数。 库宏 下面列出了头文件 locale.h 中定义的宏&#xff0c;这些宏将在下列的两…

VSC++=》 拆解整数对号入座重组

void 拆解整数对号入座重组(int& 数, bool 选 true) {int 对号[10]{}, j 选 ? 9 : 0, 反 0, 基 1;while (数)对号[数 % 10], 数 / 10;if (选)while (j > 0)if (对号[j])数 * 10, 数 j, (反 ? 基 * 10 : 0), 反 基 * j, --对号[j]; else --j;else while (j < …

VSC++=》 友数对友质数()

void 友数对友质数() {//缘由https://bbs.csdn.net/topics/396498706?page1#post-411382586int aa 2, aaa 20; while (aa * aaa < 119)if (判断质数(aa * aaa - 1))cout << aa << ends << aaa << ends << (aa*aaa - 1) << endl, aaa…

41 - 如何使用缓存优化系统性能?

缓存是我们提高系统性能的一项必不可少的技术&#xff0c;无论是前端、还是后端&#xff0c;都应用到了缓存技术。前端使用缓存&#xff0c;可以降低多次请求服务的压力&#xff1b;后端使用缓存&#xff0c;可以降低数据库操作的压力&#xff0c;提升读取数据的性能。 今天我…

目标检测YOLO系列从入门到精通技术详解100篇-【自动驾驶】激光雷达

目录 前言 几个高频面试题目 为什么毫米波雷达无法识别静态物体? 毫米波雷达传感器融合的困境

nodejs微信小程序+python+PHP金融产品销售系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

R语言30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…

​LeetCode解法汇总2661. 找出叠涂元素

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 给你一个下…

【前端】大文件切片上传性能优化 使用 web worker 多线程

线程代码 worker.js //实例化一个 XMLHttpRequest 对象 let xhr new XMLHttpRequest(); let 延迟关闭线程等待时间毫秒 6000function 取消上传(){try {xhr.abort()}catch (e) {} }addEventListener(message, e > {const { type, data } e.data// console.log(子线程:,d…

自定义Vue的DockPanel-Layout

创作来源 1、在vue项目中需要有停靠、浮动、面板布局等需求&#xff0c;如arcgis的界面布局 2、在npm中搜索了关于vue的docklayout组件&#xff0c;搜索后就一个组件imengyu/vue-dock-layout&#xff0c;截图如下&#xff0c;该组件没有停靠组件&#xff0c;没有浮动组件&…

scrapy爬虫中间件和下载中间件的使用

一、关于中间件 之前文章说过&#xff0c;scrapy有两种中间件&#xff1a;爬虫中间件和下载中间件&#xff0c;他们的作用时间和位置都不一样&#xff0c;具体区别如下&#xff1a; 爬虫中间件&#xff08;Spider Middleware&#xff09; 作用&#xff1a; 爬虫中间件主要负…

浏览器垃圾回收机制的几种回收方法

前言 浏览器垃圾回收机制是指浏览器对内存中不再使用的对象进行自动回收和释放的过程。浏览器垃圾回收机制的目的是为了防止内存泄漏&#xff0c;提高程序的性能和稳定性。 原理 基于可达性的概念&#xff0c;即从一个或多个根对象出发&#xff0c;能够通过引用或指针找到的对…

数据结构基础(顺序表)

顺序表完整代码 SeqList.hSeqList.ctest.c SeqList.h #pragma once#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h>//#define N 1000 //typedef int SLDataType;静态顺序表 //typedef struct SeqList { // SLDataTy…