5.8.10 TCP协议

news2024/12/29 9:06:05

5.8.10 TCP协议

我们通过一个实例来看一下TCP协议

如图

示例

图中是六个IP数据报的前40个字节的内容,使用的是16进制数表示的,该数据报的背景如下图

背景

主机H通过快速以太网连接Internet,主机H的IP地址是192.168.1.100,服务器S的IP地址是202.119.224.201,在使用TCP通信时在主机H上捕获到的六个IP数据报的前四十个字节就是前图所示,这里使用十六进制数表示。

在分析前我们先了解一下基础的知识

在Wireshark采集到的报文段中,我们能够分析出很多网络通信中非常有价值的内容,我们从上面六个相互关联的IP数据报的前四十个字节部分根据我们前面学习的IP数据报的格式(5.2.3 IP数据报(一)IP数据报的格式)、TCP报文段首部格式(5.8.2 TCP报文段首部格式)可以发现很多非常重要的分析内容。如图

基础

我们可以得到IP数据报的总长度、生存时间、协议、源和目的IP地址、TCP首部中的源端口、目的端口、序号、确认号、标志位、窗口字段。

根据TCP相关知识,解决下面五个问题

  1. IP数据报中,哪几个是由主机H发送的?

    从源IP地址字段我们可以明显的看出192.168.1.100对应的16进制数为c0 a8 01 64,也就是第一个,第三个、第四个报文都是由该主机发出的。其余的都是由服务器S发出的报文。

  2. 根据默认端口,请问服务器S开通的是什么应用服务?

    根据第一个报文的协议字段赋值为06我们知道其IP数据报中携带的数据是TCP的数据,进一步我们看到源端口de 7e是一个一般的端口,但是目的端口00 50对应的是80,我么通过默认的TCP端口号知道该服务器开通的是HTTP的应用服务。

  3. 前三个IP数据报的内容完成了TCP协议的什么功能?

    完成功能需要查看TCP首部的标志位字段。这里我们知道标志位都是以位为单位显示的,这里我们需要先将16进制转化为二进制表示。

    第一个报文段中标志位显示02对应的二进制为0000 0010,这里我们可以看出SYN=1

    第二个报文段中标志位为12对应的二进制为0001 0010,表示SYN=1,ACK=1

    第三个报文段中标志位为10对应的二进制为0001 0000,表示ACK=1

    综合来看,前三个报文段完成了TCP三次握手的连接管理功能。

    同时我们也可以注意一下通信双方的序号和确认号的变化。这里主机H的初始序号是7a 89 25 c1,第二个报文段的确认号信息7a 89 25 c2,与第一个报文段的序号信息相比增加了1。这是因为第一个报文段中的SYN标志位为1,需要消耗一个序号。

    第二个报文段则是服务器发送数据的初始序号为0e 7c ba f5,在第三个报文段中确认号是0e 7c ba f6也比服务器初始序号增加了1,这是因为在第二个报文段中,SYN=1,也消耗掉了一个序号。

    主机H发出的第一个字节的数据序号是7a 89 25 c2,因为第三个报文段仅有ACK=1,它并没有消耗小序号。

  4. 题表中的IP数据报,主机H和服务器分别发送了应用层数据字节数是多少?如果第7个报文段是对第六个报文段的确认,那确认号应该是多少?

    这里我们需要参考TCP报文段中的序号和确认号字段,从第四个报文段开始我们知道是由主机192.168.1.100发送给服务器的,其序号为7a 89 25 c2,而第五个报文段是服务器发回的应答确认,确认号为7a 89 25 da,也就是服务器期望接收来自于主机H的下一个报文段中的第一个字节的序号是7a 89 25 da,二者之间的差值就是主机H向服务器端发送的数据字节大小,也就是536个字节。

    第六个报文段是由服务器向主机H发出的数据,这里我们需要换一种方法来判定本报文段所携带的数据,这里我们使用IP数据报总长度减去IP数据报和TCP报文段的首部长度,剩余的就是TCP报文段的数据,我们看到第六个报文段中IP总长度为02 13,也就是531个字节,我们从中间去20个字节的IP数据报首部长度,再减去20个字节的TCP的首部,从而得到所携带的数据是531-20-20=491个字节。

    我们也可以判定如果第七个报文段是对第六个报文段的确认,确认号Ack字段应该是从0e 7c ba f6开始加上491也就是0e 7c bc e1

  5. TCP报文段的窗口值有什么变化?表示什么意思?

    TCP报文段的窗口值一直在发生变化,从主机H到服务器的窗口值从初始的20 00到11 1c,服务器到主机的窗口尺寸从初始的16 d0变化成00 36

    这些变化也验证了窗口是大小可变的滑动窗口进行流量控制。

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

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

相关文章

高迸发 架构设计方案

前言 ​​在实际生活业务场景开发中,在我们的网站知名度越来越大的时候,随之而来的就是业务体量越来越大,用户群体越来越大,随之而来的技术要求也越来越高,其中核心点对网站的稳定性要求是硬性的。如果一个系统都无法…

新装idea的一些常用设置

新装idea的一些常用设置 新安装的idea常用配置 1、提示内容忽略大小写 File -> Settings -> Editor -> General -> Code Completion -> Match case 2、修改字体大小 File -> Settings -> Editor -> Font -> Size 3、取消启动时自动打开最后开…

阿里云国际站:阿里云计算服务指的是什么?

标题:阿里云计算服务指的是什么? 一、阿里云计算服务的定义   阿里云计算服务,是阿里巴巴集团旗下的云服务平台,提供了从云服务器、云数据库到大数据处理等丰富的云计算服务。它通过构建一种共享的计算资源池,使得用…

