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 0

Client推送数据
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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32无法烧写程序的故障排除

如果你在使用STM32微控制器时遇到无法烧写程序的问题,可以按以下步骤进行故障排除: 1. 确认硬件连接 检查电源:确保STM32板子正确供电。调试器连接:确认ST-LINK调试器或其他编程工具与STM32开发板的连接无误,尤其是S…

如何基于 Python 快速搭建 QQ 开放平台 QQ 群官方机器人详细教程(更新中)

注册 QQ 开放平台账号 账号注册 QQ 机器人:一个机器人可以被添加到 群聊/频道 内对话,QQ 用户也可以直接跟机器人 单独对话。 开发者账号主体要求 单聊对话:【定向邀请】 群聊场景:仅支持企业主体【个人主体暂不支持】 频道场…

基于uni-app与图鸟UI打造的各领域移动端模板大赏

随着移动互联网的迅猛发展,各类移动端应用层出不穷,为了帮助企业快速搭建高效、美观的移动平台,我们基于强大的uni-app与图鸟UI,精心打造了不下于40套覆盖多个领域的移动端模板。今天,就让我们一起领略这些模板的风采吧…

淘宝镜像地址失效

1. 使用nvm安装node时候报错 报错内容 Get "https://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": tls: failed to verify certificate: x509: certificate has expired or is not yet valid:报错原因 淘宝镜像地址的证书过期了 解决 找到nvm安装的根目…

Java-集合类-Arrays.asList()使用需要注意的大坑

Arrays.asList使用需要注意的大坑 大坑1.不可修改列表大小&&原始数组与列表共享数据2.对于基本类型数组的使用限制 两个错误案例wrong1wrong2 ​ Arrays.asList() 是 Java 中一个常用的方法,它 用于将数组转换为列表(List)。这个方…

Bybatis动态SQL的绑定和公共sql语句片段

Mybatis除了大部分动态标签,最后还有三个标签,分别是bind,sql和include: ①bind:这个标签作用就是将OGNL标签里的值,进行二次加工,在绑定到另一个变量里,供其他标签使用 调用getUse…

Java—集合简述

集合类继承结构图 Collection|---------------------| | | Set List Queue| | | SortedSet ArrayList Deque| LinkedList | NavigableSet Vector ArrayDeque| Stack | TreeSet …

数据结构笔记-2、线性表

2.1、线性表的定义和基本操作 如有侵权请联系删除。 2.1.1、线性表的定义: ​ 线性表是具有相同数据类型的 n (n>0) 个数据元素的有限序列,其中 n 为表长,当 n 0 时线性表是一个空表。若用 L 命名线性表,则其一般表示为&am…

【软件工程导论】——期末复习(冲刺篇)

📖 前言:快考试了,做篇期末总结,都是重点与必考点。 题型:材料分析题、简答题、看图分析题 课本: 目录 🕒 1. 软件生存周期与软件过程🕘 1.1 软件生存周期🕘 1.2 传统…

Java老人护理上门服务类型系统小程序APP源码

🌸 老人上门护理服务系统:温暖与专业并存 🌸 一、🏠 走进老人上门护理服务系统 随着社会的快速发展,我们越来越关注老年人的生活质量。老人上门护理服务系统应运而生,它结合了现代科技与人性化服务&#…

webpack代码分割

webpack代码分割方式 entry配置:通过多个 entry 文件来实现动态加载(按需加载):通过主动使用import来动态加载抽取公共代码:使用splitChunks配置来抽取公共代码 基础概念 概念含义Entry入口,Webpack 执行构建的第一步将从 Entr…

Adobe Illustrator (AI)小技巧总结

AI2024(64bit) Adobe Illustrator 软件安装包下载地址: 百度网盘下载https://pan.baidu.com/s/1C10-2JVN1rxFF5VFRuV2Yw?pwdSIMS 1.效果-扭曲与变换-变换,两个图形组合(CtrlG)中心点在中间 例:角度7.5副本24半圆48格…

pdf格式转成jpg图片,pdf格式如何转jpg

pdf转图片的方法,对于许多人来说可能是一个稍显陌生的操作。然而,在日常生活和工作中,我们有时确实需要将pdf文件转换为图片格式,以便于在特定的场合或平台上进行分享、展示或编辑。以下,我们将详细介绍一个pdf转成图片…

网工内推 | 外企、上市公司运维工程师,有软考中高项证书优先

01 优尼派特(苏州)物流有限公司 🔷招聘岗位:软件运维测试工程师 🔷任职要求: 1、负责公司自主研发的软件售后服务工作, 包括软件的安装, 调试, 升级,培训, 参数配置, 需求与Bug的处理; 2、负责数据库升级及…

Joplin Typora 粘贴图片 | 当使用Typora作为Joplin编辑器时,如何粘贴图片并上传到Joplin服务器,替换链接

一、背景 当我们使用Joplin时,上传图片时会自动上传到Joplin服务器并替换链接 但是Joplin的编辑器不好用,我更习惯用Typora来编辑, 然而Typora中上传的图片只能在本地,无法上传到Joplin服务器,在其他客户端也看不到图片…

快速理解 Node.js 版本差异:3 分钟指南

Node.js 是一个广泛使用的 JavaScript 运行时环境,允许开发者在服务器端运行 JavaScript 代码。随着技术的发展,Node.js 不断推出新版本,引入新特性和改进。了解不同版本之间的差异对于开发者来说至关重要。以下是一个快速指南,帮…

什么是相对路径?什么是绝对路径?打包时路径怎么搞?

简单点说: 绝对路径:绝对路径是一个完整的路径,从根目录开始一直到目标文件或目录的路径。通常我们直接使用"/ "代表从根目录开始的目录路径。它提供了文件或目录在文件系统中的确切位置,与当前工作目录无关。绝对路径…

华媒舍:15种媒体推广普遍不正确及解决方法

做为新闻媒体推广的重要一环,主流媒体推广在这个时代仍然发挥着重要的作用。由于种种原因,大家在主流媒体推广中常常做出各种各样不正确。为了能帮助广大推广工作人员们更好地进行主流媒体推广,本文可能详细介绍15种常见的错误,并…

修改版的VectorDBBench更好用

原版本VectorDBBench的几个问题 在这里就不介绍VectorDBBench是干什么的了,上官网即可。 1.并发数设置的太少 2.测试时长30秒太长 3.连接milvus无用户和密码框,这个是最大的问题 4.修改了一下其它参数 由于很多网友发私信问一些milvus的相关技术问…

史上最全,呕心沥血总结oracle推进SCN方法(八)

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享。前面介…