一. 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个包,如下图所示

图片来自即时通讯网

TCP/IP NAT知识梳理的更多相关文章

  1. TCP/IP基础知识

    TCP/IP基础知识 网络 TCP/IP 引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP ...

  2. 第二章 TCP/IP 基础知识

    第二章 TCP/IP 基础知识   TCP/IP  transmission control protocol and ip internet protocol 是互联网众多通信协议中最为著名的.   ...

  3. TCP/IP协议知识科普

    简介 本文主要介绍了工作中常用的TCP/IP对应协议栈相关基础知识,科普文. 本博客所有文章:http://www.cnblogs.com/xuanku/p/index.html TCP/IP网络协议 ...

  4. TCP/IP协议(二)tcp/ip基础知识

    今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...

  5. 二、tcp/ip基础知识

    一.TCP/IP的标准化 1.TCP/IP的含义 一般来说,TCP/IP是利用IP进行通信时所必须用到的协议群的统称. 具体点,IP或ICMP.TCP或UDP.TELENT或FTP.以及HTTP等都属 ...

  6. TCP/IP网络知识

    1.TCP/IP概念 TCP/IP不是单指一种传输协议,而是一组传输控制协议/互联网协议. 2.TCP/IP分层 (计算机网络中,实际应用的网络协议是TCP/IP协议族,TCP/IP的应用层大体上对应 ...

  7. TCP/IP 基础知识

    我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 已提交此篇文章 要说我们接触计算机网络最多的协议,那 ...

  8. TCP/IP——基本知识

    TCP / IP通常被认为是一个四层协议系统: 1) 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物 ...

  9. TCP/IP 小知识

    子网掩码有数百种,这里只介绍最常用的两种子网掩码,它们分别是“255.255.255.0”和“255.255.0.0”. 1.子网掩码是“255.255.255.0”的网络:最后面一个数字可以在0~2 ...

随机推荐

  1. 两种简单的方法Docker构建LANMP

    在初步入门学习Docker的过程中一步步了解了Docker容器在团队开发中所起到的作用,一边学习一边操作基本命令,当然到现在还处于一个擦边的入门阶段. 尝试一下用Docker构建一个集成开发环境. S ...

  2. uva10603 倒水问题

    状态搜索.类似八数码问题 AC代码 #include<cstdio> #include<queue> #include<cstring> #include<a ...

  3. 在测试crontab执行脚本的时候,修改了linux的系统时间,crontab不执行了。

    今天在写服务器的perl脚本的时候,在完成一版脚本打算通过crontab来测试一下呢,因为直接执行脚本文件是没有问题的,但是当配置到crontab定期执行时就会出现问题,到了指定的时间了,但是脚本文件 ...

  4. 关联规则—频繁项集Apriori算法

    频繁模式和对应的关联或相关规则在一定程度上刻画了属性条件与类标号之间的有趣联系,因此将关联规则挖掘用于分类也会产生比较好的效果.关联规则就是在给定训练项集上频繁出现的项集与项集之间的一种紧密的联系.其 ...

  5. kolla管理openstack容器

    本文以nova-api容器为例,说明kolla如何将nova-api配置文件传入容器,容器如何启动nova-api服务并读取配置文件 注:第一部分比较无趣,二三部分 会有意思一些 1. nova-ap ...

  6. ios学习笔记(一)Windows7上使用VMWare搭建iPhone开发环境

    我们都知道开发iPhone等ios平台的移动应用时需要使用Mac本,但是Mac本都比较昂贵,所以我们可以采用Windows7上利用VMWare安装Mac操作系统的方法来模拟ios开发环境,达到降低成本 ...

  7. JavaScript获取当前日期

    JavaScript获取当前日期 具体实现如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  8. Indent Guides for Visual Studio 代码格式化收缩插件

    代码格式化收缩插件 下载地址:http://indentguide.codeplex.com/releases/view/110312 更多关注付义方技术博客:http://blog.csdn.net ...

  9. app_offline.htm的作用

    如果你要COPY站点,进行站点维护,部署,和进行大量修改,有可能要停掉你的WEB应用程序了,而以一个友好的方式提示给用户,比如什么"本网站正在更新"等等的信息可以建立一个叫app_ ...

  10. freemarker写select组件报错总结(三)

    1.错误描述 <html> <head> <meta http-equiv="content-type" content="text/htm ...