网络接口

python提供的网络接口API和Linux Socket API间的关系探究

跟風遠走 提交于 2019-12-06 06:48:24
首先以一个简单的hello/hi网络聊天程序作为示例,它使用了python提供的Socket API接口,程序的功能就是:客户端向服务器发送一条消息,服务器端返回一条消息给客户端 server.py import socket host='127.0.0.1' port=1234 serv_sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) serv_sock.bind((host,port)) serv_sock.listen(10) #接收客户端套接字 clnt_sock,addr=serv_sock.accept() msg=clnt_sock.recv(1024) str_msg=msg.decode("utf-8") #返回给客户端消息 r_msg="Hi,"+str_msg[10:] clnt_sock.send(r_msg.encode("utf-8")) #关闭连接 serv_sock.close() clnt_sock.close() client.py import socket host='127.0.0.1' port=1234 sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect((host,port))

ioctl操作

拥有回忆 提交于 2019-12-05 17:52:00
  在本书中有两个地方都对这个函数进行了介绍,其实还有很多地方需要这个函数。ioclt函数传统上一直作为纳西而不适合归入其他精细定义类别的特性的系统接口。网络程序(特别是服务器程序)经常在程序启动执行后使用ioctl获取所在主机全部网络接口的信心,包括:接口地址、是否支持广播、是否支持多播。 #include <unistd.h> int ioctl(int fd,int request,...../* void *arg /); //返回:若成功则为0.失败则我-1 套接字操作 文件操作 接口操作 ARP高速缓存操作 路由表操作 流系统   不但某些ioclt操作和某些fcntl操作功能重叠(譬如把套接字设置为非阻塞),而且某些操作可以使用ioctl以不止一种方式制定(譬如设置套接字的进程组属主)。下表列出了网络相关ioctl请求的request参数以及arg地址必须指向的数据类型。 套接字操作   明确要求套接字ioctl请求有三个,它们都要求ioctl的第三个参数是指向某个整数的一个指针。 SIOCATMARK:如果本套接字的读指针当前位于带外标记,那就通过由第三个参数指向的帧数放回一个非0值,否则返回一个0值。 SIOCGPGRP:通过由第三个参数指向的整数返回本套接字的进程ID或进程组ID,该ID指定针对本套接字的SIGIO或SIGURG信号的接受进程。 SIOCSPGR

2018-07-23笔记(Linux集群架构 lvs keepalived)

易管家 提交于 2019-12-03 10:18:03
18.11 LVS DR模式搭建 原理: client 发送一个pv请求给VIP;VIP 收到这请求后会跟LVS设置的LB算法选择一个LB 比较合理的realserver,然后把此请求的package 的MAC地址修改为realserver的MAC地址,realserver 处理这个包后,会跟dst 为client ip 直接发送给 client ip;不经过lvs LVS DR模式的注意情况: 1、 LVS 的VIP 和 realserver 必须在同一个网段,不然广播后所有的包都会丢掉: 提前确认LVS/硬件LB 是什么模式,是否需要在同一个网段 2、所有的realserver 都必须绑定VIP的IP地址,否则realserver 收到package后发现dst 不是自己的IP,所有包都会丢掉。 3、realserver·处理完包后直接把package 通过dst IP 发送给 client ,不通过LVS/迎接IP 了这样的LVS /VIP 效率会更高一点。【通过把realserver的ip暴漏给外界,不是很安全】 DR模式搭建 – 准备工作 三台机器 dir 192.168.66.130 rs1 192.168.66.131 rs2 192.168.66.132 dir和rs上都要绑定的vip 192.168.66.200 1、dir上编写脚本 vim /usr/local

eth0 eth0:1 eth0.1 的区别

