首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用RDMA的服务器上的客户端IP地址?

使用 RDMA(Remote Direct Memory Access)技术可以显著提高网络通信的性能,特别是在高性能计算(HPC)和数据中心环境中。RDMA 允许直接从一台计算机的内存访问另一台计算机的内存,而无需经过操作系统的干预,从而减少了延迟和 CPU 负载。

在使用 RDMA 的服务器上获取客户端的 IP 地址,通常涉及以下几个步骤:

  1. 配置 RDMA 环境:确保 RDMA 硬件和软件环境已经正确配置。
  2. 编写 RDMA 应用程序:使用 RDMA 编程接口(如 libibverbs 或 RDMA CM)编写应用程序。
  3. 获取客户端 IP 地址:在 RDMA 连接建立过程中,获取客户端的 IP 地址。

以下是一个使用 RDMA CM(Connection Manager)库的示例,展示了如何在服务器端获取客户端的 IP 地址。

安装 RDMA 库

首先,确保你已经安装了 RDMA 库。你可以使用以下命令在基于 Debian 的系统上安装:

代码语言:javascript
复制
sudo apt-get install rdma-core ibverbs-utils

编写 RDMA 服务器代码

以下是一个简单的 RDMA 服务器示例,展示了如何获取客户端的 IP 地址:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <rdma/rdma_cma.h>

void die(const char *reason) {
    fprintf(stderr, "%s\n", reason);
    exit(EXIT_FAILURE);
}

int main(int argc, char **argv) {
    struct rdma_cm_id *listener = NULL;
    struct rdma_cm_id *client = NULL;
    struct rdma_event_channel *ec = NULL;
    struct rdma_cm_event *event = NULL;
    struct sockaddr_in addr;
    int ret;

    // 创建事件通道
    ec = rdma_create_event_channel();
    if (!ec) die("rdma_create_event_channel failed");

    // 创建 RDMA 监听器
    ret = rdma_create_id(ec, &listener, NULL, RDMA_PS_TCP);
    if (ret) die("rdma_create_id failed");

    // 绑定地址
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(20000); // 监听端口
    addr.sin_addr.s_addr = INADDR_ANY;

    ret = rdma_bind_addr(listener, (struct sockaddr *)&addr);
    if (ret) die("rdma_bind_addr failed");

    // 开始监听
    ret = rdma_listen(listener, 1);
    if (ret) die("rdma_listen failed");

    printf("Server is listening on port 20000...\n");

    // 等待连接请求
    ret = rdma_get_cm_event(ec, &event);
    if (ret) die("rdma_get_cm_event failed");

    if (event->event == RDMA_CM_EVENT_CONNECT_REQUEST) {
        client = event->id;

        // 获取客户端地址
        struct sockaddr_in *client_addr = (struct sockaddr_in *)rdma_get_peer_addr(client);
        char client_ip[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &(client_addr->sin_addr), client_ip, INET_ADDRSTRLEN);
        printf("Client connected from IP: %s\n", client_ip);

        // 接受连接
        struct rdma_conn_param conn_param;
        memset(&conn_param, 0, sizeof(conn_param));
        ret = rdma_accept(client, &conn_param);
        if (ret) die("rdma_accept failed");
    }

    // 清理
    rdma_ack_cm_event(event);
    rdma_destroy_id(listener);
    rdma_destroy_event_channel(ec);

    return 0;
}

编译和运行

编译上述代码:

代码语言:javascript
复制
gcc -o rdma_server rdma_server.c -lrdmacm -libverbs

运行服务器:

代码语言:javascript
复制
./rdma_server

