以太网 TCP协议(数据交互过程、窗口机制)

news2024/11/24 1:48:15

2.7.1 以太网 TCP协议(数据交互过程、窗口机制)

环境介绍:

 1、客户端访问FTP服务器进行下载文件,由于FTP是基于TCP协议进行工作的,所以客户端在访问FTP服务器时必然会进行建立TCP连接。

 2、通过在交换机上对任意端口进行抓包,来分析TCP的传输数据时报文交互的过程,以及TCP的窗口机制凸显的现象

在这里插入图片描述

一、TCP数据报文交互

为什么说TCP协议可靠的?

 其中一项就是因为TCP协议在传输数据的过程对,会对接收到的TCP数据进行一个确认。

 当对方发来一个Seq报文序号2、并承载100Byte的TCP数据,我成功收到且FCS检查无误之后,回复Flags-ACK置位1、ack序号=(收到的Seq+收到的数据大小)=4+100=104TCP报文进行确认。

简述TCP数据报文交互过程:

  • 客户端请求下载文件之后,建立起传输的TCP连接。
  • 连接建立之后,服务器告知客户端:请求文件的大小以及发送的方式、编码等。随后基于TCP连接发送FTP-DATA。
    • FTP-DATA为什么是两个包?
    • 因为在TCP建立的时候知道MSS=1460(传输最大文件大小限制),而下载的index.html文件大小为1649Byte,需要分成1460+189两个FTP-DATA包进行传输
  • 收到FTP-DATA之后,客户端向服务器回复ACK确认:ack=1651
    • FTP-DATA(1)报文信息:seq=1,ack=1,Len=1460
    • FTP-DATA(2)报文信息:seq=1461,ack=1,len=189
    • 两个包都收到之后,检查无误,最后一个包的seq=1461、数据大小lene=189,所以回复的ACK报文中,ack序号=1461+189=1651.

抓包信息:

(1)总体信息

在这里插入图片描述

(2)FTP-DATA(1)

在这里插入图片描述

(3)FTP-DATA(2)

在这里插入图片描述

(4)FTP回复的ACK

在这里插入图片描述

华为官网教材截图(HCIA-02 网络参考模型):

在这里插入图片描述

为什么PC1所发的Ack字段没有增长?

 TCP成功建立之后,回复的TCP报文ackp字段只会将收到的报文中seq字段与Data字段大小进行相加成为ack字段的新值。

 即:ack=seq+data,如果收到的TCP报文中data(载荷)=0,即ack=seq,也就是图中ack=seq=b+1的原因。

二、TCP窗口机制

 TCP通过滑动窗口机制来控制数据的传输速率,保障数据传输时不会因为其中一端传输太快导致数据丢失。

 在TCP三次握手建立连接时,双方都会通过Window(win)字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小,单位Byte)。

TCP窗口机制如何进行工作的?

  1. 连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。
  2. 接受方 接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。
  3. 接收方 根据自身的缓存空间大小,在回复TCP报文时更新窗口大小( Window )。
  4. 发送方 根据接收方回复的窗口大小,实时更改发送相应数量的数据。

TCP窗口机制对数据交互有什么影响?

  • 教程中常常看到的数据交互都是发一个数据包就回复一个确认,这种主要为了让我们好理解,现实中如果需要实现这种一个数据报文就回复一个确认,就需要使用到TCP报文中的PSH字段。

  • 如果网络中都是这样一包一回复,大量不必要的数据报文在网络中传输,易造成网络负载较重,使得传输效率降低。

  • 窗口机制有个特点就是不断的接收数据放置在缓冲区中,直到缓冲区被占用满或者遇到PSH置位的TCP报文,才会进行数据转发,以及回复ACK进行数据确认。这样统一的回复有效减少了大量确认数据在网络中传输。

TCP中的PSH字段作用?

  • 通过TCP报头中的PSH字段 控制服务器缓冲区内的数据立即传送出去。
  • 什么时候用到PSH字段呢?
  • 对于需要紧急处理的指令数据,需要快速的进行转发处理,就需要应用到PSH。
  • 如:数据交互实例中的客户端下载index.html文件,需要紧急执行下载,如果等待send buffer(缓冲区)满了再转发,客户端看来就是等了很久才开始进行下载/传输文件。
    在这里插入图片描述

华为官网教材截图(HCIA-02 网络参考模型):

注:图中的win=3,表示可接收的数据包为3个。在实际环境中,该字段通常表示目前可接受处理的数据大小,单位Byte。

在这里插入图片描述

为什么PC1所发报文的Win字段没有变化?

 因为win表示的是本端目前所能接收的数据窗口大小,即目前可处理的数据量大小。自己发送的数据并不会占用win窗口量。

为什么PC1所发报文的Win字段没有变化?

 因为win表示的是本端目前所能接收的数据窗口大小,即目前可处理的数据量大小。自己发送的数据并不会占用win窗口量。

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

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

相关文章

Bootstrap5 网格系统

Bootstrap 提供了一套响应式、移动设备优先的流式网格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多 12 列。 我们也可以根据自己的需要,定义列数: 111111111111444486612 Bootstrap 5 的…

Java项目:ssm客户关系管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 客户关系管理系统主要功能包括: 系统管理: 用户管理 日志管理 权限管理 角色管理 系统信息 客户管理 我的客户 联系跟进…

音视频学习(十三)——flv详解

