网络地址转换(NAT,Network Address Translation)协议:
本地网络内通信的IP数据报的源与目的IP地址均在子网10.0.0.0/24内;所有离开本地网络去往Internet的数据报的源IP地址需替换为相同的NAT IP地址以及不同的端口号(16bit端口号可以支持六万多个并行连接)。
 
使用NAT技术的原因:
(1)IPv4地址耗尽,只能从ISP申请一个IP地址
(2)本地网络设备IP地址的变更,无需通告外界网络
(3)变更ISP时,无需修改内部网络设备IP地址
(4)内部网络设备对外界网络不可见,即不可直接寻址(安全)
 
NAT的实现:
(1)替换
利用NAT IP地址—新端口号替换每个外出IP数据报的源IP地址—源端口号
(2)记录
将每对NAT IP地址—新端口号与源IP地址—源端口号的替换信息存储到NAT转换表中
(3)替换
根据NAT转换表中的记录,替换每个进入内网的IP数据报的目的IP地址—目的端口号
NAT主要争议:
(1)路由器应该只处理第3层功能
(2)违背端到端通信原则
应用开发者必须考虑到NAT的存在,e.g., P2P应用
(3)地址短缺问题应该由IPv6来解决
 
NAT穿透问题:
客户期望连接内网地址为10.0.0.1的服务器,却不能直接利用该地址直接访问服务器;对外唯一可见的地址是NAT地址138.76.29.7
解决方案:
(1)静态配置NAT,将特定端口的连接请求转发给服务器
(2)利用通用即插即用(UPnP,Universal Plug and Play)互联网网关设备协议(IGD Internet Gateway Device)自动配置
UPnP是一种允许主机发现并配置邻近NAT的协议(前提是主机和NAT兼容UPnP),其允许外部主机使用TCP或UDP向NAT化的主机发起通信会话。
使用UPnP,在主机上运行的应用程序能够请求一个与公共端口号的NAT映射,该映射位于其专用IP地址—专用端口号和公共IP地址—公共端口号之间。如果某NAT接受该请求并生成映射,则来自外部的结点能够发起到公共IP地址—公共端口号的TCP 连接。
此外, UPnP让该应用程序知道公共IP 地址—公共端口号,因此该应用程序能够向外部世界通告它。
(3)中继(如Skype)
NAT内部的客户与中继服务器建立连接、外部客户也与中继服务器建立连接。中继服务器桥接两个连接的分组。

计算机网络-网络层(2)NAT协议的更多相关文章

  1. 计算机网络参考模型与5G协议

    计算机网络参考模型与5G协议 目录 一.分层思想 1.1·2:分层思想概念 1.2.优点 二.OSI七层参考模型 三.TCP/IP协议族 3.1.TCP/IP协议族的组成 3.2.OSI模型与TCP/ ...

  2. 计算机网络之tcp/ip协议族

    TCP/IP协议族是一个四层协议系统: 1. 数据链路层   1.1 作用  (1) 实现网卡接口的网络驱动,以处理数据在以太网线等物理媒介上的传输  (2) 网络驱动程序隐藏了不同物理网络的不同电气 ...

  3. 计算机网络-3-2-点对点协议PPP

    点对点协议PPP 在通信链路较差的年代,在数据链路层使用可靠传输协议曾经是一种好方法,比较简单的点对点PPP协议则是目前使用最广泛的数据链路层协议. PPP协议的特点 互联网用户通过都要连接到某个IS ...

  4. 图文并茂详解 NAT 协议!

    什么是 NAT 协议 我们的计算机要想访问互联网上的信息,就需要一个地址,而且这个地址是大家(其他主机)所认可的,是公共的,这个地址也叫做公有 IP 地址. 与之相对的,除了公有 IP 地址外,还有私 ...

  5. 计算机网络 4.网络层与IP协议

    网络中的每一台主机和路由器都有一个网络层部分.而路由器中也没有网络层以上的层次.网络层是协议栈中最复杂的层次. 转发forwarding:当一个分组到达某路由器的输入链路时.该路由器将分组移动到适当的 ...

  6. 计算机网络-网络层(6)ICMP协议

    互联网控制报文协议(ICMP,Internet Control Message Protocol),被主机和路由器用来彼此沟通网络层的信息 ICMP报文是承载在IP分组中的,即lCMP报文是作为IP有 ...

  7. 计算机网络-网络层(3)DHCP协议

    主机获得IP地址,除了可以通过静态配置,还可以通过动态主机配置协议DHCP: Dynamic Host Configuration Protocol从服务器动态获取IP地址.子网掩码.默认网关地址.D ...

  8. 重读 谢希仁《计算机网络》3 - 网络层和IP协议

  9. 计算机网络——网络层

    一.虚拟线路与数据报线路 1. 在网络层提供有连接的计算机网络为虚电路网络: 如因特网:它需要VC(虚拟电路)号,用于建立虚拟电路的报文称为信令报文,相关的协议称为信令协议: 无连接的网络为数据报网络 ...

随机推荐

  1. PHP代码实现二分法查找

    需求:定义一个函数接收一个数组对象和一个要查找的目标元素,函数要返回该目标元素在数组中的索引值,如果目标元素不存在数组中,那么返回-1表示. //折半查找法(二分法): 使用前提必需是有序的数组. / ...

  2. Python time tzset()方法

    描述 Python time tzset() 根据环境变量TZ重新初始化时间相关设置.高佣联盟 www.cgewang.com 标准TZ环境变量格式: std offset [dst [offset ...

  3. PHP get_defined_vars() 函数

    get_defined_vars() 函数返回由所有已定义变量所组成的数组. 版本要求:PHP 4 >= 4.0.4, PHP 5, PHP 7高佣联盟 www.cgewang.com 语法 a ...

  4. JavaScript动画实例:圆点的衍生

    考虑如下的曲线方程: R=S*sqrt(n) α=n*θ X=R*SIN(α) Y=R*COS(α) 其中,S和θ可指定某一个定值.对n循环取0~999共1000个值,对于每个n,按照给定的坐标方程, ...

  5. Mybatis 的连接池技术

    我们在前面的 WEB 课程中也学习过类似的连接池技术,而在 Mybatis 中也有连接池技术,但是它采用的是自 己的连接池技术.在 Mybatis 的 SqlMapConfig.xml 配置文件中,通 ...

  6. 为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?

    作者:Mint6 来源:http://39sd.cn/53D5D Java阿里巴巴规范提示:方法[edit]需要在Transactional注解指定rollbackFor或者在方法中显示的rollba ...

  7. 025_go语言中的通道同步

    代码演示 package main import "fmt" import "time" func worker(done chan bool) { fmt.P ...

  8. 002_go语言的值类型

    代码演示: package main import "fmt" func main() { fmt.Println("go"+"lang") ...

  9. [leetcode/lintcode 题解] Google面试题:合法组合

    给一个单词s,和一个字符串集合str.这个单词每次去掉一个字母,直到剩下最后一个字母.求验证是否存在一种删除的顺序,这个顺序下所有的单词都在str中.例如单词是’abc’,字符串集合是{‘a’,’ab ...

  10. java 序列化流与反序列化流

    一 对象序列化流ObjectOutputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStr ...