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

图片来自即时通讯网
TCP/IP NAT知识梳理的更多相关文章
- TCP/IP基础知识
TCP/IP基础知识 网络 TCP/IP 引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP ...
- 第二章 TCP/IP 基础知识
第二章 TCP/IP 基础知识 TCP/IP transmission control protocol and ip internet protocol 是互联网众多通信协议中最为著名的. ...
- TCP/IP协议知识科普
简介 本文主要介绍了工作中常用的TCP/IP对应协议栈相关基础知识,科普文. 本博客所有文章:http://www.cnblogs.com/xuanku/p/index.html TCP/IP网络协议 ...
- TCP/IP协议(二)tcp/ip基础知识
今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...
- 二、tcp/ip基础知识
一.TCP/IP的标准化 1.TCP/IP的含义 一般来说,TCP/IP是利用IP进行通信时所必须用到的协议群的统称. 具体点,IP或ICMP.TCP或UDP.TELENT或FTP.以及HTTP等都属 ...
- TCP/IP网络知识
1.TCP/IP概念 TCP/IP不是单指一种传输协议,而是一组传输控制协议/互联网协议. 2.TCP/IP分层 (计算机网络中,实际应用的网络协议是TCP/IP协议族,TCP/IP的应用层大体上对应 ...
- TCP/IP 基础知识
我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 已提交此篇文章 要说我们接触计算机网络最多的协议,那 ...
- TCP/IP——基本知识
TCP / IP通常被认为是一个四层协议系统: 1) 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物 ...
- TCP/IP 小知识
子网掩码有数百种,这里只介绍最常用的两种子网掩码,它们分别是“255.255.255.0”和“255.255.0.0”. 1.子网掩码是“255.255.255.0”的网络:最后面一个数字可以在0~2 ...
随机推荐
- 关于Devexpress15.2中GridControl控件选择字段ColumnEdit下拉时间设置
效果:点击表格GridControl控件中的列,可以显示日期和时间.时间可以手动修改.(绑定日期格式的字段) 设置步骤:1.点击时间字段列表设置ColumnEdit-New-选择DateEdit出现r ...
- mysql忘记密码解决的办法
[很管用]忘记mysql root密码解决办法 1.编辑MySQL配置文件: 首先停止mysql服务, 然后开始编辑mysql配置文件:vi /etc/my.cnf在[mysqld]配置段添加如下一行 ...
- win10安装mongodb及配置 和 mongodb的基本使用(node环境)
mongodb安装 下载地址: https://www.mongodb.com/download-center 下载后,我们点击mongodb-win32-x86_64-2008plus-ssl-3. ...
- svnserve.conf: Option expected的问题解决方法
经常有新手配置基于svnserve的subversion服务器后,在客户端访问subversion版本库时出现这个错误:svnserve.conf:12: Option expected为什么会出现这 ...
- dojo实现省份地市级联---省份数据源
province.json: { "identifier": "id", "label": "name", " ...
- memcache 中的add set 和replace的区别
用过memcache的人都有一个疑惑,那就是memcache中为什么会有一个add方法.一个set方法.一个replace呢,这几个方法又有着什么样的区别呢,下边我们来分析下这几个方法的不同之处: m ...
- R语言︱常用统计方法包+机器学习包(名称、简介)
一.一些函数包大汇总 转载于:http://www.dataguru.cn/thread-116761-1-1.html 时间上有点过期,下面的资料供大家参考基本的R包已经实现了传统多元统计的很多功能 ...
- Android之PendingIntent的深入理解
PendingIntent字面意义:等待的,未决定的Intent.要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, i ...
- 【mongodb系统学习之八】mongodb shell常用操作
八.mongodb shell常用基础操作(每个语句后可以加分号,也可以不加,看情况定(有的工具中可以不加),最好是加): 1).进入shell操作界面:mongo,上边已有演示: 2).查看当前使 ...
- 利用MD5加密字符串
private static string MD5E(string temp) { MD5 md5 = new MD5CryptoServiceProvider(); byte[] source=Sy ...