解释

  1. 创建事件通道: ec = rdma_create_event_channel(); if (!ec) die("rdma_create_event_channel failed");
  2. 创建 RDMA 监听器: ret = rdma_create_id(ec, &listener, NULL, RDMA_PS_TCP); if (ret) die("rdma_create_id failed");
  3. 绑定地址: memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(20000); // 监听端口 addr.sin_addr.s_addr = INADDR_ANY; ret = rdma_bind_addr(listener, (struct sockaddr *)&addr); if (ret) die("rdma_bind_addr failed");
  4. 开始监听: ret = rdma_listen(listener, 1); if (ret) die("rdma_listen failed");
  5. 等待连接请求: ret = rdma_get_cm_event(ec, &event); if (ret) die("rdma_get_cm_event failed");
  6. 获取客户端地址: if (event->event == RDMA_CM_EVENT_CONNECT_REQUEST) { client = event->id; struct sockaddr_in *client_addr = (struct sockaddr_in *)rdma_get_peer_addr(client); char client_ip[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &(client_addr->sin_addr), client_ip, INET_ADDRSTRLEN); printf("Client connected from IP: %s\n", client_ip); struct rdma_conn_param conn_param; memset(&conn_param, 0, sizeof(conn_param)); ret = rdma_accept(client, &conn_param); if (ret) die("rdma_accept failed"); }
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

获取客户端真实 IP 地址最佳实践

地址;网站无代理时(客户端->服务端),WEB服务器(Nginx,Apache等)会设置该值为客户端 IP;网站存在代理时(客户端->代理->服务端),该值为代理 IP。...代理必须向下传递客户端 IP 地址原因:从入口流量开始,经过 N 层代理,如果代理中间不传递客户端 IP 地址,底层业务必然获取不到客户端真实 IP 地址。2....统一使用 nginx realip 模块获取客户端 IP 地址# nginx.conf# ...set_real_ip_from 腾讯云/阿里云 NAT 出口网段;set_real_ip_from...按照这个思路,如果边缘节点拿到了客户端 IP,重置 X-FORWARDED-FOR 头部为客户端 IP 地址,并转发到下游,业务只获取第一个 IP 地址,理论也不会被伪造,业务也简单,为什么不采用?...因为边缘节点方案最大缺点在于失去了灵活性,譬如你想接入高防 IP 或者 WAF 防火墙,此时它已不再是边缘节点,而是接收高防服务器或 WAF 防火墙清洗流量,将会拿到错误 IP 地址。3.

