当前位置: 首页 > news >正文

0718,TCP协议,三次握手,四次挥手

目录

上课喵: 

TCP(Transmission Control Protocol,传输控制协议)的状态迁移图

TCP连接的状态迁移图

状态迁移说明:

注意:

big_htonl.c    字节序转换

addr.c   IP地址的转换

作业喵:

01:OSI模型有哪些层?TCP/IP模型有哪些层?他们之间的对应关系是怎样的?

02:TCP协议如何保证数据的可靠传输?

03:为什么TCP需要三次握手?两次握手为什么不行?

04:TCP断开连接时为什么是4次挥手?为什么主动断开的一方要经历TIME_WAIT状态?

TAS:​编辑

05:一般情况下,在Windows上如何抓包呢?请给出使用方法,并截图抓取QQ消息的演示结果

06:什么是大端模式和小端模式,什么是主机字节序和网络字节序?编写代码,验证一下自己的机器是大端模式还是小端模式?

TAS:

 补:

01:出现大量TIME_WAIT状态怎么处理

02:2MSL

爬东西只能明天了喵

上课喵: 

TCP(Transmission Control Protocol,传输控制协议)的状态迁移图

这图别看,会瞎(不是人画出来的喵!!!!)

TCP(Transmission Control Protocol,传输控制协议)的状态迁移图描述了TCP连接在不同阶段的状态变化及其过渡条件。TCP连接在通信开始时经历了三次握手建立连接,然后进行数据传输,最后进行四次握手断开连接。以下是TCP连接的状态迁移图解释:

TCP连接的状态迁移图
  1. CLOSED:

    初始状态,表示TCP连接处于关闭状态。
  2. LISTEN:

    表示服务器准备好接受传入的连接请求(通过listen()函数进入此状态)。
  3. SYN_SENT:

    客户端发送一个连接请求后进入此状态,等待服务器的确认。
  4. SYN_RECEIVED:

    服务器接收到客户端的连接请求,并发送确认。此时服务器和客户端都已经发送了SYN报文。
  5. ESTABLISHED:

    连接建立成功,双方可以进行数据传输。
  6. FIN_WAIT_1:

    表示一端(通常是客户端)已经发送了连接终止请求(FIN),等待另一端的确认。
  7. CLOSE_WAIT:

    表示一端(通常是服务器)已经收到对方的连接终止请求,并发送了确认,但是还没有发送自己的连接终止请求。
  8. FIN_WAIT_2:

    表示一端已经收到了对方的连接终止请求的确认,等待对方的连接终止请求。
  9. CLOSING:

    表示双方同时发送了连接终止请求(同时发送了FIN报文),但是还没有收到对方的确认。
  10. LAST_ACK:

    表示一端发送了连接终止请求并收到了对方的确认,但是还需要等待最后的确认(ACK)。
  11. TIME_WAIT:

    表示连接已经终止,等待足够的时间以确保远程端收到了连接终止请求的确认。这个状态是为了处理可能出现的延迟报文。
  12. CLOSED:

    最终状态,表示连接彻底关闭。
状态迁移说明:
  • 连接建立阶段:从CLOSEDLISTEN,再到SYN_SENTSYN_RECEIVED,表示TCP连接的建立过程,涉及到三次握手。
  • 数据传输阶段:在ESTABLISHED状态下进行数据传输。
  • 连接终止阶段:从FIN_WAIT_1LAST_ACK,表示连接的断开过程,涉及到四次握手。
  • 连接终止完成:最终回到CLOSED状态,表示连接彻底关闭。
注意:
  • TCP状态迁移图是根据RFC 793定义的TCP协议状态机而来,但实际实现中可能会有一些变化或扩展,例如引入了一些优化的状态或者扩展了某些状态以支持更复杂的应用场景。

这些状态和状态之间的迁移规则是TCP协议在建立和断开连接过程中的基础,确保了可靠的数据传输和连接管理。

big_htonl.c    字节序转换