匿名 (未验证) 提交于 2019-12-02 22:56:40
eth0 eth0:1 和eth0.1三者的关系对应于物理网卡、子网卡、虚拟VLAN网卡的关系: 物理网卡:物理网卡这里指的是服务器上实际的网络接口设备,这里我服务器上双网卡,在系统中看到的2个物理网卡分别对应是eth0和eth1这两个网络接口。 子网卡:子网卡在这里并不是实际上的网络接口设备,但是可以作为网络接口在系统中出现,如eth0:1、eth1:2这种网络接口。它们必须要依赖于物理网卡,虽然可以与物理网卡的网络接口同时在系统中存在并使用不同的IP地址,而且也拥有它们自己的网络接口配置文件。但是当所依赖的物理网卡不启用时(Down状态)这些子网卡也将一同不能工作。 虚拟VLAN网卡:这些虚拟VLAN网卡也不是实际上的网络接口设备,也可以作为网络接口在系统中出现,但是与子网卡不同的是,他们没有自己的配置文件。他们只是通过将物理网加入不同的VLAN而生成的VLAN虚拟网卡。如果将一个物理网卡通过vconfig命令添加到多个VLAN当中去的话,就会有多个VLAN虚拟网卡出现,他们的信息以及相关的VLAN信息都是保存在/proc/net/vlan/config这个临时文件中的,而没有独自的配置文件。它们的网络接口名是eth0.1、eth1.2这种名字。 注意:当需要启用VLAN虚拟网卡工作的时候,关联的物理网卡网络接口上必须没有IP地址的配置信息,并且

Linux 网络编程―― libpcap 详解

匿名 (未验证) 提交于 2019-12-02 21:59:42
概述 libpcap 是一个 网络数据包捕获函数库 ,功能非常强大,Linux 下著名的 tcpdump 就是以它为基础的。 libpcap主要的作用 1)捕获各种数据包,列如:网络流量统计。 2)过滤网络数据包,列如:过滤掉本地上的一些数据,类似防火墙。 3)分析网络数据包,列如:分析网络协议,数据的采集。 4)存储网络数据包,列如:保存捕获的数据以为将来进行分析。 libpcap 的安装 libpcap 的抓包框架 pcap_lookupdev() :函数用于查找网络设备,返回可被 pcap_open_live() 函数调用的网络设备名指针。 pcap_lookupnet() :函数获得指定网络设备的网络号和掩码。 pcap_open_live() : 函数用于打开网络设备,并且返回用于捕获网络数据包的数据包捕获描述字。对于此网络设备的操作都要基于此网络设备描述字。 pcap_compile() : 函数用于将用户制定的过滤策略编译到过滤程序中。 pcap_setfilter() :函数用于设置过滤器。 pcap_loop() :函数 pcap_dispatch() 函数用于捕获数据包,捕获后还可以进行处理,此外 pcap_next() 和 pcap_next_ex() 两个函数也可以用来捕获数据包。 pcap_close() :函数用于关闭网络设备,释放资源。 利用

常用运维工具小结

匿名 (未验证) 提交于 2019-12-02 21:56:30
运维常用工具 系统监控工具 htop 命令 默认支持图形界面的鼠标操作 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行 可以直接通过 F9 杀死进程 # 安装htop(需要安装epel) $ yum -y install htop    安装了htop,但是习惯于敲top命令,可以去修改配置文件 $ vim /etc/bashrc # 在最后追加这个判断,如果存在htop,top=htop,如果没有安装htop,则top还是top if [ -f /usr/bin/htop ];then alias top='/usr/bin/htop' fi 多功能系统信息统计工具 dstat 命令 # 查看dstat支持的插件 $ dstat --list internal: aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap, swapold, sys, tcp, time, udp, unix, vm /usr/share/dstat: battery, battery-remain, cpufreq, dbus, disk-tps, disk-util,

Linux中的lo回环接口