90650
  • 使用DNS查询Web服务器IP地址

    ip地址,定位规则: 先通过ip地址主机号查找到服务器所在子网接着在利用网络号在定位到子网中找到服务器 定位到服务器ip地址就可以向服务器发送数据了 发送网络请求大致流程: 先到达子网中路由器...IP和域名各自优缺点 IP:TCP/IP协议是通过IP地址通信,但是人们很难记住IP地址,相反使用域名人们只要知道这个服务器网站名字就可以,很方便也很好记忆 域名:域名虽然相对好记,但是如果使用域名代替...域名相对于人来说更好记忆,相对路由器来说IP地址处理效率会更高。那么就需要一个转换机制来做映射,通过域名查找IP给路由器使用,这个转换器就是DNS服务器。...域名解析 DNS客户端使用域名访问机器)也叫作DNS解析器,使用DNS查找域名对应IP地址叫做域名解析,那么浏览器如何向DNS服务器发起查询呢?...答案是使用Socket程序库 大致流程 浏览器会调用socket库中getHostByname程序并把对应域名填写到参数中,之后发起请求,DNS服务器会返回具体IP地址,操作系统把这个IP地址写入到浏览器指定内存地址

    9.2K10

    iMC服务器修改IP地址配置

    配置步骤 注意:操作iMC参数里IP地址前,请务必将数据库IP地址设置修改正确。 iMC各服务器,提供一个单独配置文件,用于记录各组件部署位置及其数据库地址。...该文件在所有安装了iMC服务器均存在(主从服务器端均存在)。...图2停止“H3C iMC Server”服务 2.在每台安装了iMC服务器使用Windows记事本(或Linux下vi编辑器),打开地址配置文件。...系统使用Linux系统Oracle数据库环境,部署方式采用分布式加分离式数据库,如果修改了数据库服务器IP地址,需要对数据库服务器tnsname.ora文件进行修改,修改步骤如下: 1.使用“su...地址修改方法:在此场景下,需要使用一个临时IP地址IPc,并执行三次修改(每次修改都需要执行2.2节步骤1-6):第一次修改将服务器A地址由IPa改为IPc;第二次修改将服务器B地址由IPb改为IPa

    6.6K20

    PHP 获取客户端 IP 地址方法实例代码

    先来了解一个变量含义: $_SERVER[‘REMOTE_ADDR’]:浏览当前页面的用户计算机ip地址 $_SERVER[‘HTTP_CLIENT_IP’]:客户端ip $_SERVER[‘HTTP_X_FORWARDED_FOR...’]:浏览当前页面的用户计算机网关 $_SERVER[‘HTTP_X_REAL_IP’]:nginx 代理模式下,获取客户端真实IP /** * 获取客户端IP地址 */ function real_ip...['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (isset($_SERVER['HTTP_CF_CONNECTING_IP...-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_IP'])) { $ip = $_SERVER['HTTP_X_REAL_IP']; }...return $ip; } 总结 以上所述是小编给大家介绍PHP 获取客户端 IP 地址方法实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家

    4.7K10

    PHP 获取客户端 IP 地址办法实例代码

    先来了解一个变量含义: $_SERVER[‘REMOTE_ADDR’]:浏览当前页面的用户计算机ip地址 $_SERVER[‘HTTP_CLIENT_IP’]:客户端ip $_SERVER[‘HTTP_X_FORWARDED_FOR...’]:浏览当前页面的用户计算机网关 $_SERVER[‘HTTP_X_REAL_IP’]:nginx 代理模式下,获取客户端真实IP /** * 获取客户端IP地址 */ function real_ip...'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (isset($_SERVER['HTTP_CF_CONNECTING_IP']) &&....){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_IP'])) { $ip = $_SERVER['HTTP_X_REAL_IP']; } return...$ip; } 总结 以上所述是小编给大家介绍PHP 获取客户端 IP 地址办法实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家

    2.2K21

    EdgeOne 实现基于客户端 IP 地址会话保持

    为什么需要基于客户端 IP 地址进行会话保持? 2. 基于客户端 IP 地址会话保持适用场景。 3. EdgeOne 边缘函数加规则引擎实现基于客户端 IP 地址会话保持具体步骤。...然而,在业务发展初期,由于用户量相对较少,会话管理相对简单,通常不会遇到基于客户端 IP 地址会话保持问题,但随着业务进一步发展,特别是在以下场景中,基于客户端 IP 地址会话保持需求变得尤为迫切...通过 EdgeOne 边缘函数加规则引擎可解决上述问题,可实现基于客户端 IP 地址,确保来自同一客户端 IP 地址请求始终被转发到同一台后端源站上,从而保持会话连续性和数据一致性。...以下为基于客户端 IP 地址会话保持示例代码:// 根据客户端ip地址,返回到不同源站组,也就是在IP地址不变情况下,同一个客户端回到同一个源站const ORIGIN_GROUPS = ["originGroup1...}// 映射客户端IP到虚拟节点,并找到对应源站组async function findSourceGroupForIp(ip, hashes, mapping) { // 使用md5函数计算IP

    8610

    Nginx反向代理及获取真实客户端IP地址

    然而,使用反向代理同时,也引入了一个新问题:如何获取到真实客户端 IP 地址?Nginx 作用与问题Nginx 作为一个反向代理,主要是接收来自客户端请求,然后将请求转发给后端服务器。...然而,这种设计也带来了一个问题:后端服务器无法获取到真实客户端 IP 地址。在很多应用中,获取真实客户端 IP 地址是非常重要,例如,进行地理定位、检测欺诈行为、限制访问速率等。...在这种情况下,你可能需要修改你上游代理服务器配置,以便将客户端 IP 地址转发到你 Nginx 服务器。...结论在使用 Nginx 反向代理时,通过正确配置,我们可以很方便地获取到真实客户端 IP 地址。...这两个头都是在 Nginx 配置中设定。结论使用 Nginx 作为反向代理服务器可以带来很多好处,例如负载均衡和安全防护。然而,它也会隐藏客户端真实 IP 地址

    9.9K30

    如何通过 Envoy Gateway 得到客户端真实 IP 地址

    在这个过程中,由于客户端 IP 地址在经过代理服务器、负载均衡器等中间节点时会丢失,导致服务器无法获取到客户端真实 IP 地址。...如果我们服务需要支持 HTTP 之外其他协议,则可以考虑使用代理协议(Proxy Protocol)来传递客户端 IP 地址。 什么是代理协议?...Proxy Protocol 是一个在传输层(TCP)运行协议,用于在代理服务器和后端服务器之间传递客户端真实 IP 地址。...由于 Proxy Protocol 是在 TCP 连接建立阶段添加,因此它对应用协议是透明,可以在任何应用协议使用,包括 HTTP、HTTPS、SMTP 等。...TCP4 表示使用是 IPv4 和 TCP 协议。 162.231.246.188 是原始客户端 IP 地址。 10.0.0.1 是服务端(代理服务器 IP 地址

    25410

    ip地址概念

    正是因为有了IP协议,因特网才得以迅速发展成为世界最大、开放计算机通信网络。因此,IP协议也可以叫做“因特网协议”。 IP地址被用来给Internet电脑一个编号。...大家日常见到情况是每台联网PC都需要有IP地址,才能正常通信。...例:点分十进IP地址(100.4.5.6),实际是32位二进制数(01100100.00000100.00000101.00000110)。...IP地址(英语:Internet Protocol Address)是一种在Internet给主机编址方式,也称为网络协议地址。常见IP地址,分为IPv4与IPv6两大类。...IP地址编址方案:IP地址编址方案将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类作为多播和保留使用。 IPV4就是有4段数字,每一段最大不超过255。

    1.6K30

    利用SDF2.3获取Windows MobileIP地址和MAC地址

    在Windows Mobile设备,我们可以使用ActiveSync将其和PC机连接,也可以使用Wifi连接AP来上网,那么,我们如何来获得其连接IP地址和相应MAC地址呢?...using OpenNETCF.Net;         using OpenNETCF.Net.NetworkInformation;     接着,在需要得到IP和MAC地方,使用如下方式获得(...以显示在listBox方式为例)         foreach (INetworkInterface currentInterface in NetworkInterface.GetAllNetworkInterfaces...图2 测试结果     可以看到,第一个是手机Wifi模块分配到IP地址和本身MAC地址,第二个是手机通过ActiveSync和PC机进行通信RNDIS(Remote NDIS)IP地址和MAC...地址,有关这个方面的资料,可以参考Jake Lin两篇Blog: Windows Embedded CE和Windows Mobile下ActiveSync开发 Windows Embedded

    1.6K90

    服务器基础知识(IP地址与自动化技术使用

    ip地址是什么? IP地址主要作用是**为互联网上每个网络和每台主机分配一个逻辑地址**。 它由32位二进制数字组成,通常分为四个部分,每个部分是一个8位十进制数,各部分之间用点(.)分隔。...例如,一个常见IP地址可能是192.168.0.1。 此外,IP地址可以分为公有和私有两种类型。 公有IP地址用于互联网上公共计算机,可以直接访问互联网资源。...ip地址理解 如何查看ip地址 Windows命令提示符 在Windows操作系统中,查看IP地址命令是 **ipconfig**。 要使用这个命令,你需要通过以下步骤来操作: 1....万网获取本地公网IP地址 (www.net.cn) http://www.net.cn/static/customercare/yourip.asp 自动化技术应用与意义 服务器自动化技术应用主要集中在以下几个方面...**网络和存储管理**:自动化技术还可以应用于网络设备配置和管理,以及存储系统设置和维护。这有助于优化资源使用,提高数据中心运营效率。 5.

    13410

    IP地址保留地址

    私有地址只能在内部网络中使用,只有通过代理服务器才能与Internet通信。  一个机构网络要连入Internet,必须申请公用IP地址。...我们一起来看看吧:  一、0.0.0.0  严格说来,0.0.0.0已经不是一个真正意义IP地址了。它表示是这样一个集合:所有不清楚主机和目的网络。...五、169.254.x.x  如果你主机使用了DHCP功能自动获得一个IP地址,那么当你DHCP服务器发生故障,或响应时间太长而超出了一个系统规定时间,Wingdows系统会为你分配这样一个地址...x  私有地址,这些地址被大量用于企业内部网络中。一些宽带路由器,也往往使用192.168.1.1作为缺省地址。私有网络由于不与外部互连,因而可能使用随意IP地址。...在Internet,这类地址是不能出现。  对一台网络主机来说,它可以正常接收合法目的网络地址有三种:本机IP地址、广播地址以及组播地址

    8.3K10

    Java服务器获取客户端真实IP

    今天我们就来看看服务器是如何获取到客户端真实IP。 nginx配置 首先,一个请求肯定是可以分为请求头和请求体,而我们客户端IP地址信息一般都是存储在请求头里。...在《实战nginx》中,有这么一句话: 经过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端ip,通过$remote_addr变量拿到将是反向代理服务器...这句话意思是说,当你使用了nginx反向服务器后,在web端使用 request.getRemoteAddr()(本质就是获取 $remote_addr),取得是nginx地址,即 $remote_addr...变量, X-Forwarded-For部分包含是用户真实ip, $remote_addr部分值是一台nginxip地址,于是通过这个赋值以后现在 X-Forwarded-For值就变成了“...它不是RFC中定义标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项详细介绍。如果有该条信息, 说明您使用了代理服务器地址就是后面的数值。可以伪造。

    4.9K10

    如何在Nginx阻止特定IP地址访问,以增强服务器安全性

    本文将详细介绍如何在Nginx阻止特定IP地址访问,以增强服务器安全性。图片方法一:使用Nginxdeny指令Nginxdeny指令可以用来拒绝特定IP地址IP地址访问。...在该服务器块内,使用deny指令来定义要拒绝IP地址IP地址段。...IP地址能够访问您Nginx服务器,其他IP地址将被拒绝访问。...然后,在操作系统层面使用防火墙来阻止指定IP地址。具体配置方法可能因使用操作系统和防火墙软件而异。...总结在本文中,我们详细介绍了在Nginx阻止特定IP地址访问三种方法:使用Nginxdeny指令、结合allow指令和防火墙、以及使用第三方模块。

    2.5K00

    如何查询SSL证书OCSP服务器IP地址

    不同CA签发SSL证书OCSP验签速度有所不同,这是因为他们使用不同OCSP服务器。需要了解OCSP验签服务器访问速度,首先需要知道如何查询OCSP服务器IP地址。1....以racent.com为例,输入域名,打开网站,点击地址安全锁标识。图片2. 在弹窗中点击连接是安全。图片3. 在弹出菜单中,点击证书有效菜单,进入证书信息详情弹窗。图片4....查看“授权中心信息访问权限”即可获取OCSP服务器。菜单路径:详细信息->证书字段->授权中心信息访问权限->OCSP响应程序,即可查看到OCSPURL。图片5....运行->cmd,ping出该URL即可获取到该OCSP服务器IP地址。图片以上是国内节点ping出锐安信SSL证书OCSP服务器IP地址以及访问速度。...其他证书均可参照上述步骤查询OCSP服务器IP地址

    5.4K40
    领券