#include <func.h>int main()
{int num=1234;int* p=&num;printf("*p=%x\n",*p);//主机字节序-->网络字节序 整数int netNum=htonl(num);  printf("num=%08x,netnum=%08x\n",num,netNum);printf("num=%d,netnum=%d\n",num,netNum);//端口号-->网络字节序int port=8080;int netport=htons(port);printf("port=%08x,netport=%08x\n",port,netport);//网络字节序端口-->主机字节序int htport=ntohs(port);printf("htport=%08x\n",htport);return 0;
}

*p=4d2
num=000004d2,netnum=d2040000
num=1234,netnum=-771489

addr.c   IP地址的转换

include <func.h>int main()
{
//点十分-->32位网络字节序const char* ip="192.168.30.129";struct in_addr addr;inet_aton(ip,&addr); printf("addr=%08x\n",addr.s_addr);//32位网络字节序-->点十分char* pip=inet_ntoa(addr);printf("pip:%s\n",pip);return 0;
}

addr=811ea8c0
pip:192.168.30.129

作业喵:

01:OSI模型有哪些层?TCP/IP模型有哪些层?他们之间的对应关系是怎样的?

物理层   光纤电缆,基础设置
数据链路层   MAC地址 网卡,ARG/RARG
网络层    IP地址,定位主机     
传输层    发送传输数据,主机上的一个进程,TCP协议,UDP协议
会话层    创建会话的窗口
表示层    对数据进行加密解密
应用层    数据

物理层,数据链路层,网络层,传输层,应用层(对应会话层+表示层+应用层)

02:TCP协议如何保证数据的可靠传输?

TCP首部:
源地址,目的地址,序号,确认号,偏移长度,窗口,检验和,紧急指针,数据,填充
标志位——FIN,SYN,ACK,PSH,URG,RST

重传机制
RTT>RTO时, 认为报文丢失,重新发送报文

快速重传
三个相同的ACK唤醒该机制,认为报文丢失,重新发送报文

SACK机制
SACK(selection acknownledge)选择性确认,确认收到多个不连续的数据段
丢时的报文在ACK和SACK之间

03:为什么TCP需要三次握手?两次握手为什么不行?

————三次握手流程喵

client-->server   SYN,seq=x(随机)
server-->client   ACK,SYN,seq=y,ack=x+1
client-->server   ACK,ack=y+1

————避免client和server的认知不一致,造成server的资源浪费

情况1:多次发送(发送延迟)
client-->server   SYN   第一次发送   延迟
client-->server   SYN   第二次发送   -->server -->ACK-->client   完成连接
-->server            延迟的SYN到达server,server认为已经连接完毕,等待client传输信息   
server资源浪费

情况2:回复丢失
client-->server  SYN   第一次发送  -->server -->ACK  回复丢失
client认为连接建立失败
server认为连接建立成功,等待client传输信息 
server资源浪费

04:TCP断开连接时为什么是4次挥手?为什么主动断开的一方要经历TIME_WAIT状态?

TIME_WAIT超时丢弃喵

