网络编程与网络协议
计算机网络
酸菜。
爱生活,爱TXJ。
展开
-
内核态socket编程
内核态socket编程原创 2023-02-10 20:15:59 · 574 阅读 · 1 评论 -
获取以太网接口mtu大小
获取mtu大小原创 2022-12-08 18:59:33 · 229 阅读 · 0 评论 -
自定义命令备录
自定义命令原创 2022-10-26 18:56:01 · 112 阅读 · 0 评论 -
计算机网络大作业
学习笔记client.c#include<stdio.h>#include<string.h>#include<stdlib.h>#include<unistd.h>#include<strings.h>#include<sys/types.h>#include<sys/socket.h>...原创 2019-11-19 17:03:03 · 3435 阅读 · 1 评论 -
SP,WRR,WDRR调度算法
一:SP调度算法SP:Strict Priority(严格优先级), SP调度严格按照优先级从高到低的次序优先发送较高优先级队列中的分组,当较高优先级队列为空时,再发送较低优先级队列中的分组。队列7优先级最高,队列0优先级最低。来看一个例子:从上到下,依次为队列0-7,,队列7的优先级最高,按照SP调度算法,那么报文从端口出来的顺序为,,1,2,3,4,5,6,7,8,9,10,11.二:WRR(Weighted Round Robin)-加权循环调度算法基于报文的加权调度WRR, 可以配置原创 2020-11-17 19:36:17 · 9756 阅读 · 5 评论 -
深入浅出websocket
本篇博文主要是提供了一个基于tcp封装的websocket服务端,没有使用任何的网络库,这样便于自我学习,关于这个协议的一些概念的话,大家可以执行百度了解。客户端的话,大家可以找一些在线网站模拟websocket客户端即可。代码的话,由select+tcp改装而成,主要适用于windows平台,大家如果有兴趣也可以使用epoll来实现。下面给出具体的代码,具体可以用vs进行单步调试观察一下包的格式,这样对于理解这个协议的理解是非常有帮助的。//base64.cpp#include "base64.h"原创 2021-10-09 22:53:54 · 180 阅读 · 0 评论 -
accept函数与syn攻击
一:accept函数accept函数用于从已完成连接队列中的队首(队头)位置取出-项’返回给进程(服务器程序),如果已完成连接队列是空的,accept函数调用就会卡在这里等待(休眠)直到已完成连接队列中有一项内容时才会被唤醒。所以正常编写程序时,需要尽快调用accept把已完成连接队列中的项取走。另外,也应该很清楚的是,accept返回的是-个套接字(socket)’该套接字代表已经用三次握手建立起来的TCP连接(因为accept是从巳完成连接队列中取到的连接项)换句话说’服务器程序必须严格区分2个原创 2021-08-18 13:06:16 · 195 阅读 · 0 评论 -
iperf3工具原理小结
因工作当中需要掌握该测试工具,网上参考了几篇博客以后,加上自己的实践,对该命令行工具的使用以及原理有了点心得。特此总结一下。参考博文:1:https://zhuanlan.zhihu.com/p/3147271502:https://www.cnblogs.com/saneri/p/11169926.html我是使用的windows的cmd进行的测试,一个cmd作为服务端,一个cmd作为客户端,启动一个客户端:启动一个服务端:其实说白了,这个命令行程序,其实就是一个进行,我们在使用不同的参原创 2022-04-05 14:54:06 · 882 阅读 · 0 评论 -
listen监听队列刨析
listen函数:对于listen函数来说,它使用来监听端口的,它用在TCP网络通信当中的服务器角色,UDP和客户端都是不需要它的。当我们在编写网络通信程序时,调用socket函数创建了一个套接字以后,改套接字就对应的和相应的输出缓冲区和输入缓冲区建立了联系,此时改套接字的状态正处于CLOSED(观察TCP状态转换图即可),当我们调用listen函数以后,改套接字的状态就变成了LISTEN监听状态,此时,处于等待客户端连入的状态。这里的话,主要记录一下listen的第二个参数的意思吧。对于一个调用l原创 2021-08-14 18:45:26 · 1826 阅读 · 1 评论 -
基于select的回声服务器
一:函数理解(1)要想通过select函数处理多个客户端的连接,我们得需要一个函数把这些文件描述符集中起来吧,不然怎么处理多个客户端的链接呢?先来看select函数的第2,3,4参数,这几个参数,都是fd_set类型的变量,用来把文件描述符集中起来,第2个参数是集中想读的文件描述符,第3个参数是集中想写的文件描述符,第4个参数是集中异常的文件描述符。后面会举例子,先记这么多吧。int select(int n,fd_set * readfds,fd_set * writefds,fd_set * ex原创 2021-08-06 17:41:21 · 186 阅读 · 0 评论 -
snmp学习
转载:https://blog.csdn.net/qq_28657577/article/details/81699430转载 2020-07-14 17:48:42 · 2326 阅读 · 0 评论 -
TCP/IP协议详解
文章出自:https://blog.csdn.net/petterp/article/details/102779131转载 2019-11-03 10:59:14 · 90 阅读 · 0 评论 -
c语言模拟icmp发送报文(tracert命令)
#include <iostream>#include <winsock2.h> #include <ws2tcpip.h>#include <Winsock2.h>#include <ws2ipdef.h>using namespace std;#pragma comment(lib, "Ws2_32.lib")//IP报头typedef struct IP_HEADER{ unsigned char h原创 2021-08-13 16:17:30 · 1684 阅读 · 0 评论 -
TCP三次握手过程中丢包该如何处理
问题一:A会周期性超时重传第一个包。直到收到B发送的第二个包的确认。问题二:B会周期性超时重传第二个包。直到收到A发送的第三个包的确认。问题三:此时A应该已经建立连接,即参与连接状态,但是B没有收到最后一个ack包,所以它还没有处于连接状态。情况1:假设双方没有数据发送,那么B会一直周期性发送第二个包,直到B收到最后一个包,收到以后,A和B两边的状态即处于连接状态,后面A和B可以发送数据。情况2:如果A发送了ACK+DATA的数据包,那么B会切换他的状态为已连接状态,并且接收data数据.原创 2022-04-09 16:33:29 · 2820 阅读 · 0 评论 -
简答面向数据报,面向字节流
https://blog.csdn.net/csdn_kou/article/details/82083661原创 2019-12-01 21:49:12 · 365 阅读 · 0 评论 -
【Linux网络编程】网络基础知识
https://blog.csdn.net/dengjin20104042056/article/details/102999764原创 2019-11-22 07:48:56 · 119 阅读 · 0 评论 -
同步通信和异步通信区别
https://www.cnblogs.com/wllgo/p/10842693.html原创 2019-12-01 12:29:54 · 347 阅读 · 0 评论 -
udp实现本地广播
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>#define BUF_SIZE 30void error_handling(char *message);int main(int argc, char *argv[]){原创 2021-09-18 10:15:17 · 319 阅读 · 0 评论 -
CRC校验以及c语言代码实现
//CRC4#include <stdint.h> #include <stdio.h>#define POLYNOMIAL 0xC8 /* 11011后面补0凑8位数:11011000*/ uint8_t CheckCrc4(uint8_t const message) { uint8_t remainder; //余数 uint8_t i = 0...原创 2019-11-01 16:07:19 · 3631 阅读 · 0 评论 -
readv函数与writev函数
一:readv函数#include <stdio.h>#include <sys/uio.h>int main(int argc, char *argv[]){ struct iovec vec[2]; char buf1[]="ABCDEFG"; char buf2[]="1234567"; int str_len; vec[0].iov_base=buf1; vec[0].iov_len=3; vec[1].i原创 2021-08-09 19:32:08 · 598 阅读 · 0 评论 -
使用libmodbus库开发modbusTcp从站(支持多个主站连接)
#include "RDSModbusSlave.h"/*************************************************************** * @file RDSModbusSlave.cpp * @author seer-txj * @brief modbus initialization * @param IP/PORT/debugflag * @version v1 * @return nu原创 2021-10-23 23:20:27 · 8331 阅读 · 8 评论 -
epoll实现udp并发
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#include <unistd.h>#include &l原创 2021-09-24 22:32:30 · 1754 阅读 · 4 评论 -
深入浅出ModbusTcp
一:概念可参考https://blog.csdn.net/sgmcumt/article/details/87435191二:仿真工具下载https://modbustools.com/download.html使用以及注册什么的,这个大家可以百度或者去b站上面搜索一下相应的视频即可。三:例程参考提供了两个例程供大家参考,一个是主站,这个相当于socket编程里面的客户端,另一个是从站,这个相当于服务端。从站的话,这里是使用了libmodbus库,具体的版本以及下载方法。(1)3.1.6接口原创 2021-10-09 13:48:27 · 1482 阅读 · 0 评论 -
epoll原理总结:
说起epoll,不得不谈起它的三个函数,这3个函数是系统提供的,一般来说,我们学会使用就行了,但是有时候,我们遇到了问题,就必须要懂得这几个函数的原理了。我们通过wangbojing网友的NtyTcp项目学习一下epoll的原理。(1)int epoll_create(int size);该函数创建了一个epoll对象,返回了一个文件描述符来标识这个对象,所以,最后,我们要用close来关闭这个返回的文件描述符。而关于它的参数,网上的说法很多,这里的话,不说太多了,先保证它大于0吧。//创建原创 2021-08-08 15:28:00 · 340 阅读 · 0 评论 -
客户端使用select
#include <iostream>#include <string.h>#include "RDSModbusSlave.h"using namespace std;const int DEFAULT_PORT = 8000;int main(int argc, char* argv[]){ WSADATA wsaData; int fd_num, fd_max,err; err = WSAStartup(MAKEWORD(2, 2), &wsaData原创 2022-01-18 13:13:48 · 776 阅读 · 0 评论 -
linux平台MSG_OOB选项测试
//客户端#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#define BUF_SIZE 30void error_handling(char *message);int main(int argc, char *argv[原创 2021-07-07 17:22:17 · 495 阅读 · 5 评论 -
基于Linux+epoll+LT模式下服务器框架程序架构
源码:还在完善。原创 2021-08-21 12:09:12 · 87 阅读 · 0 评论 -
二层交换机数据转发配置总结
一:手动配置mac地址表(静态方式)(1)以太网帧结构:(2)配置了vlan后的以太网帧结构(多了4个字节的vlan tag)含义:为什么要划分vlan?答:有效的控制了广播域的范围,比如,在通常情况下,主机发出的报文是不带VLAN tag的(即Untagged 报文),那么这样的报文是如何划分到某个vlan种去的?划分vlan有多种方式,比如端口划分,协议,IP,mac等等。这里一般是采用端口划分。比如当一个untagged报文进入端口时,就会被加上VLAN tag,后面会根据进入端口的原创 2020-10-09 16:00:57 · 1147 阅读 · 1 评论 -
TIME_WAIT状态总结
这个知识点在写代码上,感觉还是挺重要的,打算总结一下吧。打算从以下5个方面去总结。一:TIME_WAIT状态是什么首先,这个是TCP状态转换图里面的某个状态。这个可以参考unix网络编程。从图中可以看出,在一个客户端与服务器通信的过程当中,主动关闭的一方会进入这个状态。二:TIME_WAIT状态怎么出现的好了,其实第一点已经说明了,这个状态是怎么出现的了,就是,主动关闭的一方会进入这个状态。#include <stdio.h>#include <ctype.h>#原创 2022-03-20 22:23:39 · 10678 阅读 · 0 评论 -
写了一个modbus服务器,支持多连接
#include "RDSModbusSlave.h"/*************************************************************** * @file RDSModbusSlave.cpp * @author seer-txj * @date 2022/01/17 **************************************************************/RDSModbusSlave原创 2022-01-21 22:07:57 · 3301 阅读 · 0 评论 -
ModBus-RTU详解
https://blog.csdn.net/huan447882949/article/details/80471105原创 2019-12-09 11:25:23 · 636 阅读 · 0 评论 -
windows 使用select实现多个客户端连入服务器
服务端code#include <winsock2.h>#include <iostream>#include <string.h>using namespace std;#pragma comment(lib, "ws2_32.lib")#pragma warning(disable :4996)const int DEFAULT_PORT = 8000;#define SIZE 32#define IP "192.168.1.32"#defin原创 2021-06-03 17:18:16 · 528 阅读 · 0 评论 -
网络编程常用函数总结
#include<sys/socket.h>int socket(int domain,int type,int protocol);//成功返回文件描述符,出错返回负一int bind(int sockfd,struct sockaddr *myaddr, socklen_t addrlen);//成功返回0,失败返回负一int listen(int sockfd,int backlog);//成功返回0,失败返回负一int accept(int sockfd, struct sock原创 2021-07-08 15:57:58 · 232 阅读 · 0 评论 -
IP地址和端口号转换函数总结
#include <winsock2.h>#include <iostream>#include <string.h>using namespace std;#pragma comment(lib,"ws2_32.lib")#pragma warning(disable :4996)int main(){ //一:IP地址转换->统一为网络字节序,同时可以将字符串形式的IP地址转换为整数形IP地址 const char* addr1 = "1.2.原创 2021-06-21 20:01:09 · 783 阅读 · 0 评论 -
分析epoll当中的边缘触发以及水平触发模式与阻塞和非阻塞模式的多种组合
一:连接套接字的 “ET+阻塞模式”(1)采用循环的方式读取数据#include <errno.h>#include <unistd.h>#include <fcntl.h>#include <arpa/inet.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/epoll.h>#include <stdio.h>#i原创 2021-08-08 23:00:14 · 280 阅读 · 0 评论 -
最小码距和检错纠错能力关系
https://www.cnblogs.com/china520/p/10392408.html原创 2019-12-22 15:45:01 · 5782 阅读 · 0 评论 -
wireshark 入门教程
参考:https://blog.csdn.net/zjy900507/article/details/79303359原创 2020-11-04 11:31:37 · 329 阅读 · 0 评论 -
优雅关闭(半关闭)
服务端:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>#define BUF_SIZE 30void error_handling(char *message);int main(int argc, char *argv..原创 2021-08-10 20:14:30 · 97 阅读 · 0 评论 -
通信系统的分类
原创 2019-11-02 20:05:28 · 1644 阅读 · 0 评论 -
UART IIC SPI协议总结
总体概述本文将总结嵌入式当中常用的3种通信协议,重点从协议本身,以及协议的时序图展开概述。在展开概述前,我们还得了解下一些电气特性,例如在实际的线路传输数据时,无非就是高低电平,即0和1,上面这个图是从其它地方拷贝过来的,链接我忘记了,对于实际的电气特性来说,有时候是3.3v代表1,有时候是5v代表1,所以为了主机和从机之间的这个电平特性保持一致,一般来说,在外部ic当中都会有电平的转换(有专门的电平转换芯片,例如CH340)。这个对于软件从事人员可以这样简单的了解一下。由于自己对单片机稍微了解一些,原创 2022-04-13 14:13:04 · 1440 阅读 · 2 评论