简介 全称FLASHVIDEO,是一种新的视频格式,主要的特点是文件小、加载速度快。 结构 flv的结构相对简单,可以通过下图来初步了解其组成: flv flv header(9字节) flv bodyflv header Signature(3字节) Version(1字节) Flags(…

rocketmq消息过滤

1、目的 消费者订阅了某个主题后,Apache RocketMQ 会将该主题中的所有消息投递给消费者。若消费者只需要关注部分消息,可通过设置过滤条件在 Apache RocketMQ 服务端进行过滤,只获取到需要关注的消息子集,避免接收到大量无效的消…

51单片机学习笔记5 流水灯实现及蜂鸣器控制

51单片机学习笔记5 流水灯实现及蜂鸣器控制一、流水灯1. 硬件电路2. 代码实现(1) 点亮一个LED的基本操作(2) 使用算术左移实现流水灯(3) 使用库文件左移函数二、蜂鸣器1. 蜂鸣器介绍2. 硬件电路原理图ULN20…

唯愿山城无恙-烟火寻常--爱摸鱼的美工(五)

-----------作者:天涯小Y 非常时期的非常生活! 今天是承上启下的一天 无论好坏,本月都收官了 洗去一身的疲惫 大脑放空,搓澡 热衷搓澡的程度,简直不像南方人 收拾一下,迎接新的开始 原本一年之中,我最爱几…

搜索与图论-DFS

文章目录一、DFS1. DFS 简介2. DFS 的实现步骤3. DFS 实际演示二、DFS 例题——排列数字具体实现1. 样例演示2. 实现思路3. 代码注解4. 实现代码三、DFS 例题—— n-皇后问题(经典)具体实现——按行进行枚举1. 样例演示2. 实现思路3. 代码注解4. 实现代码…

微服务框架 SpringCloud微服务架构 9 初识 Docker 9.4 Docker 的安装

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构9 初识 Docker9.4 Docker 的安装9.4.1 安装Docker9.4.2 启动Docker9.4.3 配…

verilog练习——时序逻辑

目录 VL21 根据状态转移表实现时序电路 VL22 根据状态转移图实现时序电路 VL23 ROM的简单实现 VL24 边沿检测 VL21 根据状态转移表实现时序电路 题目分析: 1、使用三段式状态机,实现更为方便和简洁。 2、三段式和(一段式、二段式&#x…

C++GUI之wxWidgets(2)-hello,world

目录wxWidgets的头文件事件main入口函数状态栏事件处理程序wxWidgets的头文件 首先必须包含wxWidgets的头文件。 1、可以在一个文件一个文件的基础上完成(如wx/window.h) 2、使用一个全局包含(wx/wx.h),其中包括大多数常用的头文件(虽然不是所有的头文件&#xff0…

单变量微积分重点(1)

1.单调有界定理 若数列递增有上界,则数列收敛(递减同样) 2.海涅定理(归结原则) 说明:对于任何的属于空心邻域的数列,而且这些数列的极限都是x0. 3.两个重要极限: 4.11个重要极限 导…

基于PHP+MySQL托管中心管理系统的设计与实现

随着在校学生人数的不断增加,学生的数量也在不断的增加,但是很多时候因为父母工作忙没时间,以及一些其他的原因没办法对学生间辅导,这就诞生了托管中心这一行业,但是传统的托管中心多是人工手动的模式进行管理的,这很不科学也不合理,为了改变这一现状,我们开发了托管中心管理系…

SpringBoot_整合Mybatis-plus

一、入门案例 1.准备表结构和数据 准备如下的表结构和相关数据 DROP TABLE IF EXISTS user; ​ CREATE TABLE user (id BIGINT(20) NOT NULL COMMENT 主键ID,name VARCHAR(30) NULL DEFAULT NULL COMMENT 姓名,age INT(11) NULL DEFAULT NULL COMMENT 年龄,email VARCHAR(50) …

Java项目:SSM的KTV管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 主要功能包括: 登陆页,房间信息,房间管理,开取房间,房间查询,会员管理,食物管理,查看订单,查询订单,查看房间消费使用情况等功能。…

随笔荟萃 | sincerity

我们在第一学期中,有一堂经济政治与社会课上,老师给我们讲到共建社会主义和谐社会时,我们现在的社会需要更多的人参与,我又想起班主任陆坚老师对我们全班同学所说的话就是:“我们先做人后做事。”我们如何做人、做人的…

7.7 网络(一)

目录 一 网络是个什么玩意 1 网络很重要,发展很迅速 2 网络是一个很泛的概念 3 我们介绍什么 二 网络技术 1 网络架构 2 网络传输 3 网络安全与管理 网络是操作系统中很重要的一个模块,特别是在现代操作系统中。另外,网络也是软件开发人员必须…

基于PHP+MySQL简历模板下载管理系统

随着时代的发展和进步,互联网络日益成为大众生活的发展方向,每年都有大量的毕业生需要求职,在求职的过程中简历是必不可少的一个环节,但是很多时候求职人员不知道如何更好的制作一份简历,这个情况就需要到网上寻找对应…

OpenCV3图像处理笔记

此笔记针对 Python 版本的 opencv3,c 版本的函数和 python 版本的函数参数几乎一样,只是矩阵格式从 ndarray 类型变成适合 c 的 mat 模板类型。注意,因为 python 版本的opncv只提供接口没有实现,故函数原型还是来自 c版本的opencv…

PlanarSLAM:基于结构化约束的视觉SLAM

1. 摘要 在我们所熟知经典SLAM系统,以ORB-SLAM为代表的通过特征点法在相机位姿估计方面有很好的表现,但在一些人为构造的弱纹理环境下,由于缺少可靠的特征点的缘故,导致表现性能下降。 针对此种问题,作者通过根据周围…

介绍两个LVGL开发工具,让你做出更好的UI

环境 V公众号南山府嵌入式回复4001获取 NXP GUI-Guider 介绍的第一个就是恩智浦官方提供的,现在已经更新到1.4.1版本,相对前面的版本,变化还是挺大的,无论是界面设计还是其他的做的都挺不错的。而且特别好的一点是,支…