嵌入式学习——3——TCP-UDP 数据交互,握手,挥手

1、更新源

cd /etc/apt/

sudo cp sources.list sources.list.save               将原镜像备份

sudo vim sources.list                                           将原镜像修改成阿里源/清华源,如所述

阿里源

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

清华源

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

上述操作完毕后,保存退出,执行下列:

sudo apt-get update

2、wireshark使用 抓包工具

1、安装

1) wireshark的官方下载网站:www.wireshark.org/

2) Linux sudo apt install wireshark

3) 启动sudo wireshark

设置中文 Edit->Preferences->Appaerance->Language->Chinese

2、抓包

  1. wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。
  2. 双击需要的网卡,开始抓包

3. wireshark与对应的OSI七层模型

服务器和客户端的代码不能都运行在ubuntu,因为wireshark抓的是流经真实网卡的数据包。

若将服务器客户端都运行在ubuntu,数据直接经过虚拟网卡通信,而不会经过真实网卡。

4、包头分析

4.1 以太网头

以太网中封装了源mac地址以及目的mac地址,还有ip类型,以太网又称之为mac头

0X0800 只接收发往本机的mac的ip类型的数据帧 

0X0806 只接收发往本机的ARP类型的数据帧

0x8035 只接受发往本机的RARP类型的数据帧

0X0003  接收发往本机的MAC所有类型:ip,arp,rarp数据帧,接收从本机发出去的数据帧,

混杂模式打开的情况下,会接收到非发往本地的MAC数据帧

4.2 IP头

IP头中需要掌握用于拆包的部分:id flags fregment_offset

两个IP地址:源IP与目的IP地址。

TTL:time to live, 指定数据帧可以最多经过几个路由器。当数据帧被目标方接收后,TTL清除为0.

Linux TTL:64 Winodws:TTL 128

4.3 UDP头

4.4 TCP头

Seq:序列号,占4个字节,用于给数据段进行编号的。所有非应答包的数据段,都有seq。

Ack:应答号,用于应答非应答包(握手包,挥手包,数据包)。告诉对方下一次从这个seq编号发送数据包。

SYN  握手包    连接的时候产生的包

FIN    挥手包    断开连接产生的包

PSG   数据包   传输数据的时候产生的包

ACK   应答包

PSH           ACK = Seq + len

SYN FIN    ACK = Seq + 1

5、TCP三次握手

三次握手的发起方,肯定是客户端

SYN(同步序号,表示此报文是一个连接请求或者连接接收报文),

ACK(确认位,对接收到报文的确认)

FIN(表示发送方发送完数据,用来释放一个连接)

第一次握手:客户端向服务器端发送一个SYN J,表示客户端向服务器端发送一个连接请求报文,该报文的初始序列号为J。客户端进入SYN_SENT状态,等待服务器端确认。

第二次握手:服务器端向客户端响应一个SYN K, 表示服务器端向客户端发送一个连接请求报文,该报文的初始序列号为K。并对SYN J进行确认ACK J+1,服务器端进入SYN_RCVD状态。

第三次握手:客户端再向服务器端发送一个确认ACK K+1。客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端和服务器端就可以开始传送数据了。

6、TCP四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。先进行关闭的一方将执行主动关闭,而另一方被动关闭。

A-----主动关闭方   B----被动关闭方

第一次挥手:A发送一个FIN包(FIN=1,seq = u)给B,进入FIN_WAIT_1状态

第二次挥手:B接收到FIN包,给A发送一个ACK包(ACK=1,ack = u+1),并进入CLOSE_WAIT状态。A接收到ACK包后,进入FIN_WAIT_2状态。如果有数据没有发送完成,则继续发送,直到发送完成为止

第三次挥手:B发送一个FIN包(FIN=1,seq = w)进入LAST_ACK状态

第四次挥手:A收到FIN包,回复一个ACK包(ACK=1,ack=w+1)。B收到A的ACK后关闭连接

7、UDP心跳

  1. 在UDP传输中,如何知道对端掉线
    1. 心跳包机制。规定每隔指定时间后发送一个心跳包给服务器,服务器回复心跳包应答。
    2. 如果期间服务器多次没有收到心跳包,或者客户端多次没有收到应答,则代表对端掉线。

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

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

相关文章

Flutter 中的 DrawerController 小部件:全面指南

Flutter 中的 DrawerController 小部件:全面指南 Flutter 是一个流行的跨平台移动应用开发框架,它提供了丰富的组件和工具来帮助开发者构建高质量的应用。在Flutter中,DrawerController并不是一个内置的组件,但是它的概念可以用于…

每周题解:牛的旅行

题目描述 牛的旅行 农民John的农场里有很多牧区。有的路径连接一些特定的牧区。一片所有连通的牧区称为一个牧场。但是就目前而言,你能看到至少有两个牧区不连通。 现在,John想在农场里添加一条路径 ( 注意,恰好一条 )。对这条路径有这样的…

RA-RISK ANALYSIS

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、咨询 一、期刊简介 Risk Analysis代表风险分析学会出版,在ISI期刊引文报告中的社会科学、数学方法类别中排名前10位,为风险分析领域的新发展提供了焦点。这本国际同行评审期刊致力于发表…

MultiHop-RAG:多跳查询的基准检索增强生成

【摘要】检索增强生成(RAG)通过检索相关知识来增强大语言模型(LLM),在减轻 LLM 幻觉和提高响应质量方面显示出巨大的潜力,从而促进 LLM 在实践中的广泛采用。然而,我们发现现有的 RAG 系统不足以…

