计算机网络——网络地址转换(NAT)技术

目录

前言

前篇

引言

SNAT(Source Network Address Translation)源网络地址转换

SNAT流程

确定性标记

DNAT(Destination Network Address Translation,目标网络地址转换)

NAT技术重要性


前言

本博客是博主用于复习计算机网络的博客,如果疏忽出现错误,还望各位指正。

这篇博客是在B站掌芝士zzs这个UP主的视频的总结,讲的非常好。

可以先去看一篇视频,再来参考这篇笔记(或者说直接偷走)。

家庭网络如何通过路由器上网?源地址转换和目标地址转换时什么?_哔哩哔哩_bilibili

前篇

  1. 计算机网络——MAC地址和IP地址-CSDN博客
  2. 计算机网络——交换机和路由器-CSDN博客

引言

NAT(Network Address Translation),是指网络地址转换

在两个不同家庭中,通过路由器接入的两台电脑,IP地址都是192.168.1.10。同时访问互联网上的同一个网站,为什么IP地址不会冲突?SNAT和DNAT又是什么?

SNAT(Source Network Address Translation)源网络地址转换

计算机网络中数据包如何发送是根据目标IP进行路由的。如果同一个网络中出现两个相同的IP则ARP表会出现混乱,数据包发送到哪台主机上将变成不确定性行为。

### 计算机网络课程设计示例 #### 获取网卡列表并捕获数据包 对于局域网内的数据包捕获和统计工作,核心在于访问计算机的网卡设备。由于所有的包发送与接收均需通过网卡来执行,在开始捕获之前,首要任务是枚举当前机器上可用的网卡接口,并允许用户选择特定的一个用于监听流量[^1]。 ```java import jnetpcap.Pcap; import jnetpcap.PcapIf; public class NetworkInterfaceExample { public static void main(String[] args) { StringBuilder errbuf = new StringBuilder(); Pcap.findAllDevs(new ArrayList<PcapIf>(), errbuf); for (PcapIf device : devices) { System.out.println("Name.......... " + device.getName()); System.out.println("Description... " + device.getDescription()); } } } ``` 此段代码展示了如何使用`jnetpcap`库中的API函数查找所有本地网络适配器,并打印它们的名字及其描述信息给终端用户查看。 #### Socket编程实现基本文本通信 当涉及到两台不同物理主机间的简单消息传递时,可以通过套接字(Socket)机制建立可靠的TCP连接通道。在此基础上构建的应用层协议能够满足A向B端发送字符串形式的信息流的需求[^2]。 ```cpp #include <sys/socket.h> #include <netinet/in.h> int create_tcp_server(int port){ int sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in server_addr; bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(port); server_addr.sin_addr.s_addr=htonl(INADDR_ANY); bind(sockfd,(struct sockaddr*)&server_addr,sizeof(server_addr)); listen(sockfd,5); return sockfd; } // Client side would use connect() to establish a connection with the above created server. ``` 上述C++片段定义了一个创建TCP服务器的方法,它绑定指定端口等待客户端发起请求连接,之后便能处理来自远端的数据读取操作。 #### IPv4 NAT静态映射设置 在网络地址转换(NAT)环境中,内部私有IP地址空间里的资源如果想要对外提供服务,则需要配置相应的NAT规则以便公网侧可以正常访问这些资产。例如,将内网中某Web服务器(假设其位于192.168.10.2且运行于标准HTTP端口80之上)暴露至互联网,可通过如下CLI指令完成: ```bash ip nat inside source static tcp 192.168.10.2 80 209.165.200.223 8080 ``` 这条命令的作用是在路由器上设定一条永久性的外部到内部的服务转发路径,使得外界可以通过公共IP `209.165.200.223` 的8080端口访问该内部web站点[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值