网络通信—路由交换协议之TCP协议

news2024/12/23 13:43:42

目录

一、tcp协议

二、通信消息类型

三、准备阶段(三次握手)

准备阶段要干什么?

有什么特点?

准备阶段的核心?

(1)准备阶段的数据传输单位

(2)三次握手的过程

1.第一次握手

2.第二次握手

3.第三次握手

四、通信阶段

通信阶段的核心?

(1)通信阶段的传输数据单位

1.报文头(附加信息)

2.报文正文

(2)通信过程

1.简单确认

2.滑动窗口机制确认

3.滑动窗口机制确认特点—协商

4.滑动窗口机制确认特点—重传(断点续传)

5.滑动窗口机制确认特点—缓存

6.滑动窗口机制的现象—百度网盘限速

7.滑动窗口机制(协商)的现象——下载速度先慢后快、然后又慢

五、关闭连接阶段(四次挥手)

(1)发送者a(源)关闭连接

1.第一次挥手(a发起)

2.第二次挥手

(2)接收者b(目标)关闭连接

1.第三次挥手(b发起)

2.第四次挥手

(3)拒绝服务


一、tcp协议

tcp、udp协议,都是传输层的协议

二、通信消息类型

询问syn、回复ack、应答seq

三、准备阶段(三次握手)

准备阶段要干什么?

通信之前进行可靠性确认。类似于我说话你能听到吗,对方回复能听到问我能听到不,我说我也能。

有什么特点?

面相,即实时通信。就像连麦或面对面聊天一样,马上就回复而不是像微信聊天可以半天才回复一句

准备阶段的核心?

收到请回复,确认机制

(1)准备阶段的数据传输单位

数据单位是segment段,又叫报文,准备阶段只有报文头


应用层(http或者ftp之类的协议)封装进来的头信息

source port、desstination port:源、目标的端口


网络层(tcp协议)封装进来的头信息

seqence number:seq序列号【应答】

acknowledge number:ack序列号【回复】

header length:Resv、URG、ACK【回复消息类型,1代表为ack】、PSH、RST、SYN【询问消息类型,1代表是syn同步请求连接消息类型】、FIN【结束通信信号,finish的简称,1代表关闭连接消息类型】

window:窗口数

(2)三次握手的过程

1.第一次握手

a——>b

【询问:我说话能听到吗】发起同步请求连接消息:syn(1个随机生成的序列号,比如100)

2.第二次握手

a<——b

【回复:能听到】回复消息:ack(序列号100+1=101)

【询问:那你能听到我说话不呢】发起同步请求连接消息:syn(1个随机生成的序列号,比如200)

3.第三次握手

a——>b

【应答:好的,我知道你能听到了】应答消息:seq(101+1=102)

【回复:我也能听到你说话】回复消息:ack(200+1=201)

四、通信阶段

通信阶段的核心?

简单确认机制

(1)通信阶段的传输数据单位

数据单位是segment段,又叫报文,包含报文头、报文正文

1.报文头(附加信息)

应用层(http或者ftp之类的协议)封装进来的头信息

source port、desstination port:源、目标的端口


网络层(tcp协议)封装进来的头信息

seqence number:seq序列号【应答】

acknowledge number:ack序列号【回复】

header length:Resv、URG、ACK【回复消息类型,1代表为ack】、PSH、RST、SYN【询问消息类型,1代表是syn同步请求连接消息类型】、FIN【结束通信信号,finish的简称,1代表关闭连接消息类型】

window:窗口数

2.报文正文

(2)通信过程

1.简单确认

简单确认模式不使用滑动窗口,窗口为1。一次通信只发1个报文,然后简单确认1个报文

  • 第1次确认

a——>b

  • 【应答:好的,我知道三次握手成功可以发送报文了】seq(1个随机生成的序列号,比如100);
  • 发送第1个报文

a<——b

【回复:确认收到了,可以继续发】回复消息:ack(序列号100+1=101)

  • 第2次确认

a——>b

  • 【应答:好的,我知道可以继续发了】seq(101+1=102)
  • 发送第2个报文

a<——b

【回复:确认收到了,可以继续发】回复消息:ack(序列号102+1=103)

  • 第3次确认

a——>b

  • 【应答:好的,我知道可以继续发了】seq(103+1=104)
  • 发送第2个报文

a<——b

【回复:确认收到了,可以继续发】回复消息:ack(序列号104+1=105)

  • 第n次简单确认

