常用网络测试工具以及解决tcp协议带来得问题

2024-08-23 19:44

本文主要是介绍常用网络测试工具以及解决tcp协议带来得问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、解决粘包问题
1.1、tcp的特点

面向字节流特点,会造成可能数据与数据发送到一块,成为粘包,数据之间不区分

1.2、拆包

因为缓冲区的大小,一次性发送的数据会进行拆分(大小不符合的时候)

就和水一样一次拆一次沾到一块,不好对数据进行拆分

字节流就是像水一样,一个接着一个往过流,字节流,紧挨着,

多次发的东西一次性接受

在底层下面,socket 会在发送数据会等一下,时间到了就一次性发送

1.3、解决粘包问题

原因:

tcp 流式套接字

数据与数据之间没有边界

导致

可能多次的数据粘到一起

解决:

1、规定一些数据与数据之间的 间隔符

eg、”\aa"\r\n"

2、可以指定要发送的数据的长度

3、自己将数据打包

eg、struct msg{int size;char data[100]}

相当于自己把自己打成一个包,和其他人不是一个,没有办法融合

2、加延时,让先把东西发过去,间隔一下,相当于就是跑出去了,被拉了一下,两人错开了

1.4、程序过程中遇到的问题

因为是文件IO,标准IO的问题,读写问题,因为fgets,先去底层取数据,我们把东西拿走了,而等文件IO,去取数据的时候东西已经没有了。

 signal(SIGCHLD,handler);char buf1[1024] = "3.c";write(fd,buf1,strlen(buf1)+1);//sleep(1);int file = open(buf1,O_RDONLY);write(fd,"\r\n",2);

解决办法

在网络里面有专门的读写操作

fgets()后面的参数需要一个流指针,后面是一个流指针,遇到\n结束,并且将\n读到

这样我们就可以将文件描述符,转换成字符流指针,通过fgets来获取这些信息,再设置一个标志符,来进行区分所发送的信息。

send()发数据

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

recv()

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

flag是指可以指定在网络中接收的方式

前面三个参数和read参数一致

 二、常用网络测试工具

ifconfig //查看主机上,网卡网络信息
ping                //测试 两台主机之间是否连通
telnet                //远程登录工具
ssh                    //硬件(开发板)
netstat                //查看当前主机上,活动的网络进程的相关的状态信息
arp                        //(ipc找mac)

2.1、# ubuntu开启telnet服务  

sudo apt-get install openbsd-inetd
sudo apt-get install telnetd
sudo /etc/init.d/openbsd-inetd restart
注意:
安装之前,确保ubuntu能上网
ping www.baidu.com
# 查看 telnet服务是否开启
sudo netstat -a | grep telnet

开启telnet结果图

 2.2、ssh安装
    • /ssh登录 ubuntu 需要安装以下的服务
      sudo apt-get install openssh-server openssh-client
2.3、 抓包安装
  1. sudo apt install wireshark
  2. sudo wireshark(启动)

 2.4、wireshark过滤使用

过滤规则:

  • 1、根据ip地址过滤
  • ip.srC = x.X.X.X
  • ip.dst =- x.x.x.x
  • 根据端口过滤:tcp.srcportXX;二
  • tcp.dstportXX;二三
  • udp.srcportZ-XX;
  • udp.dstportXX:
  • 根据协议类型过滤:
  • tcp udp icmptelnet
  • 任意组合以上条件抓包:
  • 如果与的关系:and
  • ip.src == 192.168.1.100 and tcp.dstport == 9999
  • 如果或关系:Or
  • ip.src == 192.168.1.100 or ip.dst == 192.168.1.102
  • tcp host 192.168.1.100
2.5、netstat 测试查看网络端口使用情况
  • //正在活动的 常看tcp的//用的最多的
  • netstat -anp
  • -a //a] ]
  • 直接显示 ip port 的数字形式-n ll
  • -p //显示 进程的 程序名 和 pid
  • netstat-n                =-->列出当前所有网络端口使用情况
  • -tnetstat-n              =-->列出所有TCP通信的端口信息
  • netstat-n-U             =-->列出所有UDP通信的端口信息
  • netstat -n -i             =-->列出默认网络接口(网卡)上的通信信息
  • netstat -lnp | grep 8888             i===>查看指定端口上的通信详情

这篇关于常用网络测试工具以及解决tcp协议带来得问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100323

相关文章

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