DNS域名解析服务器搭建

基础介绍 DNS 从哪里获取 IP 地址? 本地缓存: DNS服务器会将先前查询过的域名和对应的IP地址存储在本地缓存中,以便在后续查询中加快响应速度。如果之前已经查询过某个域名,DNS服务器会直接从本地缓存中获取对应的IP地址。递归查…

02. Redis 事务

文章目录 Redis 事务执行事务放弃事务编译性异常运行时异常 Redis 事务 Redis 单条明令是原子性的,但Redis事务不保证原子性。 事务的本质就是:一组命令一起执行!一个事务中的所有命令都会被序列化,在事务执行过程中,会…

2024-05-19 问AI: 大语言模型的BPE方向是什么意思?

文心一言 大语言模型的上下文中,BPE(Byte-Pair Encoding)是一种常用的子词单元(subword unit)编码方法,尤其在处理自然语言处理任务时。这种方法的主要目的是解决自然语言中的词汇表大小问题,特…

mock.js和apifox模拟接口的能力

mock.js 和 Apifox 都是前端开发中常用的工具,用于模拟后端接口和数据。下面是它们的主要特点和模拟接口的能力的比较: mock.js mock.js 是一个用于生成随机数据的 JavaScript 库。它允许你定义数据模板,并生成模拟数据。mock.js 主要用于前…

VSCode下STM32开发环境搭建

VSCode下STM32开发环境搭建 需要的软件 make-3.81 https://udomain.dl.sourceforge.net/project/gnuwin32/make/3.81/make-3.81.exe arm-none-eabi-gcc https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads https://links.jianshu.com/go?tohttps%3A%2F%…

RH850F1KM-S4-100Pin_ R7F7016453AFP MCAL Gpt 配置

1、Gpt组件包含的子配置项 GptDriverConfigurationGptDemEventParameterRefsGptConfigurationOfOptApiServicesGptChannelConfigSet2、GptDriverConfiguration 2.1、GptAlreadyInitDetCheck 该参数启用/禁用Gpt_Init API中的GPT_E_ALREADY_INITIALIZED Det检查。 true:开启Gpt_…

Django5+React18前后端分离开发实战13 使用React创建前端项目

先将nodejs的版本切换到18: 接着,创建项目: npx create-react-app frontend接着,使用webstorm打开这个刚创建的项目: 添加一个npm run start的配置: 通过start启动服务: 浏览器访问&…

机器学习之决策树算法

使用决策树训练红酒数据集 完整代码: import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn import tree, datasets from sklearn.model_selection import train_test_split# 准备数据,这里…

【云原生】Kubernetes 核心概念

什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词,也就是“k8s”,它…

科大讯飞笔试题---删除数字

1、 题目描述: 给定一个长度为 n 的数组,数组元素为 a1, a2, . . , an,每次能删除任意 a 的任意一位,求将所有数字变成 0 最少需要几步。例如 103 若删除第 1 位则变成 3; 若删除第 2 位则变成13; 若删除第 3 位则变成 10。 输入…

AWS容器之Amazon ECS

Amazon Elastic Container Service(Amazon ECS)是亚马逊提供的一种完全托管的容器编排服务,用于在云中运行、扩展和管理Docker容器化的应用程序。可以理解为Docker在云中对应的服务就是ECS。

c语言如何将一个文本内容复制到另外一个文本里

c语言如果要把一个文本文件的文件复制到另外一个文件里&#xff0c;代码如下 #include<stdio.h>int main() {FILE *fp1,*fp2;char a;fp1fopen("D://cyy//aaa.txt","r");fp2fopen("ccc.cpu","w");while(a!EOF){afgetc(fp1);fput…

linux:切分大文件

文章目录 1. 前言2. 用法3. 例子 1. 前言 如果传输、存储过程中出现大文件&#xff0c;希望切分成小文件。在 Linux 中&#xff0c;可以使用多种工具来切分大文件&#xff0c;最常用的是 split 命令。split 命令可以将一个大文件按照指定大小切分成多个小文件。 2. 用法 spl…

ImageMagick入门教程(免费图片格式转换)

起因是因为我不会图片转换,且发现很多图片转换都要钱,尤其是pdf转jpg,于是我就是找到了这个包,自己处理.当然包时不会导的,所以只能用它提供的命令了. 准备工作 下载imagemagick:ImageMagick – Download 我下载的这个,傻瓜式安装就行,把所有勾勾都勾上,然后要记住安装路径,然…

一文读懂RDMA: Remote Direct Memory Access(远程直接内存访问)

目录 ​编辑 引言 一、RDMA的基本原理 二、RDMA的主要特点 三、RDMA的编程接口 四、RDMA的代码演示 服务器端代码&#xff1a; 客户端代码&#xff1a; 五、总结 引言 RDMA&#xff0c;全称Remote Direct Memory Access&#xff0c;即远程直接内存访问&#xff0c;是…

客户机/服务器交互模式

目录 概述 网络应用软件的地位和功能 C/S 模式的特性 容易混淆的术语 C/S 模式的通信过程 网络协议与 C/S 模式的关系 错综复杂的 C/S 交互 总结 概述 客户机/服务器&#xff08;Client/Server&#xff0c;简称 C/S&#xff09;交互模式是一种常见的网络应用软件架构&a…