一. 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. JavaScript将小写金额转换成大写

    //num为小写金额,单位元 changeMoney(num) { if(isNaN(num))return ""; var strPrefix=""; if( ...

  2. 如何高效的编写Verilog HDL——进阶版

    博主之前写过一篇文章来谈论如何高效的编写Verlog HDL——菜鸟版,在其中主要强调了使用Notepad++来编写Verilog HDL语言的便捷性,为什么说是菜鸟版呢,因为对于新手来说,在还没有熟 ...

  3. UART知识总结

    一.定义 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART. 二.时序 上图是uart协议传输一个"A" ...

  4. eclipse导入/编译hadoop源代码

    1. 确保安装好JDK和eclipse 详细教程见: http://blog.csdn.net/kangdakangdaa/article/details/11364985 2. 安装 Subclip ...

  5. MS SQL 事务日志管理小结

    本文是对SQL Server事务日志的总结,文章有一些内容和知识来源于官方文档或一些技术博客,本文对引用部分的出处都有标注.   事务日志介绍 在SQL Server中,事务日志是数据库的重要组件,如 ...

  6. dm642的中断

    void fifoint_isr();            extern far void vectors(); void int_init() {  IRQ_resetAll();  IRQ_se ...

  7. zTree实现地市县三级级联Service接口测试

    zTree实现地市县三级级联Service接口测试 ProvinceServiceTest.java: /** * @Title:ProvinceServiceTest.java * @Package ...

  8. Flex读取txt文件中的内容(三)

    Flex读取txt文件中的内容 1.设计源码 LoadTxt.mxml: <?xml version="1.0" encoding="utf-8"?> ...

  9. 安装STS报错(二)

    安装STS报错 1.启动时报错 2.报错原因 3.处理办法

  10. MPEG2_TS流基本概念和数据结构

    时对应network_PID,program_number等于其它值时对应program_map_PID. (3)PMT   PMT数据结构如下: TS_program_map_section(){ ...