首页 > 编程知识 正文

nat网络地址转换详解,nat实现私有地址和网络地址转换

时间:2023-05-04 08:22:53 阅读:178670 作者:3101

Linux的网络接口分为网络设备接口、网络接口核心、网络协议族和网络接口套接字层四个部分。

值得借鉴:

3358 lxr.Linux.no/linuxv2.6. 30.4/net /

网络设备接口部分主要负责收发来自物理媒体的数据,实现的文件在linu/driver/net目录下。

网络接口的核心部分是整个网络接口的重要部分,负责为网络协议提供统一的发送接口,屏蔽各种物理介质,同时将下层的数据包发送到合适的协议。 是网络接口的中枢部分。 其主要实现文件位于linux/net/core目录中,其中linux/net/core/dev.c是主要的管理文件。

网络协议族部分是各种具体协议的实现部分。 Linux支持TCP/IP、IPX、X.25、AppleTalk等协议,通过各种具体协议实现的源代码在linux/net/目录中进行了正确的命名。 这里主要讨论TCP/IP(ipv4 )协议,实现的源代码在linux/net/ipv4,其中linux/net/ipv4/af_inet.c是主要的管理文件。

网络接口套接字层为用户提供的网络服务的编程接口。 主要源代码位于linux/net/socket.c

发送:

APP应用程序调用系统调用并将数据发送到套接字

套接字检查数据类型并调用相应的send函数

send函数检查套接字状态、协议类型,并传递给传输层

tcp/udp (传输层协议)生成这些数据的数据结构,添加端口号、检查、下层)、网络层)等协议头部并传递

添加ip (网络层协议) ip地址、检查、检查等ip报头

如果包大小超过mtu (最大包大小),则片化; ip将这些数据包传递到链路层

将链路层写入网卡队列

网卡调用中断驱动程序并将其发送到网络

接收:

数据包从网络到达网卡,网卡接收帧,放入网卡buffer,向系统发送中断请求

cpu调用相应的中断函数,这些中断处理程序位于网卡驱动程序中

中断处理函数从网卡读取存储器,传递给链接层

链路层将数据包放入自己的队列,设置软中断标志

调度程序查看标志位并调度相应的进程

进程将数据包从队列中取出,与对应的协议(通常为ip协议)相匹配,并将数据包传递给其协议接收函数

ip层进行数据包的错误检测、无错误、路由选择

路由的结果是,packet被传输或继续传递到上层

发送到本机后,进入链路层

链路层还进行错误检测,找到适当的端口相关套接字,分组进入适当的套接字接收队列

套接字调用具有该套接字的进程,该进程从读系统调用返回,将数据复制到自己的buffer,然后返回用户状态。

1、PC1需要知道对应的IP地址才能访问www.google.com。

域名只作为助记符,互联网访问通过IP进行。

例如,DNS是公民身份信息库,ip是身份证号码,域名是与该身份证号码对应的人名。

当然,这个实例是不合适的,域名也必须是唯一的,并对应于ip。

2、因此,PC1像DNS请求那样,需要寻找与www.google.com相对应的ip,即发送DNS请求。

PC1找dns,发现不在同一网络上。 不同的网段需要网关转发。

但是,PC1首先需要发送到网关,首先需要知道网关ip。

网关用于连接到不同的网络,并有自己的IP。 PC1需要知道网关IP。 ARP请求使得网关向mac地址发送回消息,如内部网广播网关ip。

PC1取得网关的mac地址,将ip分组封装在以太网帧中,发送到网关。

3、网关需要接收此以太网帧并转发至dns服务器。

类似地,网关可能需要发送ARP请求,并获得dns的mac地址。

4、dns服务器接收到请求,将www.google.com的ip发送至网关,网关基于NAT会话表项,将目的地ip变换为PC1,然后发送至PC1。 该过程也可能需要ARP请求。

5、PC1接收目的地ip,可以按照上述方式发送请求(目的地ip可以直接填写所取得的ip )。

其中:

广播ARP==,目的地主机回复并反馈mac地址。

NAT==在网络中自定义合法的ip地址。 各主机通过内部网进行通信; 通过外联网和NAT变换,成为外联网的合法ip。 这样,我们就可以将内部网和外部网隔离开来,每个网络都有自己的ip,可以通过少量的ip进行通信,虽然存在重叠。 在ip严重短缺的现代,节约了很多。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。