首页
学习
活动
专区
工具
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.

1K50
  • 使用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.3K10

    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.7K20

    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

    9910

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

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

    11.6K30

    如何通过 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 地址。

    31410

    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 Mobile上的IP地址和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地址中的保留地址

    私有地址只能在内部网络中使用,只有通过代理服务器才能与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.4K10

    服务器基础知识(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.

    14810

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

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

    3K00

    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部分的值是上一台nginx的ip地址,于是通过这个赋值以后现在的 X-Forwarded-For的值就变成了“...它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。如果有该条信息, 说明您使用了代理服务器,地址就是后面的数值。可以伪造。

    4.9K10

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

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

    5.4K40

    如何更改电脑的IP地址和DNS服务器?

    在多网段的局域网中,共享文件和打印机就需要通过固定IP地址的方式, 来避免共享主机的IP地址变换,其他电脑无法访问到的问题。...在有些网站无法访问的时候,可能需要通过更改DNS服务器地址的方式来访问这些网站。 ? 一起来看看如何更改吧!...(共享主机为了稳定使用,最好是接网线,这里就只演示接网线的更改方法。如果要设置无线的IP或DNS,就选择无线网络连接属性,后面的更改方式都一样的) ? ?...在下面这个界面就可以设置IP地址和DNS了,ip地址可以根据本身路由器DHCP分配的IP来自定,一般就设置DHCP分配的地址,这样可以避免和公司内网内其他电脑的IP冲突。...DNS可以使用公用的DNS服务器,小编这里就用的是阿里和114的DNS。设置完成后点确定就OK啦!

    20.4K41

    计算ip地址的有效范围是_ip地址如何计算

    例如: ip:192.168.9.3 子网掩码:255.255.254.0 网关:192.168.9.1 1:IP地址 = 网络地址 + 主机地址,二进制为: 11000000 10101000...00001001 00000011 2:子网掩码的二进制表示为: 11111111 11111111 11111110 00000000 解析:前面1的就是网络地址部分,后面0就是主机地址,所以此处有...3:网络地址 = 子网掩码 & IP地址,即:192.168.8.0 4:广播地址 = 3中求出的网络地址的主机地址部分置1,即:192.168.9.255 5:有效的IP段计算: 开始地址 = 网络地址...+1,即192.168.8.1 结束地址 = 广播地址-1,即192.168.9.254 那么当前示例的有效IP段为:192.168.8.1~192.168.9.254 版权声明:本文内容由互联网用户自发贡献...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。 ..

    3.8K10
    领券