IPTCP知识

1. IP:

  • IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”
  • IP地址分类:A类地址、B类地址、C类地址、D类地址、E类地址
    • A类地址分配给规模特别大的网络使用,B类地址分配给一般的中型网络,C类地址分配给小型网络,如局域网,C类地址分配给小型网络,如局域网。
  • IP地址 = 网络地址 + 主机地址
    • 一个C类IP地址:192.168.1.1,网络地址:192.168.1.0、主机地址:0.0.0.1

2. 子网掩码:

  • 子网掩码是一个32位的2进制数 ,它必须结合IP地址一起使用。
  • 子网掩码只有一个作用,就是将某个IP地址划分成“网络地址”和“主机地址”两部分
    • 原因:很多时候,你并不知道这个IP地址究竟是A类、B类还是C类,子网掩码的作用就出现了,子网掩码通过和IP地址的“与”运算,求出主机地址是多少
  • 计算公式:网络地址 = IP & 子网掩码

  • 默认子网掩码

广播地址:

  • 广播地址是专门用于同时向网络中所有工作站进行发送的一个地址
  • 广播地址是该子网主机地址全1的地址,即子网中最大的地址
  • 计算方式:广播地址 = (~子网掩码) | 网络地址

参考文章:

【计算机网络】IP地址和子网掩码的关系_子网掩码和ip地址的关系-CSDN博客

3. TCP:

        它是一个面向连接的可靠的传输协议。既然是一个可靠的传输协议就需要对数据进行确认。

TCP报文头部:

TCP三次握手详解-深入浅出:

TCP三次握手详解-深入浅出(有图实例演示)-CSDN博客

tcpdump命令观察三次握手:

tcpdump -i lo -nn port 82

        第三次握手tcpdump显示的是相对的顺序号。为了便于观察我们需要把tcpdump的顺序号变为绝对的顺序号,需要加-S参数。

tcpdump -i lo -nn port 82 -S

一段报文:

tcpdump -i lo -nn  port 82 -S报文分析:Client第一次握手: SYN      【mss 最大报文段长度 sackOK 发送端支持并同意使用SACK nop是一个空操作选项  wscale 发送端使用的窗口扩大因子为2 】
11:11:05.489187 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [S], seq 543067661, win 43690, options [mss 65495,sackOK,TS val 2727838923 ecr 0,nop,wscale 7], length 0
Server第一次握手(第二次握手): ACK + SYN
11:11:05.489193 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [S.], seq 3824468340, ack 543067662, win 43690, options [mss 65495,sackOK,TS val 2727838923 ecr 2727838923,nop,wscale 7], length 0
Client第二次握手(第三次握手):ACK
11:11:05.489201 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824468341, win 342, options [nop,nop,TS val 2727838923 ecr 2727838923], length 0Client推送数据
11:11:05.489218 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [P.], seq 543067662:543068498, ack 3824468341, win 342, options [nop,nop,TS val 2727838923 ecr 2727838923], length 836
11:11:05.489221 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [.], ack 543068498, win 355, options [nop,nop,TS val 2727838923 ecr 2727838923], length 0
11:11:05.502259 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824468341:3824469504, ack 543068498, win 355, options [nop,nop,TS val 2727838936 ecr 2727838923], length 1163
11:11:05.502263 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824469504, win 1365, options [nop,nop,TS val 2727838936 ecr 2727838936], length 0
11:11:05.502289 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824469504:3824470528, ack 543068498, win 355, options [nop,nop,TS val 2727838936 ecr 2727838936], length 1024
11:11:05.502292 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824470528, win 1383, options [nop,nop,TS val 2727838936 ecr 2727838936], length 0
11:11:05.503068 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824470528:3824471552, ack 543068498, win 355, options [nop,nop,TS val 2727838936 ecr 2727838936], length 1024
11:11:05.503071 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824471552, win 1399, options [nop,nop,TS val 2727838936 ecr 2727838936], length 0
11:11:05.503079 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824471552:3824472576, ack 543068498, win 355, options [nop,nop,TS val 2727838936 ecr 2727838936], length 1024
11:11:05.503081 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824472576, win 1415, options [nop,nop,TS val 2727838936 ecr 2727838936], length 0
11:11:05.503100 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824472576:3824473600, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838936], length 1024
11:11:05.503101 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824473600, win 1431, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503108 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824473600:3824474624, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503110 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824474624, win 1447, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503117 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824474624:3824475648, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503118 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824475648, win 1463, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503153 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824475648:3824476672, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503155 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824476672, win 1479, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503161 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824476672:3824477696, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503163 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824477696, win 1495, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503169 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824477696:3824478720, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503171 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824478720, win 1511, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503177 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824478720:3824479744, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503179 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824479744, win 1527, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503185 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824479744:3824480768, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503186 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824480768, win 1543, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503193 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824480768:3824481792, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503195 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824481792, win 1559, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503201 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824481792:3824482816, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503203 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824482816, win 1575, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503209 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824482816:3824483840, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.503211 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [.], ack 3824483840, win 1591, options [nop,nop,TS val 2727838937 ecr 2727838937], length 0
11:11:05.503217 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [P.], seq 3824483840:3824484864, ack 543068498, win 355, options [nop,nop,TS val 2727838937 ecr 2727838937], length 1024
11:11:05.504534 IP 10.0.8.11.60774 > 10.0.8.11.82: Flags [F.], seq 543068498, ack 3824495906, win 1783, options [nop,nop,TS val 2727838938 ecr 2727838937], length 0
11:11:05.504540 IP 10.0.8.11.82 > 10.0.8.11.60774: Flags [.], ack 543068499, win 355, options [nop,nop,TS val 2727838938 ecr 2727838938], length 0