四次挥手
client-->server   FIN   ( FIN_WAIT1  CLOSE_WAIT)
server-->client   ACK  ( FIN_WAIT2
server-->client   FIN   ( TIME_WAIT     LAST_ACK)
client-->server   ACK   ( CLOSED  CLOSED)

为了保证绝大多数情况都能顺利完成四次挥手喵(WHY SAID)
假设删除

情况1:(回复丢失)
client-->server   ACK   ( CLOSED  CLOSED)   丢失了喵
client 状态CLOSED,server接收不到ACK,重发三次FIN
server资源浪费

情况2:(消失的他)
一个和client五组元信息相同的client_sister
client-->server    一起养只小猫 to server   绝交
client_sister  &  server  连接
一起养只小猫 to server   到达 (TIME_WAIT状态,超时一起养小猫邀请失效)
client_sister and server  一起养了小猫
信息错乱喵

TAS:

TCP连接是全双工的连接喵,要关闭两个方向的数据传输

05:一般情况下,在Windows上如何抓包呢?请给出使用方法,并截图抓取QQ消息的演示结果

06:什么是大端模式和小端模式,什么是主机字节序和网络字节序?编写代码,验证一下自己的机器是大端模式还是小端模式?

大端模式——低地址高字节(主机使用)

小段模式——低地址低字节(网络使用)

主机字节序——主机CPU进行数据传输和存储时的采用的字节顺序,有大端序和小端序

网络字节序——在网络进行数据传播时统一使用的字节顺序

#include <func.h>int main()
{int num=1234;int* p=&num;printf("*p=%x\n",*p);return 0;
}
TAS:
大端模式/大端法/Big-Endian: 是指`高位字节`存储在内存的`低地址`端,而低位字节存储在内存的高地址端。
小端模式/小端法/Little-Endian: 和大端法相反,`低位字节`存储在内存的`低地址`端,高位字节存储在内存的高地址端。Eg: 代码示例: 参考我们上课代码
int main(int argc,char*argv[])
{// 先定义一个int数据int num = 0x75767778;// 75 -> 高字节位// 78 -> 低字节位// 小端法: (低地址 存 低字节位) 78 -> 低地址// 78  77  76  75//低地址        高地址// 首地址// 首地址指向78char *c = (char *)&num;// 78 -> 16进制// 0111 1000 -> 二进制// 120  -> 10进制//  x -> ascii码表printf("char : %c \n", *c); // 打印结果x// htonl: 把主机字节序转成网络字节序 (即:小端 -> 大端)int n_num = htonl(num);// 75  76 77 78//低地址        高地址//首地址//首地址指向75 char *c2 = (char *) &n_num;// 75 -> 十六进制// 0111 0101 -> 二进制// 117 -> 十进制// u -> ascii码表printf("char : %c \n", *c2);//打印结果ureturn 0;
}

 补:

01:出现大量TIME_WAIT状态怎么处理

调整MSL的时间,排查产生的原因

02:2MSL

2MSL(Two Maximum Segment Lifetime)是TCP协议中的一个重要概念,指的是TIME_WAIT状态的持续时间。在TCP连接中,TIME_WAIT状态是在连接关闭后保持一段时间的状态,以确保在网络中传输的所有数据包都被确认。

  • MSL(Maximum Segment Lifetime)指的是TCP报文在网络上允许存活的最长时间。2MSL则是TIME_WAIT状态的持续时间,通常被定义为2倍的MSL。
  • MSL的具体值取决于操作系统和网络环境,一般情况下在几分钟到几十分钟之间。

相关文章:

0718,TCP协议,三次握手,四次挥手

目录 上课喵&#xff1a; TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;的状态迁移图 TCP连接的状态迁移图 状态迁移说明&#xff1a; 注意&#xff1a; big_htonl.c 字节序转换 addr.c IP地址的转换 作业喵&#xff1a; …...

如何安装Visual Studio Code

Visual Studio Code&#xff08;简称 VS Code&#xff09; Visual Studio Code 是一款由微软开发的免费、开源的现代化轻量级代码编辑器。 主要特点包括&#xff1a; 跨平台&#xff1a;支持 Windows、Mac 和 Linux 等主流操作系统&#xff0c;方便开发者在不同平台上保持一…...

vi 编辑器快捷生成 main 函数和基本框架

step1: 执行 sudo vi /etc/vim/vimrc &#xff08;修改vimrc需要管理员权限&#xff1a;sudo&#xff09; step2:输入用户密码&#xff0c;回车, 编辑vimrc文件 step3:在尾行输入以下代码&#xff08;可复制&#xff09; map mf i#include<stdio.h><ESC>o#includ…...

npm相关指令

​ 切换镜像 腾讯镜像 npm config set registry https://mirrors.cloud.tencent.com/npm/ 淘宝镜像&#xff08;新版&#xff09; npm config set registry https://registry.npmmirror.com 淘宝镜像&#xff08;旧版&#xff0c;已弃用&#xff09; npm config set regist…...

为什么不要碰自媒体

要是失业了&#xff0c;搞自媒体&#xff0c;可行吗&#xff1f;毫无希望&#xff01; 如今的自媒体早卷得不成样子了&#xff0c;很难再有机会&#xff0c;根本原因在于几乎没有增量用户的同时&#xff0c;存量用户也不再有剩余时间&#xff0c;全量用户的时间早已被几个自媒…...

酷炫末世意境背景404单页HTML源码

源码介绍 酷炫末世意境背景404单页HTML源码&#xff0c;背景充满着破坏一切的意境&#xff0c;彷佛末世的到来&#xff0c;可以做网站错误页或者丢失页面&#xff0c;将下面的代码放到空白的HTML里面&#xff0c;然后上传到服务器里面&#xff0c;设置好重定向即可 效果预览 …...

PHP 调用 1688 详情 API 接口的实战攻略

在电商领域&#xff0c;获取准确和详细的商品信息对于业务的发展至关重要。1688 作为国内知名的批发采购平台&#xff0c;其详情 API 接口为开发者提供了丰富的数据资源。本文将为您详细介绍如何使用 PHP 调用 1688 详情 API 接口。 一、前期准备 注册 1688 开放平台账号&#…...

SAP ABAP性能优化

1.前言 ABAP作为SAP的专用的开发语言&#xff0c;衡量其性能的指标主要有以下两个方面&#xff1a; 响应时间&#xff1a;对于某项特定的业务请求&#xff0c;系统在收到请求后需要多久返回结果 吞吐量&#xff1a;在给定的时间能&#xff0c;系统能够处理的数据量 2. ABAP语…...

【鸿蒙学习笔记】构建布局・选项卡 (Tabs)

官方文档&#xff1a;选项卡 (Tabs) 目录标题 底部导航顶部导航侧边导航限制导航栏的滑动切换固定导航栏・可滚动导航栏自定义导航栏切换至指定页签 底部导航 Entry Component struct Bujv_tabs {build() {Column() {Tabs({ barPosition: BarPosition.End }) {TabContent() {T…...

独立游戏《星尘异变》UE5 C++程序开发日志5——实现物流系统

目录 一、进出口清单 二、路径计算 三、包裹 1.包裹的数据结构 2.包裹在场景中的运动 四、道路 1.道路的数据结构 2.道路的建造 3.道路的销毁 4.某个有道路连接的建筑被删除 作为一个工厂类模拟经营游戏&#xff0c;各个工厂之间的运输必不可少&#xff0c;本游戏采用的…...

Web开发:<br>标签的作用

br作用 介绍基本用法常见用途注意事项使用CSS替代 介绍 在Web开发中&#xff0c;<br> 标签是一个用于插入换行符的HTML标签。它是“break”的缩写&#xff0c;常用于需要在文本中强制换行的地方。<br> 标签是一个空标签&#xff0c;这意味着它没有结束标签。 基本…...

DVC+Minio

由于参数文件比较大&#xff0c;因此onnx、engine等大文件弃用LFS管理&#xff0c;改用dvc管理&#xff1a; minio就是存储用的 启动miniosudo netstat -ntpl#查看端口号 sudo kill -9 $(sudo lsof -i:5061 -t) 关闭端口对应进程 ./minio server --console-address ":6570…...

C++内存管理(区别C语言)深度对比

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言 前面已经介绍了类和对象&#xff0c;对C面向对象编程已经有了全面认识&#xff0c;接下来要学习对语言学习比较重要的是对内存的管理。 一、内存的分区 代码区&#xff1a;存放程序的机器指令&#xff0c;通常是可…...

手把手带你写一个精简版 HashMap 的 put 方法

&#x1f446;&#x1f3fb;&#x1f446;&#x1f3fb;&#x1f446;&#x1f3fb;关注博主&#xff0c;让你的代码变得更加优雅。 前言 HashMap 大家工作中遇到的太多了&#xff0c;已经成了必须使用的类了&#xff0c; 在面试的时候 HashMap 基本是必问题&#xff0c;但是…...

【面试题】数据结构:堆排序的排序思想?

堆排序的排序思想&#xff1f; 堆排序是一种高效的排序算法&#xff0c;其基本思想是利用堆这种数据结构来实现排序。堆是一种特殊的完全二叉树&#xff0c;通常用数组来表示。堆排序的基本步骤如下&#xff1a; 1. 构建初始堆&#xff1a; 将待排序的数组转换成一个最大堆&a…...

PyTorch 深度学习实践-循环神经网络基础篇

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记基于RNNCell实现总代码 基于RNN实现总代码 含嵌入层的RNN网络嵌入层的作用含嵌入层的RNN网络架构总代码 其他RNN扩展基本注意力机制自注意力机制&#xff08;Self-Attention&#xff09;自注意力计算多头注意力机制&#xf…...

vue实现可拖拽dialog封装

一、实现modal弹窗组件 <template><divv-if"visible"class"customer-dialog"id"customer-dialog":style"dialogStyles"v-dialogDrag:[dialogDrag]><div class"dialog-container"><divclass"dial…...

本地多模态看图说话-llava

其中图片为bast64转码&#xff0c;方便json序列化。 其中模型llava为本地ollama运行的模型&#xff0c;如&#xff1a;ollama run llava 还有其它的模型如&#xff1a;llava-phi3&#xff0c;通过phi3微调过的版本。 实际测试下来&#xff0c;发现本地多模型的性能不佳&…...

人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解。在机器学习和深度学习领域&#xff0c;模型的训练目标是找到一组参数&#xff0c;使得模型能够从训练数据中学习到有用的模式&am…...

Java异常抛出与处理方法

在Java编程中,异常处理是一个非常重要的部分。通过正确的异常处理,我们可以提高程序的健壮性和可靠性,避免程序在运行过程中出现意外的崩溃。本文将详细讲述Java异常的抛出与处理方法,并通过示例代码进行说明。 一、Java异常的分类 Java中的异常体系结构可以分为三类: 检…...

兼容性测试主要有什么类型?

兼容性测试的类型 有两种类型的兼容性测试。这是一个快速细分。 1、前向兼容性测试 向前兼容性测试或向上兼容性测试可确保当前软件版本在相关组件(例如操作系统、浏览器和第三方库)的未来版本中保持功能。此类测试对于在系统升级期间保持稳定性和用户体验至关重要。 例如&…...

设计模式--组合模式

组合模式&#xff08;Composite Pattern&#xff09;详解 组合模式是一种结构型设计模式&#xff0c;它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 适用场景 需要表示对象的部分-整体层次结构时&am…...

ArduPilot开源代码之AP_DAL_RangeFinder

ArduPilot开源代码之AP_DAL_RangeFinder 1. 源由2. 框架设计2.1 枚举 Status2.2 公有方法2.3 私有成员变量 3. 重要例程3.1 应用函数3.1.1 ground_clearance_cm_orient3.1.2 max_distance_cm_orient3.1.3 has_orientation3.1.4 get_backend 3.2 其他函数3.2.1 AP_DAL_RangeFind…...

SpringCloud教程 | 第九篇: 使用API Gateway

1、参考资料 SpringCloud基础篇-10-服务网关-Gateway_springcloud gateway-CSDN博客 2、先学习路由&#xff0c;参考了5.1 2.1、建了一个cloudGatewayDemo&#xff0c;这是用来配置网关的工程&#xff0c;配置如下&#xff1a; http://localhost:18080/aaa/name 该接口代码如…...

数据结构——hash(hashmap源码探究)

hash是什么&#xff1f; hash也称为散列&#xff0c;就是把任意长度的输入&#xff0c;通过散列算法&#xff0c;变成固定长度的输出&#xff0c;这个输出值就是散列值。 举例来说明一下什么是hash&#xff1a; 假设我们要把1~12存入到一个大小是5的hash表中&#xff0c;我们…...

国产麒麟、UOS在线打开pdf加盖印章

PageOffice支持两种电子印章方案&#xff0c;可实现对Word、Excel、PDF文档加盖PageOffice自带印章或ZoomSeal电子印章&#xff08;全方位保护、防篡改、防伪造&#xff09;。Word和Excel的盖章功能请参考&#xff1a;Word和Excel加盖印章和签字功能 &#xff08;目前只支持win…...

破解反爬虫策略 /_guard/auto.js(二)实战

这次我们用上篇文章讲到的方法来真正破解一下反爬虫策略&#xff0c;这两个案例是两个不同的网站&#xff0c;一个用的是 /_guard/auto.js&#xff0c;另一个用的是/_guard/delay_jump.js。经过解析发现这两个网站用的反爬虫策略基本是一模一样&#xff0c;只不过在js混淆和生成…...

同样是人工智能 客户在哪儿AI和GPT等大模型有什么不同

书接上回。为了统一回答朋友们的疑惑&#xff0c;此前的两篇文章&#xff0c;着重讲述了客户在哪儿AI的企业全历史行为数据和企业信息查询平台上的数据的区别&#xff0c;以及客户在哪儿AI的ToB获客服务和AI外呼机器人的获客服务的不同。本期接着讲——客户在哪儿AI VS 大模型&…...

AES Android IOS H5 加密方案

前景&#xff1a; 1、本项目原有功能RSA客户端对敏感信息进行加密 2、本次漏洞说是服务端返回值有敏感信息&#xff0c;需要密文返回 3、最初只跟H5联调成功&#xff0c;后续APP联调失败(H5和APP的需求排期不一致)&#xff0c;没关注到通用性 方案&#xff1a; 本次方案不…...

一文了解变阻器和电位器的定义、原理、应用及其对比

变阻器的定义 两端可变电阻器&#xff08;称为变阻器&#xff09;利用电阻来调节电流。电阻丝环绕在陶瓷或瓷器等绝缘芯上。当刮水器沿着电阻丝移动时&#xff0c;电路的有效电阻会发生变化。因此&#xff0c;它提供了精确的电流控制。调光器、电机速度控制器和加热元件使用变…...

学院网站建设/cnzz数据统计

V831在jupyter 显示拍摄图像使用方法遇到的问题及解决方法折腾了好久终于成功了。不废话看效果 使用方法 怎么做到的呢&#xff1f;一起来吧&#xff0c;先复习一下jupyter怎么用。 本机CMD 输入jupyter notebook 启动jupyter V831启动服务 maixpy3_rpycs 在jupyter建一个网…...

2023年长春疫情最新规定公告/seo视频教程

geocat是ncl语言的计算库&#xff0c;python可调用。用于处理气象文件&#xff08;.nc&#xff09;、可视化等 官网和下载指南 1. 使用conda安装到已有环境中 conda activate py37 # 进入环境 conda config --add channels conda-forge # 添加channel conda install -c cond…...

不知此网站枉做男人/沈阳企业网站seo公司

设备树的历史 1、kernel最早加入设备树的历史得追溯到v2.6.23&#xff0c;从这个版本开始&#xff0c;在driver目录下多了一个of目录。当然&#xff0c;此时只是引入一些新想法而已。这距离linus大怒说出(2011年3月17日)&#xff1a;this whole ARM thing is a f*cking pain in…...

上海网站建设维护/seo是什么服

Flutter基础—你好&#xff0c;Flutter&#xff01; Flutter基础—开发环境与入门 Flutter基础—第一个Flutter实例 Flutter基础—质感设计 Flutter基础—手势处理 Flutter基础—应用实例 Flutter基础—根据用户输入改变控件 Flutter基础—常用控件之容器 Flutter基础—…...

Wordpress主题禁用水平滚动/河南网站排名优化

微信搜索【程序员囧辉】&#xff0c;关注这个坚持分享技术干货的程序员。 ​前言 哨兵和集群的两种高可用解决方案&#xff0c;但是两者在保证高可用上的实现基本是一致的&#xff0c;因为集群模式的高可用解决方案基本就是“照搬”哨兵模式的。 集群可以认为就是用来代替哨兵的…...

华讯网络工程师待遇/晋城seo

Develeper app上没有找到 网页登录开发者账号也没有找到 打电话给苹果&#xff0c;说是在iPhone 设置 --> apple id --> 订阅。我点击进去显示“您没有任何订阅项目” 登录apple developer的网址&#xff0c;要苹果打电话给我。貌似下午4点以后&#xff0c;苹果就不会…...