《SpringBoot》第05章 配置文件解析

前言 SpringBoot中的application.properties(或application.yaml)文件都是再熟悉不过的了。它是应用的配置文件,我们可以把需要的一些配置信息都写在这个文件里面,需要的时候,我们可以通过Value注解来直接获取即可,那这个文件是什…

deepstream指北——python接口的使用

目录 一、机器配置二、环境配置三、运行实例 一、机器配置 电脑:台式机系统:Ubuntu 20.04.5显卡:GTX 1070,8G显存软件版本:deepstream:6.1.1显卡驱动版本:515.76CUDA版本:11.7.1cud…

基于PyQt5的桌面图像调试仿真平台开发(10)色彩矩阵

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

当赛博朋克碰上小鸡舞 segment anything

Segment Anything能给我们做什么 前言内容具体实现成果 前言 最近,大模型的热度确实是非常非常的高,从chatgpt到segment anything,这些东西整的我这刚入门的小白确实有点懵逼。最近实在是不知道干啥, 想想能不能用大模型整点花活…

Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析

文章目录 一、简介1、BeanFactoryPostProcessor2、BeanPostProcessor 二、BeanFactoryPostProcessor 源码解析1、BeanDefinitionRegistryPostProcessor 接口实现类的处理流程2、BeanFactoryPostProcessor 接口实现类的处理流程3、总结 三、BeanPostProcessor 源码解析 一、简介…

uniapp 之 多端实现图片压缩(含H5实现)

compressImage 说明 文档平台差异说明已标出:官网提供的api uni.compressImage除了H5平台,其余平台都支持,所以我们利用条件编译,然后单独处理一下H5的图片压缩即可。 utils.js 里面封装一下该方法,方便调用 /*** 图…

-Xloggc:d:/gc.log

-Xloggc:d:/gc.log把信息记录成 log文件参数-Xmx20m -Xms20m -XX:NewRatio4 -XX:SurvivorRatio2 -Xss1m -XX:PrintGCDetails -XX:UseSerialGC -XX:PrintCommandLineFlags -Xloggc:d:/gc.log结果[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y3PpljS…

【PyTorch API】 nn.RNN 和 nn.LSTM 介绍和代码详解

文章目录 1. nn.RNN 构建单向 RNN2. nn.LSTM 构建单向 LSTM3. 推荐参考资料 1. nn.RNN 构建单向 RNN torch.nn.RNN 的 PyTorch 链接:torch.nn.RNN(*args, **kwargs) nn.RNN 的用法和输入输出参数的介绍直接看代码: import torch import torch.nn as n…

商业模式画布

商业模式画布给了创业者一个思考的框架,在行动之前充分思考和演练。 文章目录 认识商业模式画布九个组成部分(以Zoom为例拆解)收入成本 九个组成部分的关系总结 认识商业模式画布 九个组成部分(以Zoom为例拆解) 收入 成…

七月创作之星挑战赛开始咯~

活动火热进行中! 欢迎各位大佬积极参与~ 大家请加入卡奥斯开源社区官方社群哦,最新活动实时更新! 还有专属群内福利(蛋糕券、购物卡、周边礼品)等你来拿~ 礼品详情

高效管理工作任务,推荐优秀任务管理软件助力工作效率提升

任务管理软件是一种用于组织任务、将任务分配给个人并监控其进展的软件。该软件可以帮助确保任务在预算内按时完成。它在协同工作环境中特别有用,在这种环境中,多人在处理需要跟踪和监视的任务。 任务管理软件可以帮助简化分配任务和监控任务进度的过程。…

ModaHub魔搭社区:基于阿里云 ACK 搭建开源向量数据库 Milvus

目录 一、准备资源 二、集群创建: 本集群基于Terway网络构建 二、连接刚刚创建的ACK集群 三、部署Milvus数据库 四、优化Milvus配置 简介: 生成式 AI(Generative AI)引爆了向量数据库(Vector Database&#xff0…

STM8低门槛快速入门,类似Arduino封装库模式开发介绍

STM8低门槛快速入门,类似Arduino封装库模式开发介绍 📌STM8外设封装库原项目开源地址:https://github.com/gicking/STM8_templates📍个人整理过的项目地址:https://github.com/perseverance51/STM8-Templates &#x1…

前端开发常用Nginx设置说明

前端部署常用到Nginx,作为前端开发常用的配置不多,担也需要掌握 常见配置说明,这里只列表server模块的核心代码 server {listen 9015; # 端口号server_name 172.16.101.191; # 浏览器访问域名,不配置默认为本服务器地址index in…

redhat6安装mysql8.0.33

1、下载mysql 官网地址:https://downloads.mysql.com/archives/community/ 下载步骤: 过滤操作系统版本 下载后,上传到服务器Downloads目录 2、安装mysql8 解压压缩包 tar -xvf mysql-8.0.31-1.el9.x86_64.rpm-bundle.tar [rootrhel64 …

node搭建一个简单的脚手架

一、什么是脚手架 脚手架(Scaffold)是指在软件开发过程中为提高开发效率而提供的一套基础代码结构、组织规范、开发工具和工程化配置的工具。脚手架可以帮助开发团队快速搭建项目的基础框架,规范项目的开发流程,并提供一些常用的…

指针函数与函数指针

指针函数 指针函数&#xff1a;指针函数是一个函数&#xff0c;返回值是一个指针。 int *fun; //fun是指针变量 int *fun(x,y); //fun是指针函数; #include<iostream> using namespace std;char* day_name() {return("Monday"); //返回地址 }int main() {char…