2.滑动窗口机制确认

滑动窗口机制的优点?

实现一次发多个包。比如我发一个8GB视频文件,特别大,而以太网传输单位1个数据帧最大才为1500Byte,一次只确认1个包效率太低。开启滑动窗口,设置窗口数为n个,就可以一次确认n个包

滑动窗口机制确认过程?

比如:开启滑动窗口,设置窗口数为5

  • 第1次确认

a——>b

  • 【应答:好的,我知道三次握手成功可以发送报文了】seq(100、101、102、103、104)
  • 发送5个报文

a<——b

【回复:确认收到了,可以继续发】回复消息:ack(104+1=105)<——b

  • 第2次确认

a——>b

  • 【应答:好的,我知道可以继续发了】seq(105+1=106、107、108、109、110)
  • 发送5个报文

a<——b

【回复:确认收到了,可以继续发】回复消息:ack(序列号110+1=111)

  • 第3次确认

a——>b

  • 【应答:好的,我知道可以继续发了】seq(111+1=112、113、114、115、116)
  • 发送5个报文

a<——b

【回复:确认收到了,可以继续发】回复消息:ack(序列号116+1=117)

3.滑动窗口机制确认特点—协商

什么是协商?

每次确认前,都会协商窗口数n的大小

协商的过程?

  • 第1次协商

尝试n=1

a——>b

  • 【应答:好的,我知道三次握手成功可以发送报文了】seq(100)
  • 发送1个报文

a<——b

【回复:确认收到了,可以继续发】回复消息:ack(100+1=101)

  • 第2次协商(增加窗口数)

一次发1个报文没问题,就尝试n=5

a——>b

  • 【应答:好的,我知道可以继续发了】seq(101、102、103、104、105)
  • 发送5个报文

【回复:确认收到了,可以继续发】回复消息:ack(105+1=106)

  • 第3次协商(发生丢包)

一次发5个报文没问题,就尝试n=10

a——>b

  • 【应答:好的,我知道可以继续发了】seq(106+1=107、108、....、116)
  • 发送10个报文

a<——b

【回复:确认收到了,可以继续发】回复消息:ack(本来应该是116+1=117,结果却是110+1=111),发生了丢包

  • 第4次协商(减少窗口数)

一次发10个报文过多了,那就一次少发点。尝试n=8

a——>b

  • 【应答:好的,我知道可以继续发了】seq(106=1=107、108、....、114)
  • 发送8个报文

a<——b

【回复:确认收到了,可以继续发】回复消息:ack(114+1=115)

4.滑动窗口机制确认特点—重传(断点续传)

  • 发送(出现丢包)

a——>b

  • 【应答:好的,我知道可以继续发了】seq(101、102、103、104、105)
  • 发送5个报文

  • 要求重传(断点续传)

a<——b

  • 只收到了101、102、104、105,发生了丢包
  • 【回复:从103开始重新发(因为在102中断了)】回复消息:ack(102+1=103)

5.滑动窗口机制确认特点—缓存

比如协商发5个报文,a在发送前会先缓存这5报文。如果要求重传,就发送缓存

6.滑动窗口机制的现象—百度网盘限速

现象:比如,我是10M(兆)宽带,正常下载速度应该是1.2MB/s。我没开会员,用百度网盘下载速度为什么只有100/KB每秒,慢得很,开了会员就正常了,恢复到1.2MB/s

原因:没开会员时,滑动窗口数可能只有3个。开了会员,滑动窗口数就变成100了

7.滑动窗口机制(协商)的现象——下载速度先慢后快、然后又慢

现象和原因:

  • 比如开了百度网盘会员,下载时先协商窗口数为5,发现没问题,然后再尝试窗口数为10,依次增大窗口数,速度越来越快
  • 在到达临界值,再尝试更大的窗口数,发现丢包了,此时速度到达巅峰
  • 于是重新协商减少窗口数,速度就又慢了

五、关闭连接阶段(四次挥手)

(1)发送者a(源)关闭连接

1.第一次挥手(a发起)

a——>b

  • 【应答:好的,我知道你收到最后一个报文了】seq=(1个随机生成的序列号,100)
  • 【结束通信信号:再见,不聊了】FIN(1)
  • 【回复:我要关闭连接了】ack(1个随机生成的序列号,200)

2.第二次挥手

