iNet

Python学习笔记:Socket网络编程

∥☆過路亽.° 提交于 2020-08-06 09:28:43
一、网络协议   1、七层模型:包括物理层、数据链路层、网络层、传输层、会话层,表示层,应用层,由左至右,一层层往上构建而成。 物理层:建立、维护、断开物理连接 数据链路层:底层的电子设备不认识IP, 只认识MAC ,数据链路层用的就是MAC寻址 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。我们使用的 IP地址就处于这个层 传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有: TCP和UDP 。数据包一旦离开网卡即进入网络传输层 会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话(在五层模型里面已经合并到了应用层) 表示层:数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)比如:格式有,JPEG、ASCll、EBCDIC、加密格式等 应用层:网络服务与最终用户的一个接口。 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP ,我们看到的大部分协议都处于这个层,建立在TCP和UDP协议之上,就像不同国家的语言,定义了怎么收(解释语义)和怎么发(语法)   2、而socket就是封装了这些协议的简单使用接口,如果需要开发自己的协议,至少要掌握socket的编程 二、socket中的地址簇:包括socket.AF_UNIX,socket.AF_INET,socket.AF

Nginx-keepalived+Nginx实现高可用集群

我是研究僧i 提交于 2020-08-06 08:05:57
Keepalived+Nginx 高可用集群(主从模式) 集群架构图: 说明:Keepalived机器同样是nginx负载均衡器。 1)实验环境准备(此处都是使用的centos7系统) # cat /etc/redhat- release CentOS Linux release 7.4 . 1708 (Core) 在所有节点上面进行配置 # systemctl stop firewalld // 关闭防火墙 # sed -i ' s/^SELINUX=.*/SELINUX=disabled/ ' /etc/sysconfig/selinux // 关闭selinux,重启生效 # setenforce 0          // 关闭selinux,临时生效 # ntpdate 0 .centos.pool.ntp.org // 时间同步 # yum install nginx -y     // 安装nginx 2)配置后端web服务器(两台一样) # echo " `hostname` `ifconfig ens33 |sed -n 's#.*inet \(.*\)netmask.*#\1#p'` " > /usr/share/nginx/html/index.html // 准备测试文件,此处是将主机名和ip写到index.html页面中 # vim /etc/nginx

PHP多进程处理tcp连接

