网络编程
文章平均质量分 75
HideInTime
这个作者很懒,什么都没留下…
展开
-
Linux抓包框架对比
其实,类似DPDK的加速方案原理都非常简单,那就是完全绕开内核实现的协议栈,把数据包直接从网卡拉到用户态,依靠Intel自身处理器的一些专门优化,来高速处理数据包,你可知道在这类方案中,CPU可是专门处理数据包的,什么内核态,用户态,都无关紧要,采用map机制,专门的处理程序可以非常高效地在任意时间读取并处理数据包,想想CPU的处理速度换算成pps是什么概念吧,如果一个CPU什么都不干,专门处理数据包,那将是非常猛的线速处理了。当有新的数据包到达时,直接覆盖掉已经被用户空间读取过的数据包空间。转载 2023-11-08 11:46:56 · 1339 阅读 · 0 评论 -
ICMP差错包
要求分段并设置DF flag标志报文。对特定的TOS网络不可达报文。对特定的TOS主机不可达报文。由于过滤 网络流量被禁止报文。路由器的发现/选择/请求报文。基于TOS的网络重定向报文。基于TOS的主机重定向报文。IP报首部参数错误报文。原创 2023-09-25 16:58:44 · 1420 阅读 · 0 评论 -
TCP连接状态
一、连接状态LISTEN:服务器在等待进入呼叫SYN_RECV:一个连接请求已经到达,等待确认SYN_SENT:应用已经开始,打开一个连接ESTABLISHED:正常数据传输状态FIN_WAIT1:应用说它已经完成FIN_WAIT2:另一边已同意释放ITMED_WAIT:等待所有分组死掉CLOSING:两边同时尝试关闭TIME_WAIT:表示处理完毕,等待超时结束的请求数。LAST_ACK:等待所有分组死掉CLOSED:无连接是活动的或正在进行二、TCP状态转移要点 TCP协议规定,转载 2022-12-05 09:58:45 · 1654 阅读 · 0 评论 -
socket收包缓冲区研究
ioctl获取FIONREAD参数 raw_socket获取为原始分片包接收第一个包大小(icmp60,udp分片1514) udp_socket获取为协议栈组装包大小(udp发送方60k及为60k,上限为udplen(65535)) tcp_socket获取为协议栈组装包大小(tcp发送方第一个包长度,初始协商堆积上限tcp窗口基数16位满(65535),阻塞发包方,后滑动窗口大小可协商调整Window size scaling factor(初始握手窗口基数)* Window s...原创 2021-08-05 18:21:00 · 400 阅读 · 0 评论 -
linux网卡处理数据包过程
网卡的 Ring Buffer 详解1. 网卡处理数据包流程网卡处理网络数据流程图:上图中虚线步骤的解释:DMA 将 NIC 接收的数据包逐个写入 sk_buff ,一个数据包可能占用多个 sk_buff , sk_buff 读写顺序遵循FIFO(先入先出)原则。DMA 读完数据之后,NIC 会通过 NIC Interrupt Handler 触发 IRQ (中断请求)。NIC driver 注册 poll 函数。poll 函数对数据进行检查,例如将几个 sk_buff 合并.原创 2021-08-02 16:11:19 · 1220 阅读 · 0 评论 -
Linux端口转发的几种常用方法
01、SSH 端口转发SSH 提供了一个非常有意思的功能,就是端口转发,它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。(1)本地端口转发ssh -fgN -L 2222:localhost:22 localhost(2)远程端口转发ssh -fgN -R 2222:host1:22 localhost(3)动态转发ssh -fgN -D 12345 root@host12、iptables 端口转发CentO...原创 2021-06-10 14:34:17 · 2602 阅读 · 0 评论 -
socket深入学习
socket(domain,type,protocol)1、domain PF协议族和AF地址族概念划分不同,底层调用为对应关系,只是逻辑区分(是否在不同的系统、网卡上面有不同的对应)/* Protocol families. */#define PF_UNSPEC 0 /* Unspecified. */#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */#define PF_UNIX...原创 2021-03-17 17:08:13 · 462 阅读 · 0 评论 -
Nodejs环境搭建
通常情况下只需要官网nodejs的安装套件一键安装即可包含nodejs框架和npm命令行部分由于系统其他工具依赖预先安装了nodejs环境导致版本老旧,需要手动升级,需要以下nodejs - npm版本匹配https://nodejs.org/zh-cn/download/releases/清理默认全局【C:\Users\用户名\AppData\Roaming\npm】或者自定义的全局目录下的npm安装文件和缓存文件安装nodejs套件计算机--右键属性--高级系统设置--环境变量...原创 2021-03-01 14:38:44 · 172 阅读 · 0 评论 -
swagger自动创建接口文档用法
现在的开发大部分都是前后端分离的模式了,后端提供接口,前端调用接口。后端提供了接口,需要对接口进行测试,之前都是使用浏览器开发者工具,或者写单元测试,再或者直接使用Postman,但是现在这些都已经out了。后端提供了接口,如何跟前端配合说明接口的性质,参数,验证情况?这也是一个问题。有没有一种工具可以根据后端的接口自动生成接口文档,说明接口的性质,参数等信息,又能提供接口调用等相关功能呢? 答案是有的。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 We转载 2021-02-25 17:27:49 · 3563 阅读 · 0 评论 -
C#web服务开发
1、Program.cs声明程序入口static main()函数,用startup内方法创建和初始化web类对象 Startup.cs初始化内容,涉及路由设计和服务绑定、依赖注入等全局初始化2、web服务添加AddSingleton()方法创建一个Singleton服务,首次请求会创建服务,然后,所有后续的请求中都会使用相同的实例,整个应用程序生命周期都使用该单个实例AddScoped():不同http清求,实例不同,同名谓词不同,也不行。例如httpget跟httppost,作...原创 2021-02-22 17:01:15 · 4503 阅读 · 0 评论 -
setsockopt常用设置
1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAI原创 2021-01-28 11:40:36 · 441 阅读 · 1 评论 -
内连网络
测试效果opv客户端192.168.1.175opv服务器外侧网卡(隧道协议)192.168.1.176opv服务器Tun0opv服务器内侧网卡192.168.119.181被访问内网主机192.168.119.182topo概述opv组网1、两个互相隔绝的网络(内网,外网)2、中间设备充当opv服务器,硬件要求两个物理网口,两个网口分别接入两张网络3、opv服务器上搭建opv服务,启用tun或者tap虚拟网卡构建第三张虚拟网段4、op原创 2021-01-04 16:25:22 · 479 阅读 · 0 评论 -
SNAT/DNAT/MASQUERADE
IPtables中可以灵活的做各种网络地址转换(NAT),网络地址转换主要有两种:SNAT和DNAT。SNAT是source networkaddress translation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报原创 2021-01-04 16:08:23 · 176 阅读 · 0 评论 -
设备划分冲突域和广播域
冲突域是一种物理分段,指连接到同一导线上所有工作站的集合、同一物理网段上所有节点的集合或是以太网上竞争同一带宽节点的集合。冲突域表示冲突发生并传播的区域,这个区域可以被认为是共享段。在OSI模型中,冲突域被看作是OSI第一层的概念,连接同一冲突域的设备有集线器、中继器或其它简单的对信号进行复制的设备。其中,使用第一层设备(如中继器、集线器)连接的所有节点可被认为是在同一个冲突域内,而第二层设备(如网桥、交换机)和第三层设备(如路由器)既可以划分冲突域,也可以连接不同的冲突域。广播域是指可以接收到同样广播转载 2020-12-30 11:49:44 · 7551 阅读 · 2 评论 -
MVC/MVP/MVVM
1. MVC框架MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。MVC框架模式图1.1 MVC 编程模式MVC 是一种使用 MVC(Model View转载 2020-12-22 11:12:49 · 248 阅读 · 0 评论 -
常见IO机制
IO多路复用机制详解高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。(2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(NewIO)库。(3)IO多路复用(IOMultiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的S...转载 2020-12-07 11:31:12 · 343 阅读 · 0 评论 -
select、poll、epoll、kqueue、iocp(windows)
(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,但是它没有最大连接数的限制,原因是它是基于链表来存.转载 2020-12-07 10:32:38 · 1367 阅读 · 0 评论 -
VRF
VRF简介及创建1.VRF理解VRF相当于一个个独立路由表,STATIC是路由表里的一个(条目)策略,添加vrf相当于隔离建立多个独立的路由器。2.VRF应用需求 假设PC1与R2这一侧的网络属于一个独立的业务;PC2与R3这一侧的网络属于另一个独立的业务,由于设备资源有限或者其他方面的原因,这两个独立的业务的相关节点连接在R1上,也就是同一台设备上。那么在完成相关配置后,R1的路由表如上图所示。 现在如果PC1要发一个数据包到2.2.2.2,那么这个数据包在到达R1后,R原创 2020-12-03 19:27:35 · 5550 阅读 · 2 评论 -
C#的socket:tcp/udp/unix
tcp_socketserverusing System;using System.Net;using System.Net.Sockets;using System.Text;namespace tcpserver{ /// <summary> /// Class1 的摘要说明。 /// </summary> class server { /// <summary> ///..原创 2020-12-02 19:27:47 · 391 阅读 · 0 评论 -
linux的socket连接限制
Linux下解决高并发socket最大连接数限制,tcp默认1024个连接 linux作为服务器系统,当socket运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况 本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到1000左右时,再也不能建立tcp连接,最总上网搜索,linux系统默认ulimit为1024个访问用户最多可开启的程序数目。一般一个端口的最高连接为2的16次方65535第一步,修改/etc/security/li.原创 2020-12-02 17:38:56 · 934 阅读 · 0 评论 -
socket编程基础
本文的主要内容如下: 1、网络中进程之间如何通信? 2、Socket是什么? 3、socket的基本操作 3.1、socket()函数 3.2、bind()函数 3.3、listen()、connect()函数 3.4、accept()函数 3.5、read()、write()函数等 3.6、close()函数 4、socket中TCP的三次握手建立连接详解 5、so原创 2020-12-01 15:14:12 · 196 阅读 · 0 评论 -
sock_raw和sock_packet
套接字SOCK_RAWSOCK_PACKET实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DGRAM)。而这些数据包都是由系统提供的协议栈实现,用户只需要填充应用层报文即可,由系统完成底层报文头的填充并发送。然而在某些情况下需要执行更底层的操作,比如修改报文头、避开系统协议栈等。这个时候就需要使用其他的方式来实现。一原始套接字原始套接字(SOCK_RAW)是一种不同于SOCK_STREA...原创 2020-11-20 12:02:31 · 2585 阅读 · 0 评论 -
python的socket_server并发框架
异步混合:为了建立异步处理机制,需要使用ThreadingMixIn和ForkingMixIn类。以下是一个使用ThreadingMixIn类的示例:SocketServer是标准库中一个很具有代表性的库。它基于socket提供一套快速建立socket服务器的框架,并可以通过Mix-in的技巧让单线程服务器进化为多线程或多进程服务器。Socketserver.py里面的类很多,下面一个一个介绍并介绍它们之间关系。BaseServer、TCPServer、UDPServer,前者是后两者的父类原创 2020-11-18 17:20:35 · 530 阅读 · 0 评论 -
RAW_SOCKET使用区别
raw socket,即原始套接字,可以接收本机网卡上的数据帧或者数据包,对与监听网络的流量和分析是很有作用的,一共可以有3种方式创建这种socket。中文名原始套接字外文名RAW SOCKET作用网卡对该数据帧进行硬过滤1.socket(AF_INET,SOCK_RAW,IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)发送接收ip数据包2.socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH...原创 2020-11-05 10:17:04 · 1175 阅读 · 3 评论 -
netstat的tcp4/6
netstat 查看监听的服务端口时,却只显示了 tcp6 的监控, 但是服务明明是可以通过 tcp4 的 ipv4 地址访问的,那为什么没有显示 tcp4 的监听呢?以 sshd 监听的 22 端口为例:# netstat -tlnp | grep :22tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1444/sshdtcp6 0 0 :::22 ...原创 2020-08-18 17:48:22 · 3309 阅读 · 0 评论 -
单/半双/全双工和多路复用技术概要
单工、半双工和全双工是电信计算机网络中的三种通信信道,这些通信信道可以提供信息传达的途径。通信信道(Channels of communicationl)通信信道是数据传输的通路,在计算机网络中信道分为:物理信道和逻辑信道。物理信道指用于传输数据信号的物理通路,它由传输介质与有关通信设备组成;逻辑信道指在物理信道的基础上,发送与接收数据信号的双方通过中间结点所实现的逻辑通路,由此为传输数据信号形成的逻辑通路。单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信..原创 2020-06-29 22:33:22 · 1718 阅读 · 0 评论 -
DPDK
高性能网络技术#随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络结构,无不体现出这种创新与融合。这在使得网络变得更加可控制和成本更低的同时,也能够支持大规模用户或应用程序的性能需求,以及海量数据的处理。究其原因,其实是高性能网络编程技术随着网络架构的演进不断突破的一种必然结果。C10K 到 C10M 问题的演进#如今,关注的更多是 C10M 问题(即单机 1转载 2020-06-04 19:18:38 · 7706 阅读 · 1 评论 -
linux下c获取网卡信息
在Linux下开发网络程序时,经常会遇到需要取本地网络接口名、IP、广播地址、子网掩码或者MAC地址等信息的需求,最常见的办法是配合宏SIOCGIFHWADDR、SIOCGIFADDR、SIOCGIFBRDADDR与SIOCGIFNETMASK作为参数调用函数ioctl分别获得MAC地址、IP地址、广播地址与子网掩码来实现。一次性获取此类信息的C语言代码实现如下。 1 #inc...转载 2020-04-30 16:21:42 · 1142 阅读 · 0 评论 -
python的socket、urlib、request指定出口网卡
需求: 一台机器上有多个网卡, 如何访问指定的 URL 时使用指定的网卡发送数据呢? 1 $ curl --interface eth0 www.baidu.com # curl interface 可以指定网卡 阅读 urllib.py 的源码, 追述到 open_http –> httplib.HTTP –> httplib.HTTP._...转载 2020-04-27 10:29:41 · 3839 阅读 · 0 评论 -
SSL/TLS握手过程
SSL/TLS握手过程----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识HTTPS协议详解(二):TLS/SSL工作原理HTTPS协议详解(三):PKI 体系HTTPS协议详解(四):TLS/SSL握手过程HTTPS协议详解(五):HTTPS性能与优化...转载 2020-04-17 10:35:20 · 271 阅读 · 0 评论 -
ioctl
一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:int ioctl(int fd, ind cmd, …); 其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是...原创 2020-04-14 14:10:36 · 214 阅读 · 0 评论 -
select/poll/epoll
(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用...原创 2020-04-14 11:39:07 · 150 阅读 · 0 评论 -
linux select函数详解
linux select函数详解在Linux中,我们可以使用select函数实现I/O端口的复用,传递给select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状态。(我们是要想从一个文件描述符中读或者写,还是关注一个描述符中是否出现异常) •我们要等待多长时间。(我们可以等待无限长的时间,等待固定的一段时间,...转载 2020-03-30 16:37:21 · 209 阅读 · 0 评论 -
TUN/TAP设备浅析
TUN设备TUN设备是一种虚拟网络设备,通过此设备,程序可以方便地模拟网络行为。TUN模拟的是一个三层设备,也就是说,通过它可以处理来自网络层的数据,更通俗一点的说,通过它,我们可以处理IP数据包。先来看看物理设备是如何工作的:tun设备上图中的eth0表示我们主机已有的真实的网卡接口 (interface)。网卡接口eth0所代表的真实网卡通过网线(wir...转载 2020-03-30 12:57:37 · 2553 阅读 · 0 评论 -
OSI七层协议
OpenSystemInterconnection7转载 2019-12-23 14:35:52 · 105 阅读 · 0 评论 -
sendto和recvfrom
UDP(user datagram protocol)用户数据报协议,属于传输层。 UDP是面向非连接的协议,它不与对方建立连接,而是直接把数据报发给对方。UDP无需建立类如三次握手的连接,使得通信效率很高。因此UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。 UDP通信的过程如图所示: 服务端: (1)使用函数socket(...原创 2019-12-09 12:00:14 · 604 阅读 · 0 评论 -
主流隧道穿透协议
VPN主流分类基于PPP(点对点通信协议):LCP+NCP(IPCP/IPXCP)+PAP/CHAPPPTP(1723):PPTP认证交互,GRE压缩封装PPP帧 L2TP(1721):L2TP认证交互,L2TPoverUDP封装PPP帧(明文) SSTP(443/不定端口):SSL/TLS认证交互,SSL/TLS封装PPP帧(加密)基于IPSec(网络层的安全体系)IPSec=AH...原创 2019-11-05 15:30:16 · 1489 阅读 · 0 评论 -
协议栈图解
原创 2019-11-05 15:28:42 · 585 阅读 · 0 评论 -
IP查询接口
纯真IP纯真官网http://www.cz88.net/有提供IP数据库下载,可作为离线版本使用,但一直没找到合适的在线查询接口,于是xiaoz使用纯真IP提供的数据库自己开发了一个在线IP查询接口。接口地址:https://api.ttt.sh/ip/qqwry/ 帮助文档:https://doc.xiaoz.me/#/api/ip-query 频次限制:10min/300次淘...原创 2019-10-31 11:17:35 · 997 阅读 · 0 评论 -
计算机端口表
计算机之间依照互联网传输层TCP/IP协议不同的协议通信,都有不同的对应端口。所以,利用短信(datagram)的UDP,所采用的端口号码不一定和采用TCP的端口号码一样。以下为两种通信协议的端口列表链接:目录[隐藏]1端口状态颜色图例 20到1023号端口 31024到49151号端口 449152到65535号端口 5参考文献 6相关 7外部链接端口状...转载 2019-10-28 16:24:26 · 1212 阅读 · 0 评论