4. TCP窗口机制:

4.1  窗口机制的由来与概念:

如果每次传输数据只能发送一个MSS,就等待接收方的ACK,会极大的影响传输的速率。所以在发送数据时,最好将所有的数据全部发送出去,然后再一起确认。但是现实中确实会存在一些限制:

    • 接收方的缓存(接收窗口)可能已经满了,无法接收数据。
    • 网络的带宽也不一定足够大,一次发太多会导致丢包事故。

一次性能发送的数据量就是TCP的发送窗口。(TCP窗口的概念)

TCP在进行数据传输时,都是先将数据放在数据缓冲区中,TCP维护了两个缓冲区,发送方缓冲区和接收方缓冲区。

    • 发送方缓冲区:用于存储"已经准备就绪数据"和"发送了但是没有被确认"的数据。
    • 接收方缓冲区:用于存储"已经被接收但是还没有被用户进程消费"的数据。

4.2 窗口分类:

  • 固定的窗口,窗口大小是指我们一次传输几个数据。
  • 滑动的窗口

4.3 滑动窗口机制:

滑动窗口机制是TCP的一种流量控制方法,该机制允许发送方,在停止并等待确认前,连续发送多个分组,而不必每发送一个分组就停下来等待确认,从而增加数据传输的速率,提高应用的吞吐量。

滑动窗口下,TCP包的四种状态:
  • 已发送并且已经确认的包。
  • 已发送但是没有确认的包。
  • 未发送但是可以发送的包。
  • 不允许被发送的包。
滑动窗口下,几个窗口的概念:
  • 接收方窗口:由接收方通告窗口的大小,这个窗口称为提出窗口,也成接收方窗口。接收方提出的窗口,受被接收的缓冲区影响,如果数据没有被用户进程使用,那么接收方通告的窗口就会相应得到减小。
  • 发送窗口取决于接收方窗口的大小。
  • 可用窗口的大小 = 接收方窗口的大小 - 发送但是没有被确认的数据包大小。

滑动窗口机制示意流量图:

滑动窗口的动态性:

零窗口(TCP Zero Window):

在接收方窗口大小变为0的时候,发送方就不能再发送数据了。但是当接收方窗口恢复的时候发送方要怎么知道那?在这个时候TCP会启动一个零窗口(TCP Zero Window)定时探测器,向接收方询问窗口大小,当接收方窗口恢复的时候,就可以再次发送数据。

 参考文章:https://blog.csdn.net/weixin_39666931/article/details/111108341

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

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

相关文章

Day 29:1600. 王位继承顺序

Leetcode1600. 王位继承顺序 一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点,这个家庭里有人出生也有人死亡。 这个王国有一个明确规定的王位继承顺序,第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) ,给…

DN-DETR

可以看到,与 DAB-DETR 相比,最大的差别仍然在 decoder 处,主要是 query 的输入。DN-DETR 认为可以把对 offsets 的学习,看作一种对噪声学习的过程,因此,可以直接在 GT 周围生成一些 noised boxes&#xff0…

ASP.NET Core 6.0 使用 Log4Net 和 Nlog日志中间件

前言 两年前,浅浅的学过 .NET 6,为啥要记录下来,大概是为了以后搭架子留下引线,还有抛砖引玉。 1. 环境准备 下载 建议使用 Visual Studio 2022 开发版 官网的下载地址:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具借助 Visual Studio 设计,具有自动完成…

【MySQL】 -- 事务

如果对表中的数据进行CRUD操作时,不加控制,会带来一些问题。 比如下面这种场景: 有一个tickets表,这个数据库被两个客户端机器A和B用时连接对此表进行操作。客户端A检查tickets表中还有一张票的时候,将票出售了&#x…

面试官:JavaScript执行机制中的闭包?

前言 JavaScript 中的闭包指的是一个函数以及其捆绑的周边环境状态的引用的组合。闭包可以让开发者从内部函数访问外部函数的作用域,即使外部函数已经执行完毕 今天我们通过JavaScript执行机制来聊聊闭包 正文 首先来分析这段代码的执行机制,这段代码…

太牛了!AI换脸数字人,限制解除,免费用!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 今天给大家安利一款美图公司出品的神器,功能限制完全解除,可以免费使用AI换脸数字人、AI提词器、AI脚本、AI抠图、AI清除、AI封面等超多超实用功能,…

Freertos-----任务之间的消息传递(使用消息队列信号量方法)

