计算机网络 - 2.基础协议

1.TCP协议

在这里插入图片描述

  • 1.TCP(Transmission Control Protocol):传输控制协议
  • 2.TCP协议是一种面向连接的可靠的、 基于字节流传输层通信协议
    • 1.面向连接:两个使用TCP协议的应用(通常一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接
    • 2.可靠的
      • 1.数据传输之前都要建立连接(三次握手),数据传输结束后都要释放连接(四次挥手
      • 2.数据被分割成TCP认为适合发送的数据块,而采用UDP协议的数据长度将保持不变
      • 3.由TCP传递给IP的信息单位称为报文段或段segment
      • 4.当TCP发出一个段后将启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段
      • 5.等待协议:客户发送一次数据到服务端,必须等到服务端响应后才发第二次数据,中间的等待时间占了大部分时间,中间如果出现差错(超时或确认丢失)都需要重新传输
      • 5.TCP将保存首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化,如果收到段的检验和有差错,TCP将丢弃这个报文段并不确认收到此报文段,发送端需要重新发送
  • 3.TCP位码即TCP标志位共有六种
    • 1.SYN(建立)
    • 2.ACK(确认)
    • 3.PSH(传送)
    • 4.FIN(结束)
    • 5.RST(重置)、
    • 6.URG(紧急)
    • 7.Sequence number(顺序号码)
    • 8.Acknowledge number(确认号码)
1.三次握手

在这里插入图片描述
在这里插入图片描述

  • 1.TCP协议中建立连接需要经过三次握手,开始时客户端处于CLOSED的状态,服务端处于LISTEN状态
    • 1.第一次握手
      • 1.客户端发送SYN报文()到服务器并指明客户端的初始化序列号seq,此时客户端处于SYN_SEND状态,等待服务器确认
      • 2.首部的同步位SYN=1,初始化序列号sqe=xx是一个随机生成的值
    • 2.第二次握手
      • 1.服务器收到客户端的SYN报文,发送一个SYN+ACK报文作为应答并且指定自己的初始化序列号
      • 2.将客户端的初始化序列号加一,即x + 1作为ack的值,表示已经收到了客户端的 SYN报文,此时服务器处于SYN_REVD的状态
      • 3.确认报文段中SYN=1ACK=1,确认号ack=x+1,初始化序列号seq=y
    • 3.第三次握手
      • 1.客户端收到服务器SYN+ACK报文后,会向服务器发送一个ACK报文表示已经收到了服务端的报文
      • 2.此时客户端处于ESTABLISHED状态,服务器收到ACK报文之后,也处于ESTABLISHED状态,此时双方已建立起了连接,完成三次握手
      • 3.确认报文段中ACK=1,确认号ack=y+1,初始化序列号seq=x+1
  • 2.三次握手(Three-way Handshake)本质:指建立一个TCP连接时需要客户端和服务器总共发送3个包
  • 3.三次握手的作用:确认双方的接收能力和发送能力是否正常,指定自己的初始化序列号为后面的可靠性传送做准备,实质上是连接服务器指定端口建立TCP连接并同步连接双方的序列号和确认号,交换TCP窗口大小信息
  • 4.理想状态下TCP连接一旦建立,则在通信双方中的任何一方主动关闭连接之前TCP 连接都将被一直保持下去
  • 5.一般握手过程中传送的包里不包含数据,三次握手完成后客户端与服务器才正式开始传送数据
  • 6.注意
    • 1.SYN=1报文段不能携带数据,ACK报文段可以携带数据,不携带数据则不消耗序号,即三次握手的前两次不能携带数据,而第三次可以携带数据
    • 2.ACKack的区别
      • 1.三次握手发送的数据包中有两个ACK,习惯通过一个大写一个小写加以区分
      • 2.ACK:确认标志(Acknowledgement),值为1表示确认连接
      • 3.ack:确认编号(Acknowledgement Number),值为发送方传来的seq+1,表示已经成功接收上一次所有数据
    • 3.需要三次握手的原因
      • 1.第一次握手:客户端发送网络包,服务端接收;结论:服务端可知客户端的发送能力正常
      • 2.第二次握手:服务端发送网络包,客户端接收;结论:客户端可知服务端的接收,发送能力正常,但是此时服务端并不能确认客户端的接收能力正常所以需要第三次的确认
      • 3.第三次握手:客户端发送网络包,服务端接收;结论:服务端可知客户端的接收,发送能力正常
    • 4.两次握手的问题
      • 1.客户端发出连接请求但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求
      • 2.服务端后来收到了确认,建立了连接,数据传输完毕后,就释放了连接
      • 3.客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留,从而延误到连接释放以后的某个时间才到达服务端
      • 4.此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接
      • 5.不采用三次握手,只要服务端发出确认就建立新的连接,此时客户端忽略服务端发来的确认也不发送数据,则服务端一致等待客户端发送数据,浪费资源
    • 5.半连接队列和全连接队列
      • 1.服务器第一次接收到客户端的SYN报文后会处于SYN_RCVD状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,把这种队列称之为半连接队列
      • 2.全连接队列:已经完成三次握手建立起连接的会放在全连接队列中,如果队列满了有可能会出现丢包现象
      • 3.服务器发送完SYN+ACK包后如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除,且每次重传等待的时间不一定相同,一般会是指数增长
1.初始化序列号ISN

在这里插入图片描述

  • 1.客户端和服务端在建立TCP连接时,双方都会发送SYN报文并初始化序列号(Initial Sequence NumberISN)
  • 2.使用相同ISN导致的问题
    • 1.假设AB使用固定的序号,A使用序号1B建立TCP连接,发送一个SYN报文,此时seq = 1,经过三次握手后AB之间建立TCP连接完成
    • 2.当AB建立TCP连接后,A又使用相同的序号1B发送了200字节数据,不过因为网络拥塞问题,这个TCP数据报一直在网络中逗留并没有立即到达B
    • 3.由于A发送的TCP数据报一直没到达B,正好此时A发生故障并重启,于是B就释放这条TCP连接,然后A重启后又使用序号1B建立新的TCP连接
    • 4.当TCP连接建立后A又使用序号1B发送了240字节的数据,不过这次网络很稳定B马上就收到A发送的数据,注意此时A发送数据使用新的TCP连接
    • 5.A之前发送的TCP数据报经过一段时间后终于到达B,不过该TCP数据报属于之前已经释放的旧TCP连接,B应该把这个数据报丢弃掉,但是由于A每次发送报文都使用了相同的序号(seq = 1)从而会让B误认为该数据报属于新建立的TCP连接,因此B会对该数据照收不误导致B在收到新TCP连接的数据后又收到旧TCP连接的数据从而出现数据乱序的问题
  • 3.ISN的作用:保证消息的顺序性
    • 1.由于AB之间的一个TCP连接通常是由AB2ip地址,2个端口号构成的四元组
    • 2.因此当A出现了故障把该TCP连接断开之后再以相同的四元组建立新的TCP连接(AB两次建立TCP连接都是使用相同的ip地址和端口),就会出现数据乱序的问题
    • 3.因为只要A发送了一个TCP报文段且这个TCP报文段的四元组和序号和之前的TCP连接(四元组和序号)相同的话就会被B确认
    • 4.这反映了TCP的一些缺点,如果被一些恶意攻击者加以利用TCP的这种缺点,选择合适的序号,ip地址和端口就能伪造出一个TCP报文段从而打断正常的TCP连接
    • 5.但是初始化序号的方式(通过算法来随机生成序号)就会使序号难以猜出,也就不容易利用这种缺点来进行一些恶意攻击行为,且如何序号不同那么B在接收到这个序号为1TCP报文时,发现该TCP报文的序号不在新TCP连接的接收范围内时会把这个TCP报文丢弃掉从而避免了数据乱序的问题
2.四次挥手

在这里插入图片描述

  • 1.TCP协议中断开连接需要经过四次挥手,开始时客户端和服务端都处于ESTABLISHED状态,假定客户端先发起关闭请求
    • 1.第一次挥手

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

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

相关文章

前端之vue3创建基本工程,基本登录、注册等功能的完整过程

此文也是为了做一个基本学习用的vue3创建项目的过程,包含基本的登录页面、登出页面、基本的router跳转、axios调用、登录验证等内容。与项目: https://gitee.com/rainpet/java-web-demo/tree/master/spring-security01 可以配套使用。 如下为主要过程。 …

如果有三个服务实例部署在三台不同的服务器上,这三个服务实例的本地缓存,是存储一模一样的数据?还是各自只存一部分?

✅ 答案是:通常每个服务实例都会独立地缓存它自己访问过的数据,这些数据可能是相同的,也可能是不同的,取决于请求的内容。 📌 举个例子说明 假设你有一个商品详情页的服务,部署了 3 个服务实例&#xff08…

九州未来十三载:开源赋能 智启未来

2012年,九州未来以“开源赋能云边变革”为使命,开启中国开放云边基础架构服务的探索之路。十三载坚守深耕,我们始终以开源为翼,以算力为基,在科技浪潮中砥砺前行,见证并推动着AI时代的算力变革。 坚守初心丨…

Axure项目实战:智慧运输平台后台管理端-订单管理1(多级交互)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:订单管理 主要内容:条件组合、中继器筛选、表单跟随菜单拖动、审批数据互通等 应用场景…

WebAssembly:开启跨平台高性能编程的新时代

在当今的互联网时代,Web 应用的复杂性和性能要求越来越高。从简单的网页浏览到复杂的在线游戏、实时数据处理和图形渲染,开发者需要一种能够兼顾性能和兼容性的技术。WebAssembly(简称 Wasm)应运而生,它作为一种新兴的…

大数据治理:理论、实践与未来展望(二)

书接上文 文章目录 七、大数据治理的未来发展趋势(一)智能化与自动化(二)数据隐私与安全的强化(三)数据治理的云化(四)数据治理的跨行业合作(五)数据治理的生…

计算机视觉与深度学习 | Matlab实现EMD-GWO-SVR、EMD-SVR、GWO-SVR、SVR时间序列预测(完整源码和数据)

以下是一个完整的Matlab时间序列预测实现方案,包含EMD-GWO-SVR、EMD-SVR、GWO-SVR和SVR四种方法的对比。代码包含数据生成、信号分解、优化算法和预测模型实现。 %% 主程序:时间序列预测对比实验 clc; clear; clearvars; close all;% 生成模拟时间序列数据 rng(1); % 固定随…

RabbitMQ核心特性——重试、TTL、死信队列

一、重试机制 在消息传输过程中,可能遇到各种问题,如网络故障,服务器不可用等,这些问题可能导致消息处理失败,因此RabbitMQ提供了重试机制,允许消息处理失败后重新发送,但是,如果是因…

MVCC实现原理

MVCC的基本概念 MVCC,一个数据的多个版本,使得读写操作没有冲突。 在多个事务并发的情况下,确定到底要访问哪个版本。 MVCC实现原理 MVCC实现依赖于隐式字段,undo log日志,readView 隐式字段 在mysql用户自定义的…

湖北理元理律师事务所债务优化方案解析:如何科学规划还款保障生活质量

在当前经济环境下,债务问题已成为困扰许多家庭的重要难题。据相关统计数据显示,我国个人负债率呈现逐年上升趋势,如何合理规划还款、保障基本生活质量成为亟待解决的社会问题。湖北理元理律师事务所基于多年实务经验,研发出一套科…

ffmpeg 转换视频格式

使用FFmpeg将视频转换为MP4格式的常用命令: ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac output.mp4 -i input.avi:指定输入文件 -c:v libx264:使用H.264视频编码器 -crf 23:控制视频质量(范围18-28&#…

LLM Tuning

Lora-Tuning 什么是Lora微调? LoRA(Low-Rank Adaptation) 是一种参数高效微调方法(PEFT, Parameter-Efficient Fine-Tuning),它通过引入低秩矩阵到预训练模型的权重变换中,实现无需大规模修改…

实现tdx-hs300-mcp

文章目录 项目简介功能说明使用方法配置说明项目简介 tdx-hs300-mcp是一个Model Context Protocol (MCP)的服务 功能说明 下载数据自动保存为CSV格式文件使用方法 确保已安装Python 3.7+和依赖库: pip install pytdx fastapi uvicorn启动MCP服务: mcp run MCP.py使用MCP工具…

《100天精通Python——基础篇 2025 第20天:Thread类与线程同步机制详解》

目录 一、概念简单回顾二、Python的线程开发2.1 Thread类2.1.1 线程启动2.1.2 线程退出2.1.3 线程的传参2.1.4 threading的属性和方法2.1.5 Thread实例的属性和方法2.1.6 start和run方法 2.2 多线程2.3 线程安全2.4 daemon线程2.5 threading.local类2.6 __slots__拓展 三、线程…

【web应用】前后端分离开源项目联调运行的过程步骤ruoyi

文章目录 ⭐前言⭐一、项目运行环境准备⭐二、数据库创建🌟1、新建数据库🌟2、导入数据脚本 ⭐三、运行后端项目🌟1、打开后端项目🌟2、后端项目配置项修改 ⭐四、运行前端项目VUE3🌟1、在IDEA另一个窗口中打开前端项目…

【深度剖析】三一重工的数字化转型(下篇1)

在数字经济持续发展的背景下,企业数字化转型方案成为实现转型的关键。不同行业内的企业因转型动机和路径的差异,其转型成效也各异。三一重工作为机械制造行业的领军企业,较早地实施了数字化转型,并积累了丰富的经验。本研究选取三一重工作为案例,通过梳理相关文献,对其数…

Nacos适配GaussDB超详细部署流程

1部署openGauss 官方文档下载 https://support.huaweicloud.com/download_gaussdb/index.html 社区地址 安装包下载 本文主要是以部署轻量级为主要教程 1.1系统环境准备 操作系统选择 系统AARCH64X86-64openEuler√√CentOS7√Docker√√1.2软硬件安装环境 版本轻量版(单…

国际前沿知识系列五:时间序列建模方法在头部撞击运动学测量数据降噪中的应用

目录 国际前沿知识系列五:时间序列建模方法在头部撞击运动学测量数据降噪中的应用 一、引言 二、时间序列建模方法 (一)ARIMA 模型 (二)指数平滑法 (三)小波变换 三、实际案例分析 &…

线性代数中的向量与矩阵:AI大模型的数学基石

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…

第十七次CCF-CSP算法(含C++源码)

第十七次CCF-CSP认证 小明种苹果AC代码 小明种苹果&#xff08;续&#xff09;AC代码 后面好难哈哈 小手冰凉 小明种苹果 输入输出&#xff1a; 题目链接 AC代码 #include<iostream> using namespace std; int n,m; int res,res3; int sum; int res21; int main(){cin …