a<——b

  • 【应答:好的,我知道你要关闭连接了】seq=(200)
  • 【回复:那就不聊了再见,你关闭连接吧】ack(100+1=101)


(2)接收者b(目标)关闭连接

1.第三次挥手(b发起)

a<——b

  • 【应答:好的,我知道a关闭连接了】seq=(1个随机生成的序列号,800)
  • 【结束通信信号:再见,不聊了】FIN(1)
  • 【回复:我也要关闭连接了】ack(101)

2.第四次挥手

a——>b

  • 【应答:好的,我知道你也要关闭连接了】seq=(101)
  • 【回复:那就不聊了再见,你也关闭连接吧】ack(800+1=801)

(3)拒绝服务

第二或第四次挥手,a或b一直不回复,就叫拒绝服务。对方先会一直等待,超过规定时间就会自动断开。

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

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

相关文章

Linux之基础开发工具

文章目录 前言一、yum&#xff08;软件包管理器&#xff09;1.什么是软件包&#xff1f;2.下载软件包1. 安装软件之前需要将软件的安装包下载下来2. 软件包并不在我们的本地电脑&#xff0c;那么软件包在哪里呢&#xff1f;3. 那么问题来了&#xff0c;我们的电脑如何得知要去哪…

npm 配置双因素身份验证

目录 1、关于双因素身份验证 2、NPM上的双因素身份验证 2.1 授权和写入 2.2 仅限授权 3、先决条件 4、从网站配置2FA 4.1 启用2FA 4.2 为写入禁用2FA 4.3 禁用2FA 5、从命令行配置2FA 5.1 从命令行启用2FA 5.2 从命令行发送一次性密码 5.3 从命令行删除2FA 6、配…

chatgpt赋能Python-python3_8怎么安装库

Python 3.8怎么安装库 - 一个简单易懂的指南 如果你正在学习Python编程&#xff0c;或者想要在你的项目中使用Python 3.8&#xff0c;那么你可能需要安装一些Python库。Python库是一些预定义的Python模块&#xff0c;它们可以帮助你更快速地完成你的项目。在这篇文章中&#x…

chatgpt赋能Python-python3_9_6怎么用

Python 3.9.6简介 Python 3.9.6是2021年6月28日发布的Python编程语言的最新版本&#xff0c;它提供了一些有用的新功能和改进&#xff0c;包括优化的解释器性能和可变构造体。它是一种功能强大的编程语言&#xff0c;既易于学习又易于使用&#xff0c;非常适用于开发Web应用程…

059:cesium设置条纹条带Stripe材质

第059个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置条纹条带材质,请参考源代码,了解StripeMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共91行)相关API参考:专栏目标…

机器学习——感知机

本章节主要介绍感知机的基础知识&#xff0c;虽然在目前的机器学习范围内&#xff0c;感知机已经不怎么使用&#xff0c;但是通过对感知机的学习可以更好的了解以后的线性模型等相关知识。 同时读者可以点击链接&#xff1a;机器学习-目录_欲游山河十万里的博客-CSDN博客 学习完…

Flutter 笔记 | Flutter 核心原理(一)架构和生命周期

Flutter 架构 简单来讲&#xff0c;Flutter 从上到下可以分为三层&#xff1a;框架层、引擎层和嵌入层&#xff0c;下面我们分别介绍&#xff1a; 1. 框架层 Flutter Framework&#xff0c;即框架层。这是一个纯 Dart实现的 SDK&#xff0c;它实现了一套基础库&#xff0c;自…

蓝牙 a2dp 知识点

1 不同的场景支持 当手机与耳机连接时&#xff0c;会协商音频编解码器、音频质量、音频延迟。&#xff08;可以决定是游戏模式还是音乐模式&#xff09; 2 音量调整 手机下发音乐数据的同时&#xff0c;还会下发音量值。耳机根据这个音量值&#xff0c;调整音乐数据到耳机实…

微软 | 把local小模型当作大语言模型的插件?

一、概述 title&#xff1a;Small Models are Valuable Plug-ins for Large Language Models 论文地址&#xff1a;https://arxiv.org/abs/2305.08848 代码&#xff1a;https://github.com/JetRunner/SuperICL 1.1 Motivation 大语言模型想GPT-3和GPT-4权重没有开放出来&a…

实验 2:树形数据结构的实现与应用

