zoukankan      html  css  js  c++  java
  • TCP/IP NAT知识梳理

        一. IP地址的获取

        首先,互联网上的每台主机都有一个唯一的IP地址标识,计算机在通信时需要向网络中的DHCP(动态主机配置协议)服务器申请一个IP地址,但开始主机并不知道哪台机器是DHCP服务器(不知道对方的MAC地址),所以这个请求(DHCP Discovery)必须广播出去,使网络中的每台支持TCP/IP协议栈的主机都能接收到,所以计算机需要发出类似这样一条报文:

                        源地址为0.0.0.0

                        目标地址为255.255.255.255

                        报文内容:I need an IP Address!!

        接下来,这条消息会通过UDP发送出去,接下来DHCP服务器会将空闲的IP地址分配一个返回给计算机,局域网内可能存在多个DHCP服务器,空闲的IP地址可能会返回多个,我们的主机选择其中一个,然后将选择的那条广播出去,DHCP收到后会将网关地址,DNS地址返回计算机,保存在内存中。

        然后,本机通过ARP请求广播网关地址,以获取网关MAC地址(局域网内通过MAC地址通信),获取后存储在ARP缓存中。接下来就可以发起DNS查询了。

       二. NAT(网络地址转换)技术

         那么,为什么每个互联网中的计算机需要经过如此复杂的步骤连接互联网呢?每台主机直接连到互联网上不好么,要网关做什么?这就涉及到了网络地址转换技术,它使有限的IPv4地址空间进一步增加。NAT直观上理解很简单,如下图所示,它在发送数据时,将数据包中的源IP由内部网络IP地址替换为出口的公网IP。比如公司中可能有很多电脑,但对外的出口IP可能只有一个(这里其实比较复杂,具体可以查看这篇文章http://www.52im.net/thread-50-1-1.html)。NAT这个过程发送方和接收方(网站)均无感知(但事实上上层协议如TCP,HTTP等通常还是会携带客户端本地IP地址)。

                                          图片来自百度百科

       为了做到这一点,NAT网关,需要维护一张关联表,把会话的信息保存下来,但由于NAT网关能够存储的关联信息有限,所以NAT网关需要回收资源,通常通过跟踪报文信息或超时机制

     三.TCP通信协议

            建立一个TCP连接总共需要客户端和服务器端一共发送3个包,如下图所示

        

                                            图片来自即时通讯网

         

  • 相关阅读:
    北京
    构建JDBC的基本代码
    JavaScript:制作简易计算器要注意的事项!
    JavaScript学习笔记-创建对象之设计模式
    .NET开源工作流RoadFlow-流程设计-流程步骤设置-事件设置
    .NET开源工作流RoadFlow-流程设计-流程步骤设置-数据设置
    .NET开源工作流RoadFlow-流程设计-流程步骤设置-按钮设置
    .NET开源工作流RoadFlow-流程设计-流程步骤设置-策略设置
    .NET开源工作流RoadFlow-流程设计-流程步骤设置-基本设置
    .NET开源工作流RoadFlow-流程设计-流程属性设置
  • 原文地址:https://www.cnblogs.com/showing/p/6869711.html
Copyright © 2011-2022 走看看