这次来分享任务之间的数据传递的方法,方法有很多种,我展示2种,让大家对freertos有更深刻的印象 目录 消息队列 信号量 消息队列 首先直接打开普中的例程,然后在里面加上ADC的驱动代码,先初始化外设先,我…

【ARMv8/ARMv9 硬件加速系列 1 -- SVE | NEON | SIMD | VFP | MVE | MPE 基础介绍】

文章目录 ARM 扩展功能介绍VFP (Vector Floating Point)SIMD (Single Instruction, Multiple Data)NEONSVE (Scalable Vector Extension)SME (Scalable Matrix Extension)CME (Compute Matrix Engine)MVE (M-profile Vector Extension)MPE (Media Processing Engine)总结 ARM 扩…

【刷力扣】23. 合并 K 个升序链表(dummy节点技巧 + 分治思维 + 优先队列)

目录 一、合并升序链表问题二、题目:[21. 合并两个有序链表](https://leetcode.cn/problems/merge-two-sorted-lists/description/)1、掌握dummy节点的技巧 三、题目:[23. 合并 K 个升序链表](https://leetcode.cn/problems/merge-k-sorted-lists/descri…

ASP.NET Core 6.0 启动方式

启动方式 Visualstudio 2022启动 IIS Express IIS Express 是一个专为开发人员优化的轻型独立版本的 IIS。 借助 IIS Express,可以轻松地使用最新版本的 IIS 开发和测试网站。 控制台版面 直接在浏览器输入监听的地址,监听的是 http://localhost:5137 脚本启动 dotnet run…

Dockerfile 自定义镜像

大家好 , 今天我要和大家分享一个现代软件开发中不可或缺的工具 - Docker . 在这个快速发展的技术时代 , 我们经常面临着应用部署的复杂性、环境差异以及不同操作系统之间的兼容性问题 . 这些问题不仅消耗大量时间 , 还可能导致项目延期和成本增加 . Docker 的出现解决了我们在…

成都晨持绪:现在的抖音网店怎么做更快起店

在当今社交媒体的浪潮中,抖音已经成为一个不可忽视的电商平台。对于想要快速起步的抖音网店来说,掌握一些关键策略至关重要。 首要的是定位清晰。你的网店需要有一个鲜明的主题,这可以是某一特定领域的产品,如美妆、服饰或是手工艺…

银河麒麟V10安装docker和docker-compose

1. 说明 系统镜像使用的是Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso如果是在VMware中安装这个系统,需选择Ubuntu,如果选Centos会有问题。 尝试使用在线方式安装docker,报了很多错误,比较麻烦,建议使用离…

分享由AI制定一个商城网站的开发计划及推荐的开发语言

商城网站开发计划 一、项目概述 本商城网站开发计划旨在创建一个功能齐全、用户友好的在线购物平台,为顾客提供商品浏览、搜索、购物车管理、订单跟踪、在线支付等服务。商城将支持多种商品分类,包括但不限于电子产品、家居用品、服饰鞋帽等。 二、开…

数据结构【二叉树】

前言 我们在前面学习了使用数组来实现二叉树,但是数组实现二叉树仅适用于完全二叉树(非完全二叉树会有空间浪费),所以我们本章讲解的是链式二叉树,但由于学习二叉树的操作需要有一颗树,才能学习相关的基本…

【Web APIs】DOM 文档对象模型 ④ ( querySelector 函数 | querySelectorAll 函数 | NodeList 对象 )

文章目录 一、querySelector 函数1、querySelector 函数简介2、完整代码示例 二、querySelectorAll 函数1、querySelectorAll 函数简介2、完整代码示例 三、NodeList 对象1、NodeList 对象简介2、完整代码示例 本博客相关参考文档 : WebAPIs 参考文档 : https://developer.moz…

Java中将文件转换为Base64编码的字节码

在Java中,将文件转换为Base64编码的字节码通常涉及以下步骤: 读取文件内容到字节数组。使用java.util.Base64类对字节数组进行编码。 下面是一个简单的Java示例代码,演示如何实现这个过程: import java.io.File; import java.io…

【HarmonyOS NEXT】鸿蒙 如何在包含web组件的页面 让默认焦点有效

页面包含web组件Button组件等,把页面的默认焦点放到Button组件上,不起效果。 因为web组件默认会在组件加载完成后获取焦点; 可以在web的网页加载完成时onPageEnd回调中,将设置默认获焦的组件通过focusControl.requestFocus方法主…

gitlab升级16.11.3-ee

背景 这是事后一段时间补充记录的博客。 升级目的:修补漏洞CVE-2024-4835 未经认证的威胁攻击者能够利用该漏洞在跨站脚本 (XSS) 攻击中,轻松接管受害者账户。 gitlab版本为14.6.2-ee升级至16.11.3-ee 思路 翻阅文档找升级方法及升级版本路径。使用…

切割游戏介绍

简介 上大学时,在学校实验室里玩过一个貌似使用VC写的小游戏,一个小球在界面上四处游荡,玩家使用鼠标切割背景,将背景切割剩余到一定的百分比后,就胜利了,后边的背景图会全部展示出来。 使用qt的qml技术&a…