二次信任 提交于 2020-08-06 06:29:32
<?php if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) { echo "failed to create socket: ".socket_strerror($sock)."n"; exit(); } if(($ret = socket_bind($sock,'127.0.0.1', 8888)) < 0) { echo "failed to bind socket: ".socket_strerror($ret)."n"; exit(); } if( ( $ret = socket_listen( $sock, 0 ) ) < 0 ) { echo "failed to listen to socket: ".socket_strerror($ret)."n"; exit(); } while (true) { $conn = @socket_accept($sock); //子进程 if(pcntl_fork() == 0) { $recv = socket_read($conn, 8192); //处理数据 $send_data = "server: ".$recv; socket_write($conn, $send_data); socket_close($conn); exit(0); } else

uint8_t / uint16_t / uint32_t /uint64_t数据类型详解

狂风中的少年 提交于 2020-08-06 04:40:23
uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型? 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么又是u又是_t的?很多人有这样的疑问。论坛上就有人问:以 * _t结尾的类型是不是都是long型的?在baidu上查一下,才找到答案,这时才发觉原来自己对C掌握的太少。 那么_t的意思到底表示什么?具体的官方答案没有找到,不过我觉得有个答案比较接近。它就是一个结构的标注,可以理解为type / typedef的缩写,表示它是通过typedef定义的,而不是其它数据类型。 uint8_t,uint16_t,uint32_t等都不是什么新的数据类型,它们只是使用typedef给类型起的别名,新瓶装老酒的把戏。不过,不要小看了typedef,它对于你代码的维护会有很好的作用。比如C中没有bool,于是在一个软件中,一些程序员使用int,一些程序员使用short,会比较混乱,最好就是用一个typedef来定义,如: typedef char bool ; 一般来说,一个C的工程中一定要做一些这方面的工作,因为你会涉及到跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码。为了用户的方便

数据库查询 LIKE

安稳与你 提交于 2020-08-06 03:44:11
# POSTGRE 类型转换 SELECT * FROM <TABLE> WHERE ip << INET '10.4.0.0/16'; SELECT * FROM <TABLE> WHERE ip::TEXT LIKE '192.168.%'; # MYSQL 类型转换 SELECT * FROM <TABLE> WHERE CONVERT(ip, CHAR) LIKE '192.168.%'; 来源: oschina 链接: https://my.oschina.net/redhands/blog/4367319

搭建K8S多节点LB负载均衡和keepalived

北战南征 提交于 2020-08-05 22:47:30
搭建LB负载均衡和keepalived 一、环境优化 LB1 [root@localhost ~] # hostnamectl set-hostname lb1 [root@localhost ~] # su //修改主机名 [root@lb1 ~] # systemctl stop NetworkManager //关闭NetworkManage服务 [root@lb1 ~] # systemctl disable NetworkManager Removed symlink /etc/systemd/ system /multi-user.target.wants/NetworkManager.service. Removed symlink /etc/systemd/ system /dbus-org.freedesktop.nm-dispatcher.service. Removed symlink /etc/systemd/ system /network-online.target.wants/NetworkManager- wait -online.service. [root@lb1 ~] # setenforce //关闭增强型安全功能 [root@lb1 ~] # sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc

redis主从复制数据延迟解决方案

有些话、适合烂在心里 提交于 2020-08-05 18:13:56
在 redis 主从复制模式下可能会出现 slave 延迟导致读写不一致的问题。 解决办法有2种 1. 修改从几点参数配置 从节点的 slave-serve-stale-data 参数也与此有关,它控制这种情况下从节点的表现 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式: 如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求。 如果slave-serve-stale-data设置为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误”SYNC with master in progress”。 2. 编写外部监控程序 将主从模式更换为哨兵模式则无需自己去做监控 对于无法容忍大量延迟场景,可以编写外部监控程序监听主从节点的复制偏移量,当延迟较大时触发报警或者通知客户端避免读取延迟过高的从节点。 编写监控程序,然后定时执行 <?php /** * [监控 redis 主从复制偏移量:当监控到延迟高的节点时,移除延迟高的从节点, 即动态修改读写分离配置信息。(可以添加触发报警机制)] * [在做主从复制时推荐使用 redis 的哨兵模式,则无需自己去监控,哨兵模式能自己监控并切换主从] * * @Author leeprince:2020-05-05 10:29 */ define ( 'IS_DEBUG' ,

wsl2中docker内部网络的端口转发

生来就可爱ヽ(ⅴ<●) 提交于 2020-08-05 08:32:50
wsl默认为内部网络,外部无法访问,通过配置nat转发可以直接访问docker的内部网络,无需其他复杂的配置。 首先需要知道wsl2的内部ip地址和docker内部的网络地址。例如我的网络是这样的系统Ubuntu wsl2的ip地址 inet 192.168.119.0/20 brd 192.168.127.255 scope global eth0 docker内部的ip地址 inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 进入Ubuntu # 允许路由转发 sudo iptables -P FORWARD ACCEPT 以管理员身份运行cmd #启用路由转发服务 任务管理器->服务->打开服务 -> Routing and Remote Access 或者执行下面的命令 sc start RemoteAccess # 添加路由表 route add -P 172.17.0.0 mask 255.255.0.0 192.168.119.0 # ping docker内部网关就可以ping通了 ping 172.17.0.1 然后就可以直接在windows下ping wsl2中docker的内部网络了 方便调试 来源: oschina 链接: https://my.oschina.net/microxdd

记一次蛋疼的Raw socket发送经历。附:Raw socket编程总结

孤街醉人 提交于 2020-08-05 01:17:32
最近在做信息安全导论的实验,实验很简单,就是实现一个ping程序,能够扫描主机是否打开的情况,但是,我也就纳了闷了,每次有个不易发现的bug(可能由于自己知识有限造成的),都得让我碰上,并且还得为这个bug操心好长时间,才能解决。。。。。。(抱怨是最浪费时间的一种行为!)ok~为了下次不再犯同样的错误,现在先记录一下吧~ 我的错误是,在一切都准备好了的时候(初始化套接字,创建套接字,填充icmp数据头,设定超时时间)发送数据包,成功,但是一旦接受就会超时,为此,我找了个能发送成功的程序,一步步的对照着看看哪儿不一样,但是对照完了,发现一些核心代码是一样的。。。。。。这就蛋疼了,然后我就怀疑是不是因为这些小的错误导致的呢?我一步步的改正,首先我怀疑我的可能是因为发送和接受我放在了不同的函数里面,导致,在一个函数返回的时间里,接受函数错过了接受(现在想想真是有病乱投医啊。。。。。。。操作系统在端口应该有缓存的吧,在接受到数据后,会存到缓存里,然后才会调用。。。。。)我就把所有函合并成了一个函数,果不其然,没有任何效果,依旧是发送超时。在经历无尽的折磨以后,我发现我的变量全是定义在类里面的,而其他的程序就是在函数里面直接声明,或者就是全局变量的,难道是因为类,半信半疑我就把所有定义在类里面的变量放到了cpp文件当中,作为全局变量调用,成功了~我去了!不应该啊,这是因为啥??

网络编程 — TCP/UDP Socket

天涯浪子 提交于 2020-08-04 17:33:50
目录 文章目录 目录 Linux 下的 Socket API 接口 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send 发送函数 recv 接收函数 sendto 发送函数 recvfrom 接收函数 TCP Socket 示例 UDP 通信流程 Linux 下的 Socket API 接口 创建 Socket int socket ( int af , int type , int protocol ) ; af :AF(Address Family,地址族),IP 地址类型,常用的有 AF_INET 和 AF_INET6,其前缀也可以是 PF(Protocol Family),即PF_INET 和 PF_INET6。 type :数据传输方式,常用的有面向连接(SOCK_STREAM)方式(即 TCP) 和无连接(SOCK_DGRAM)的方式(即 UDP)。 protocol :传输协议,常用的有 IPPROTO_TCP 和 IPPTOTO_UDP,分别表示 TCP 传输协议和 UDP 传输协议。 创建 TCP 套接字: int tcp_socket = socket ( AF_INET , SOCK_STREAM , IPPROTO_TCP ) ; 创建 UDP 套接字: int udp