tcp 网络通信及抓包工具的使用

tcp网络通信

本地回环(Loopback)的概念

本地回环地址是一个特殊的IP地址,用于指向计算机本身的网络接口。在IPv4中,最常见的本地回环地址是127.0.0.1,而在IPv6中则是::1。这个地址用于测试网络软件,确保网络协议栈在本地计算机上正确运行,而不涉及实际的网络硬件。本地回环地址通常与一个虚拟的网络接口关联,在Linux系统中这个接口被称为lo。

本地回环的作用和重要性

本地回环接口允许在同一台计算机上运行的不同程序之间进行网络通信。这对于开发和测试网络应用程序非常有用,因为它提供了一个安全、可靠的环境来模拟网络交互,而无需实际的网络连接。

粘包问题的原因

TCP协议是面向流的,它不保证发送的数据包边界与接收端的数据包边界一致。这意味着,发送端发送的多个数据包可能会在接收端合并成一个大的数据包(接收端粘包),或者一个大的数据包在接收端被拆分成多个小包(发送端粘包)。粘包问题通常发生在以下情况:
  1.发送端发送数据时,TCP协议可能会根据网络状况和优化算法(如Nagle算法)合并多个数据包,以提高网络利用率。
  2.接收端应用程序处理数据的速度跟不上数据的接收速度,导致接收缓冲区中的数据累积,从而出现粘包现象。

解决粘包问题的方法

为了解决TCP粘包问题,可以采取以下几种方法:
  1.消息边界标记:在发送的消息中加入特定的边界标记(如换行符\n),接收端根据这些标记来分割数据。
  2.固定长度消息:确保每个消息都有固定的长度,接收端根据固定长度来接收数据。
  3.消息头包含长度信息:在每个消息前添加一个固定长度的消息头,包含消息的实际长度信息,接收端先读取消息头,再根据长度信息读取相应长度的数据。

recv函数

recv函数是网络编程中用于从套接字接收数据的系统调用。在C语言中,recv函数的原型通常如下:
ssize_t recv(int sockfd, void *buf, size_t len, int flags);

  1.sockfd:表示要从中接收数据的套接字描述符。
  2.buf:指向缓冲区的指针,用于存放接收到的数据。
  3.len:缓冲区的大小,即buf可以存储的最大字节数。
  4.flags:指定接收操作的行为,常用的标志包括0(正常接收)、MSG_PEEK(窥视接收的数据,不从接收缓冲区中移除数据)、MSG_WAITALL(等待直到接收到指定长度的数据)等。
recv函数在成功接收数据时返回实际接收的字节数,该值可能小于请求的长度。如果连接已关闭,recv返回0。如果发生错误,recv返回-1,并设置errno以指示错误类型。在非阻塞模式下,如果没有数据可读,recv可能立即返回-1,并设置errno为EAGAIN或EWOULDBLOCK.

 send函数

send函数是网络编程中用于向套接字发送数据的系统调用。在C语言中,send函数的原型通常如下:
ssize_t send(int sockfd, const void *buf, size_t len, int flags);

  1.sockfd:表示要发送数据的套接字描述符。
  2.buf:指向要发送数据的缓冲区的指针。
  3.len:要发送的数据的长度(以字节为单位)。
  4.flags:指定发送操作的标志,可以影响发送的行为,如MSG_NOSIGNAL(发送数据时忽略SIGPIPE信号)、MSG_DONTWAIT(设置为非阻塞模式)等。
send函数在成功发送数据时返回发送的字节数,如果发送失败则返回-1,并设置errno以指示错误类型.

wireshark抓包工具

Wireshark 简介

Wireshark 是一款开源的网络协议分析工具,广泛用于网络故障诊断、安全分析、软件和网络开发的调试。它能够捕获和详细显示网络上传输的数据包,支持数百种网络协议,并提供强大的过滤和搜索功能,帮助用户快速定位问题。

使用 Wireshark 抓包

1.启动 Wireshark:运行 Wireshark 应用程序,选择要监控的网络接口。
  2.开始捕获:选择网络接口后,点击“开始捕获”按钮,Wireshark 将开始捕获经过该接口的数据包。
  3.停止捕获:捕获数据包后,点击“停止捕获”按钮。
  4.数据包过滤:使用 Wireshark 的过滤功能,可以在捕获数据包时或捕获后过滤出特定的数据包,以便更精确地分析。
  5.数据包分析:双击数据包列表中的任何数据包,可以在详细面板中查看数据包的内容和协议结构。
  6.保存捕获文件:可以将捕获的数据包保存为 pcap 文件,以便后续分析或与其他人共享。
高级功能

TCP(Transmission Control Protocol,传输控制协议)