东莞理工学院的同学可以借鉴&#xff0c;请勿抄袭 1.实验目的 通过实验达到&#xff1a; 理解和掌握树及二叉树的基本概念&#xff1b; 理解和掌握二叉树的顺序存储结构、链式存储结构&#xff1b; 理解和掌握采用二叉链式存储结构下二叉树的各种遍历操作的思想及 其应用&a…

详解Jetpack Compose的标准布局

前言 Compose是一个声明式UI系统&#xff0c;其中&#xff0c;我们用一组函数来声明UI&#xff0c;并且一个Compose函数可以嵌套另一个Compose函数&#xff0c;并以树的结构来构造所需要的UI。 在Compose中&#xff0c;我们称该树为UI 图&#xff0c;当UI需要改变的时候会刷新…

UML类图与设计模式/原则

目录 类之间的关系依赖泛化(继承)实现关联聚合组合 设计模式的七大原则设计模式单例工厂模式原型模式&#xff08;深/浅拷贝&#xff09;建造者模式适配器模式桥接模式装饰者模式组合模式外观模式享元模式代理模式模板方法模式命令模式访问者模式迭代器模式观察者模式中介者模式…

chatgpt赋能Python-python3_8_5安装后怎么打开

Python3.8.5安装后怎么打开&#xff1a;简易步骤指南 Python是一种高级编程语言&#xff0c;被广泛用于数据分析、机器学习、自动化、网络编程等多个方面。Python语言优雅简洁&#xff0c;易于上手&#xff0c;是编程初学者的最佳入门语言之一。本文将介绍Python3.8.5版本的安…

C++ 红黑树(更新中)

前言 上篇博客学习了平衡二叉搜索树(AVLTree)&#xff0c;了解到AVL树的性质&#xff0c;二叉搜索树因为其独特的结构&#xff0c;查找、插入和删除在平均和最坏情况下都是O(logn)。AVL树的效率就是高在这个地方。 但是在AVL树中插入或者删除结点&#xff0c;使得高度差的绝对…

学系统集成项目管理工程师(中项)系列22c_信息化知识(下)

1. 新一代信息技术对产业的推动 1.1. 加快建设宽带、泛在、融合、安全的信息网络基础设施&#xff0c;推动新一代移动通信、下一代互联网核心设备和智能终端的研发及产业化&#xff0c;加快推进三网融合&#xff0c;促进物联网、云计算的研发和示范应用 1.2. 大数据 1.2.1. …

申请GPT-4插件,等待GPT-4插件候补全过程

前言 GPT4相信大家都知道它的升级是带来更多惊喜的&#xff0c;目前GPT4已经推出了网页和插件功能&#xff0c;这些插件是专门为语言模型设计的工具。插件可以帮助 ChatGPT 访问最新信息、运行计算或使用第三方服务。写文记录一下&#xff0c;如果你现正好有需要GPT-4 插件的需…

基于springboot就业信息管理系统

开发技术与环境配置 以Java语言为开发工具&#xff0c;利用了当前先进的springboot框架&#xff0c;以MyEclipse10为系统开发工具&#xff0c;MySQL为后台数据库&#xff0c;开发的一个就业信息管理系统。 SpringBoot框架 SpringBoot是一个全新开源的轻量级框架。基于Spring…

chatgpt赋能Python-python3_8怎么打开

Python 3.8&#xff1a;如何下载和打开 Python 3.8是一种高级编程语言&#xff0c;被广泛应用于人工智能、数据分析和网络编程等领域。本文将介绍如何下载和打开Python 3.8以及其优点和用途。 下载Python 3.8 Python 3.8的下载地址为官方网站。根据不同操作系统的需求&#…

系统清理优化工具:CCleaner

哈喽&#xff0c;大家好。今天带各位小伙伴们学习一款系统清理优化工具——CCleaner。 CCleaner是一款系统优化和隐私保护工具。它可以用来清除Windows系统不再使用的垃圾文件&#xff0c;以腾出更多硬盘空间。也可以清除使用者的上网记录。它的体积小&#xff0c;运行速度快&…

java+springboot高校校友校园信息管理系统

本高校校友信息管理系统使用Web开发&#xff0c;运行在Internet环境之上&#xff0c;系统的后台编程语言使用JAVA&#xff0c;数据库使用MySQL。完成了两个用户角色的功能&#xff0c;管理员管理所有信息&#xff0c;前台学生用户登录后查看公告&#xff0c;在线捐赠申请&#…