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

days32 :零基础学嵌入式之网络2.0

一、wireshark :网络抓包工具


1.功能:抓取通过电脑网卡的网络数据

2.作用:排查故障、抓取数据做数据分析、

3.用法:

(1)sudo wireshark

(2)选择需要抓取的网卡====》any

(3)设置抓取的条件 ===》dup.port == 50010     然后按一下回车

(4)开始抓取

(5)进行一次网络通信

二、头部信息

1.udp 头部信息:8个字节

数据长度:真正发送的正文长度+8个字节的头部

2.tcp【头部信息】:可变长

(1)数据偏移:头部的长度;固定头部24字节+选项 :可变长的头部长度

(2)标志位:

  •     URG: 紧急指针标志, 为1时表示紧急指针有效, 该报文应该优先传送。
  •     ACK: 确认应答标志
  •     PSH:  表示发送数据,提示接收端从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
  •    RST: 重置连接标志
  •      SYN: 表示请求建立一个连接
  •     FIN: finish标志, 表示释放连接

   (3) 滑动窗口大小:是TCP流量控制得一个手段。目的是告诉对方, 本端得TCP接受缓冲区还能容纳多少字节得数据,这样对方就可以控制发送数据的速度,从而达到流量控制,16bit,因而窗口最大65535.

(4)序号和确认序号

发送端:0-999;

接收端返回:1000;

if(没发全)

例如:

发送端:0-999;

接收端返回:500;

三、TCP 

1.TCPT特点:

(1)面向链接

(2)面向字节流

(3)安全可靠的传输协议,因为会先建立连接

(4)占用资源开销大,效率低,实时性不佳,机制复杂

2.安全可靠机制

(1)三次握手:【客户端发起】
指建立tcp连接时,需要客户端和服务端总共发送三次报文确认连接。(确保双方都已经 做好收发数据的准备)

ACK:响应报文

STN:请求建立一个连接


(2)四次挥手:【两端都可发起】
断开一个tcp连接,需要客户端和服务端发送四个报文以确认断开。(确保断开前双方都已经收发完毕)

FIN:finish标志,表示释放连接

(3) 应答机制

通过序列号和确定序列号来确定收发的

(4)超时重传机制

3.编程

1.socket

   socket(AF_INET, SOCK_STREAM, 0);

 2.connect

 int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

(1)功能: 发送三次握手链接请求
(2)参数:
sockfd:套接字文件描述符
addr:存放目的地址空间首地址
addrlen:目的地址长度
(3)返回值:
成功返回0 
失败返回-1

3.send

 ssize_t send(int sockfd, const void *buf, size_t len, int flags);

(1)功能:发送数据
(2)参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址
len:数据长度
(3)返回值:
成功返回发送字节数
失败返回-1

4.recv

       ssize_t recv(int sockfd, void *buf, size_t len, int flags);

(1)功能:接收数据 
(2)参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址 
len:最多接收数据长度 
flags:接收属性默认为0 
(3)返回值:
成功返回实际接收字节数
失败返回-1 
连接断开返回0 

    5.bind

int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

6.listen

  int listen(int sockfd, int backlog);

(1)功能:监听三次握手链接请求
(2)参数:
sockfd:套接字文件描述符
backlog:最多允许等待尚未处理的三次握手链接个数
(3)返回值:
成功返回0 
失败返回-1 

10.accept

       int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

(1)功能::处理三次握手等待队列中的第一个请求并建立一个用来通信的新套接字
(2)参数:
sockfd:套接字文件描述符
addr:存放发送端IP地址空间首地址 
addrlen:想要接收的IP地址的长度 
(3) 返回值:
成功返通讯套接字
失败返回-1 

4.提高效率

(1)延迟应答

(2)捎带应答

(3)流量控制机制

发送端根据窗口的数据大小,去控制发送端的数据;0--65535,65535的时候,接受端处理能力最强,发送端可以发快一点。

(4)滑动窗口

        滑动窗口大小:是TCP流量控制得一个手段。目的是告诉对方, 本端得TCP接受缓冲区还能容纳多少字节得数据,这样对方就可以控制发送数据的速度,从而达到流量控制,16bit,因而窗口最大65535.

        本质是一段缓冲区:通过指针把缓冲区分为几个部分:

        已发送并且收到应答的数据、已发送未收到应答的数据、未发送但在对方处理能力内的数据;未发送但不在对方处理能力内的数据;

慢慢滑动,已发送并且收到的数据滑出。

四. TCP粘包问题


TCP协议是面向字节流的协议,接收方不知道消息的界限,不知道一次提取多少数据,这就造成了粘包问题。

1. 粘包问题出现的原因: 

(1)发送端:需要等缓冲区满时才发送出去,造成粘包;

(2)接收端:不及时的接收缓冲区内的包,造成多个包接收。

2.避免粘包问题的方法:

(1)对于定长的包,保证每次都按固定大小读取即可;//  结构体

(2) 对于变长的包,还可以在包和包之间使用明确的分隔符,这个分隔符是由程序员自己来定的,只要保证分隔符不和正文冲突即可。

http://www.dtcms.com/a/292668.html

相关文章:

  • Coze智能体工作流:3分钟批量生成连贯人物一致的治愈图文
  • 远程调用图形浏览器(X11 转发)在 CentOS 7 上的安装操作
  • CentOS 7 安装nginx
  • 【LINUX】Centos 9使用nmcli更改IP
  • SpringBoot6-10(黑马)
  • linux-计划任务
  • 如何排查服务器 CPU 飙高
  • 本地大模型VRAM需求计算器:原理与实现详解
  • Spring Boot音乐服务器项目-上传音乐模块
  • [vue3] 自定义组件的v-model
  • Android ViewModel 深度解析:原理、使用与最佳实践
  • Android 中 实现日期选择功能(DatePickerDialog/MaterialDatePicker)
  • “鱼书”深度学习入门 笔记(2)第五章
  • MoonBit Meetup 杭州站丨 探讨AI基础软件的精彩回顾
  • API是什么,如何保障API安全?
  • 解决flex布局的元素高度超出父元素高度
  • AI网关是什么?为何而生?企业为什么需要AI网关?
  • 使用Kiro开发项目
  • SQL基础入门③ | 排序篇
  • 基于mysql云数据库创建和美化表格,对比分析Power BI和Quick BI的功能优劣
  • PACKET_HOST等宏定义介绍
  • 草稿!Linux网络系统总结!
  • 碰一碰发视频源码搭建:支持OEM
  • 10.Java中的反射
  • 深度学习-全连接神经网络2
  • 使用EasyExcel导出明细数据
  • gpt面试题
  • 【学习路线】Python全栈开发攻略:从编程入门到AI应用实战
  • 深度学习篇---车道线循迹
  • 快速了解pandas库