首部是TCP报文段的固定部分,它包含了用于建立、维护和终止TCP连接的控制信息。TCP首部的结构如下:
  1.源端口(Source Port):占2字节,标识发送应用程序的端口。
  2.目的端口(Destination Port):占2字节,标识接收应用程序的端口。
  3.序号(Sequence Number):占4字节,用于标识报文段中第一个字节的序号。
  4.确认号(Acknowledgment Number):占4字节,用于确认已成功接收的字节序号。
  5.数据偏移(Data Offset):占4位,指示TCP首部的长度,以32位字为单位。
  6.保留(Reserved):占6位,当前保留,必须设置为0。
  7.控制位(Control Flags):占6位,包含多个标志位,如SYN(同步序列编号)、ACK(确认)、PSH(推送)、RST(重置)、FIN(结束)等。
  8.窗口大小(Window Size):占2字节,指示接收窗口的大小,用于流量控制。
  9.校验和(Checksum):占2字节,用于检测首部和数据在传输过程中的错误。
  10.紧急指针(Urgent Pointer):占2字节,仅在URG控制位为1时有效,指示紧急数据的偏移量。
  11.选项(Options):长度可变,最长可达40字节,用于支持各种扩展功能。
  12.填充(Padding):用于确保首部的总长度是4字节的整数倍。
TCP首部的长度可变,但至少为20字节,这是因为首部的前20个字节是固定的,而选项字段是可选的,可以根据需要增加首部的长度.

UDP(User Datagram Protocol,用户数据报协议)

首部结构相对简单,包含以下几个字段:
  1.源端口(Source Port):占2字节,标识发送方的端口号。如果连接是无连接的,这个字段可以设置为0。
  2.目的端口(Destination Port):占2字节,标识接收方的端口号。
  3.长度(Length):占2字节,表示UDP数据报的总长度,包括首部和数据部分。
  4.校验和(Checksum):占2字节,用于检测UDP数据报在传输过程中是否发生错误。校验和字段是可选的,但在实际应用中通常会使用。
UDP首部不包含序列号、确认号、流量控制或拥塞控制等信息,因为UDP是一种无连接的协议,它不提供像TCP那样的可靠传输服务.

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

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

相关文章

量化交易backtrader实践(四)_评价统计篇(1)_内置评价

背景 通过对基础的学习和不断深入的实践,当我们已经能够制作出快速获取数据,以及制作出多个股票 乘上多种策略进行回测的部分的时候,我们就会明显发现数据有点多了,比如10支股票都用了3种策略就得到30段数据,一页显示…

亲测好用,ChatGPT 3.5/4.0新手使用手册,最全论文指令手册~ 【2024年 更新】

本以为遥遥领先的GPT早就普及了,但小伙伴寻找使用的热度一直高居不下,其实现在很简单了! 国产大模型快200家了,还有很多成熟的国内AI产品,跟官网一样使用,还更加好用~ ① 3.5 大多数场景是够用的&#xff…

Mix|使用VS2017CMake构建Qt工程 仿照MVS(仅用于学习)

MVS下载链接:https://www.hikrobotics.com/cn/machinevision/service/download/?module0 CMake工程构建参考:CMake|VS2017CMake3.8搭建Qt项目 文章目录 效果图整体结构实现代码最外层CMakeLists.txt代码实现及CMakeLists.txt搭建CMakeLists.txt搭建主函…

[创业之路-141] :产品经理 - NPDP概述

目录 一、产品经理以及主要职责 1.1 概述 1、市场调研与需求分析 2、产品规划与设计 3、项目管理与协调 4、产品推广与销售支持 5、产品运营与维护 6、其他职责 1.2 产品经理与项目经理的职责分工 1.2.1 职责区别 产品经理 项目经理 1.2.2 合作方式 二、什么是NP…

EXCEL——Vlookup17个高级用法

大纲 一、基本语法 1、参数详解 二、入门篇 1、单条件查找 2、屏蔽查找返回的错误值 三、进阶篇 1、反向查找 2、包含查找 3、区间查找 4、含通配符查找 5、多列查找 6、多区域查找 四、高级篇 1、多条件查找 2、合并单元格查找 3、带合并单元格的多条件查找 …

[数据集][目标检测]夜间老鼠检测数据集VOC+YOLO格式316张1类别+视频文件1个

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):316 标注数量(xml文件个数):316 标注数量(txt文件个数):316 标注类别…

MATLAB进阶:矩阵代数

今天我们学习矩阵在MATLAB中的运算。 运算符 与数组运算相同: A. ’转罝 A’(共轭)转罝 共轭转置(A’或A†): 对于一个复数矩阵A,其共轭转置记作A’或A†。共轭转置不仅将矩阵A的行和列互…