寵の児 提交于 2019-12-02 08:01:01
引言————————————————————————————- 我们在Linux执行 ifconfig 指令时会发现显示两个设备的信息,一般来说,一个是网卡eth0,一个就是lo,具体系统可能会有差别。我们知道eth0是以太网卡,而对于lo似乎不太当回事。lo其实是一个系统虚拟的环回接口,它的IP地址是127.0.0.1,利用这个接口可以实现系统内部发送和接收数据,所以一般情况下我们使用下面指令: root @localhost ~ # ping 127.0.0.1 是可以ping通的,因为这其实就是系统内部建立连接。   (1) 网络接口的命名    eth0 : ethernet的简写,一般用于以太网接口。     wifi0 :wifi是无线局域网,因此wifi0一般指无线网络接口。    ath0 : Atheros的简写,一般指Atheros芯片所包含的无线网络接口。    lo : local的简写,一般指本地环回接口。   (2) 网络接口如何工作    网络接口是用来发送和接受数据包的基本设备 。   系统中的所有网络接口组成一个链状结构,应用层程序使用时按名称调用。   每个网络接口在linux系统中对应于一个struct net_device结构体,包含name,mac,mask,mtu…信息。   每个硬件网卡(一个MAC)对应一个网络接口

linux-TCP网络接口传输速率测试程序

不问归期 提交于 2019-11-30 11:50:46
原先想测试板子的网口通信速率,但是由于开发环境没有外网,没法用现成的各种工具,只好自力更生。所以写了一个基于socket的小代码,拿出来跟大家分享一下。在centos和ubuntu环境下编译成功。ps:由于使用了多线程,因此编译是要加上-lpthread的选项哦。 代码链接:https://github.com/yangyinqi/nic_speed 对于测试网口传输速率这种需求,既然要测量比较纯粹的传输速率,因此连接直接建立在tcp传输层上,排除各种应用层协议解析带来的延时。 服务端: 服务端负责向客户连接不断的发送数据包,长度为1400,因为考虑到链路层中mtu大小一般为1500。定义一个带头节点单向链表用来存储各个连接上的数据包总数,方便计算速率。 typedef struct _thread_args { int client_sockfd; char *data_pointer; long packet_count; int thread_seq; pthread_t thread_id; struct _thread_args *next; }thread_args; 头节点存放监听套接字信息,以及速率计算线程的信息。 在主线程中阻塞在accept处,有返回时创建一个线程来维持这个连接,向客户端发送数据。 int thread_seq = 0; client_len =

TCP/IP协议分层详解

有些话、适合烂在心里 提交于 2019-11-29 19:08:54
TCP/IP协议分层详解 目录 TCP/IP 和 ISO/OSI TCP/IP分层模型 数据的封装与分用 其他相关概念 TCP/IP 通信传输流 负责传输的 IP 协议 正文 回到顶部 TCP/IP 和 ISO/OSI      ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。   TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议,通过20多年的发展已日渐成熟,并被广泛应用于局域网和广域网中,目前已成为事实上的国际标准。TCP/IP协议簇是一组不同层次上的多个协议的组合,通常被认为是一个四层协议系统,与OSI的七层模型相对应。 回到顶部 TCP/IP分层模型    应用层   应用层决定了向用户提供应用服务时通信的活动。|| 应用层负责处理特定的应用程序细节。   TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(File Transfer Protocol,文件传输协议)和 DNS(Domain Name System,域 名系统

Linux CentOS 7网络配置基础

拈花ヽ惹草 提交于 2019-11-29 03:21:15
查看主机名称 hostname命令:查看或设置当前主机名 修改主机名称 hostnamectl set-hostname 新主机名称 命令:修改当前主机名称 在配置文件“/etc/sysconfig/network”中直接修改 查看网络接口信息 ifconfig [网络接口名]命令:查看指定网络接口的信息,不指定接口则显示所有接口信息。 下面解释一下几个重要的参数: inet 192.168.52.131 //IP地址 netmask 255.255.255.0 //子网掩码 broadcast 192.168.52.255 //广播地址 inet6 fe80::8629:c3e2:139c:884a //ipv6地址 ether 00:0c:29:7a:41:33 //MAC地址 设置网络参数的方式: 临时配置:ifconfig 网络接口名称 IP地址 命令----------使用命令调整网络参数 可以快速直接的修改网络参数,一般适合在调试网络过程中使用,系统重启后所做的修改都会消失。 固定设置:通过修改配置文件来修改网络参数,适合对服务器设置固定参数时使用,需要重启网络服务或重启系统以后才会生效。 网卡的禁用和激活 禁用网卡:ifconfig 网络接口 down [root@localhost ~]# ifconfig ens33: flags=4163<UP