大话C语言:第46篇 C语言项目工程化之Makefile详解

1 Makefile概述 Makefile是一种用于自动化构建和管理程序的工具,以文本文件的形式存在。它主要记录了程序的编译规则、依赖关系和操作指令,使得在开发过程中能够轻松地进行代码的编译、链接和部署。 Makefile文件中的命令有一定规范,一旦该文…

Unity--XLua调用C#

Unity–XLua调用C# 由于Unity/C# 和lua是两种语言,两种语言的特性不一样,因此,如果要互相调用的话,需要第三方作桥梁. 因此,为了在Unity中/C#中使用lua的特性,需要在Unity中安装插件,Xlua/toLu…

【学习笔记】8、脉冲波形的变换与产生

本章简略记录。 8.1 单稳态触发器(脉冲触发) 单稳态触发器 应用于 :(1)脉冲整型(2)脉冲延时 (3)定时 单稳态触发器的工作特性: 没有触发脉冲作用时&#xf…

Flink入门(五)--Flink算子

Map DataStream → DataStream 一个接受一个元素并产生一个元素的函数。 示例 dataStream.map { x > x * 2 } FlatMap DataStream → DataStream 一个接受一个元素并产生零个、一个或多个元素的函数。 例如 dataStream.flatMap { str > str.split(" ") }…

besier打断和升阶,高阶性质

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 问题描述 对besier曲线在u处打断,生成两条besier曲线对besier曲线升阶处理 bezier高阶性质 求导推导 P ( t ) ∑ i 0 n B i n ( t ) b i \boldsymbol …

Python 爬虫入门(十二):正则表达式「详细介绍」

Python 爬虫入门(十二):正则表达式 前言一、正则表达式的用途二、正则表达式的基本组成元素2.1 特殊字符2.2 量词2.3 位置锚点2.4 断言2.5 字符集2.6 字符类2.6.1 基本字符类2.6.2 常见字符类简写2.6.3 POSIX字符类2.6.4 组合使用 三、 正则表…

Datawhale X 李宏毅苹果书 AI夏令营 学习笔记(二)

自适应学习率 我们梯度下降在参数更新上,公式是 W t W t − 1 − η g t , η 是学习率, g t 是梯度 W_tW_{t-1}-\eta g_t,\eta是学习率,g_t是梯度 Wt​Wt−1​−ηgt​,η是学习率,gt​是梯度…

03_React 收集表单数据和 组件生命周期

React 收集表单数据和 组件生命周期 一、收集表单数据1、例子1.1 需求:定义一个包含表单的组件,输入用户名密码后,点击登录提示输入信息 2、理解:包含表单的组件分类2.1 受控组件2.2 非受控组件 二、高阶函数\_函数柯里化1、复习-…

9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)

文章目录 前言一、正则表达式1 [ ] 语法(1)[ABC] 和 [^ABC](2)[A-Z]和[a-zA-Z]小总结2 特殊字符语法(\w 这些)3 数量符4 \ 、()、 |5 锚点 ^ 和 $,\b,\B6 (?i) : 忽略其后面的大小写 ---- 这个Java是可以的,其他语言我不知道(正则表达式虽然大多通用,但也有部分是…

zabbix5.0与7.0版本区别 切换建议

Zabbix5.0和Zabbix7.0的区别 1. 性能和扩展性优化 1.1 高效的数据处理和存储 优化的数据库性能: Zabbix 7.0 在数据库层面进行了多项优化,以减少查询延迟和提高数据处理速度。这包括对数据库结构的改进和索引优化,使得大规模数据的读取和写…

Spark-driver和executor启动过程

一、上下文 《Spark-SparkSubmit详细过程》详细分析了从脚本提交任务后driver是如何调用到自己编写的Spark代码的,而我们的Spark代码在运行前必须准备好分布式资源,接下来我们就分析下资源是如何分配的 二、Spark代码示例 我们以一个简单的WordCount程…

打卡学习Python爬虫第五天|Xpath解析的使用

什么是Xpath?是在XML文档中搜索内容的一门语言,HTML可以看作是xml的一个子集。 目录 1、安装lxml模块 2、导入lxml中的etree子模块 3、Xpath使用方法 3.1.选择节点 3.2.选择属性 3.3.选择文本内容 3.4.使用通配符*过滤节点 3.5.使用中括号[]索引…

Java学习_20_File以及IO流

文章目录 前言一、FileFile中常见的成员方法判断和获取创建和删除获取和遍历 二、IO流IO流体系结构字节流字节输出流:FileOutputStream字节输入流FileInputStrea文件拷贝try……catch异常处理中文乱码现象 字符流字符流读取FileReader字符流输出FileWriter底层原理 …