IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP时无法实现通信的。必须还要又能够解析主机名称和MACdivide功能,以技术包在发送过程中异常情况处理的功能。

这篇主要介绍下DNS、ARP、ICMP等协议

DNS

TCP/IP网络中要求每一个互连的计算机都具有其唯一的IP地址,并基于这个IP地址进行通信。但是IP地址太长了,不好记。

人们希望主机有自己自己的名字,这个名字是唯一的,而且容易记住。于是,诞生了主机名“域名”的概念。域名是一种为了识别主机名称和机构名的具有分层的名称,比如在域名 neu.edu.cn中,neu是主机名,edu 和 cn 是不同层次下的机构名。

为了实现这样的功能,主机往往会利用一个叫做hosts的数据库文件

但是随着网络规模的不断扩大,接入计算机的个数不断增加,这种集中在本地电脑管理的方式就不可取了。

于是出现了DNS,当我们输入主机名(域名)时,DNS会先在互联网上先自动检索那个注册了主机名和IP地址的数据库,并迅速定位到对应的IP地址。

域名和 IP 地址都可以唯一对应一台主机,DNS 协议的作用就是将自身具有意义的域名转换成不容易记住的 IP 地址。

域名是分层的,每层都有自己的 DNS 服务器用于处理 DNS 解析的请求。这样的好处在于每层的服务器不用关注过多的信息,它只要知道自己这一层下的域名服务器信息即可。以解析域名: www.abc.com为例:

根服务器其实并不知道 www.abc.com 的 IP 地址,但是它知道 abc.com 域名服务器的地址,所以它把这条查询请求转发给 abc.com 域名服务器。DNS请求被逐层下发,直到找到对应的 IP 地址为止。

解析器和域名服务器将最新了解到的信息暂时保存在缓存中酱紫可以减少每次查询时的性能消耗。

DNS就如同互联网中的分布式数据库

ARP

只要确定了IP地址,就可以向这个目标地址发送IP数据报。然而在底层数据链路层,进行实际通信时,却需要知道每个IP地址所对应的MAC地址

ARP 协议(Address Resolution Protocol)用于通过目标 IP 地址,定位下一个接收数据包的网络设备的 MAC 地址。如果目标主机处在同一个数据链路上,那么可以直接得到目标主机的 MAC 地址,否则会得到下一条路由器的 MAC 地址。

ARP 协议的工作原理可以分为两部分:ARP 请求和 ARP 响应。 首先,源主机会通过广播发送一个 ARP 请求包:“我要与 IP 地址为 xxx 的主机通话,谁知道它的 MAC地址?”。

数据链路上的所有主机都会收到这条消息并检查自己的 IP 地址,如果与 ARP 请求包中的 IP 地址一致,主机就会发送 ARP 响应包:“我就是 IP 地址为 xxx 的主机,我的 MAC 地址是:xxxx”。

下图表示了 ARP 协议的工作机制:



在实际的使用过程中,每次往目标主机发送数据都要使用 ARP 是很低效的,通常的做法是把获取到的 MAC 地址缓存一段时间。一般来说,一旦源主机向目标地址发送一个数据包,接下来继续发送多次的概率非常大,因此这种缓存非常容易命中。

当下一次发送 ARP 请求或超过一定时间后,缓存都会失效,这保证了即使 MAC 地址与 IP 地址的对应关系发生了变化,数据包依然能够被正确的发往目标地址。

IP地址和MAC地址缺一不可?

MAC 和 IP 地址虽然看上去功能类似(都是用于唯一区分主机),但是两者缺一不可。如果只有 IP 地址,虽然可以跳过 ARP,直接在数据链路上发一个广播,但是这仅适用于通信双方处于同一个数据链路下的情况。如果双方处于不同的数据链路,数据报无法穿透中间的路由器。

仅凭MAC地址,人们无法知道这台机器所处的位置。如果全世界只用 MAC 地址,那么网桥就得向全世界发包,那么请参考交换机的自学过程,可以想象这个过程会带来庞大的,不必要的流量,而且网桥要维护一张巨大的表格来维护所有学到的MAC地址,当这些信超过网桥极限,就没法工作了,也就无法通信了。

正因为 MAC 和 IP 地址缺一不可,所以才产生了 ARP 这样的协议将两者关联起来。

RARP

RARP(Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址定位IP地址的一种协议。

代理ARP

通常ARP包会被路由器隔离,但是采用代理ARP的路由器可以将ARP请求转发给邻近的网段。由此两个以上网段的节点之间可以像在同一个网段中一样进行通信。

一般情况下有路由器连接多个网络时,会在每个网段定义各自的子网,从而进行路由控制,但是对于那些不支持设定子网掩码的老设备,不适用代理ARP,有时就无法更好的使用网络。

ICMP

架构IP网络时需要特别注意两点:确认网络是否正常工作,以及遇到异常时进行问题诊断。

ICMP正是提供这类功能的一种协议。

主要功能包括:确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因,改善网络设置等。

ICMP的消息大致可以分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。

主要消息类型

DHCP(Dynamic Host Configuration Protocol)

逐一为每一台主机设置IP地址会非常繁琐的事情。特别是移动设备,每到一个新地方,就要重新设置IP地址

于是为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP协议。

有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。

DHCP工作机制

使用DHCP前,首先要假设一台DHCP服务器。然后将DHCP所要分配的IP地址设置到服务器上。此外,还需要将相应的子网掩码、路由控制信息以及DNS服务器的地址等设置到服务器上。

为了检查所要分配的IP地址以及已经分配了的IP地址是否可用,DHCP服务器或DHCP客户端必须具备以下功能:

  • DHCP服务器:

    在分配IP底之前发送ICMP回送请求包,确认没有返回应答
  • DHCP客户端:

    针对从DHCP哪里获得的IP地址发送ARP请求包,确认没有返回应答

在大规模组织机构的网络环境中,往往需要将DHCP统一管理

NAT

NAT (Network Address Translator) 是一种用于将局域网中的私有地址转换成全局 IP 地址的技术。

在连接上无线路由器的时候,如果检查一下设备的 IP 地址,也许你会发现是类似于 192.168.1.1 这样的局域网 IP 地址。那不同网段中,IP 地址都是 192.168.1.1 的主机改如何通信呢?

局域网中 IP 地址为 10.0.0.10 的主机向全局 IP 地址 163.221.120.9 发送数据。NAT 路由器将数据包的源地址修改成自己的全局 IP 地址:202.244.174.37。同理,接收数据时,路由器把目标地址 202.244.174.37 翻译成内网地址:10.0.0.10

下图描绘了 NAT 的工作原理:

路由器只有一个对外的全局 IP 地址,如果有多个内网主机都向外部通讯怎么办呢?这时就要使用 NAPT 技术,它和 NAT 从原理上类似,但它可以转换 TCP 和 UDP 端口号。

使用 NAPT 技术时,不同的内网 IP 被转换成同一个公共 IP 地址,也就是路由器对外显示的全局 IP 地址,但是被附加不同的端口号以示区分:

不管是 NAT 还是 NAPT,都需要路由器路由器内部维护一张自动生成的地址转换表。以 TCP 为例,建立 TCP 连接首次握手的 SYN 包发出时会生成这个表,关闭连接时会发出 FIN 包,收到这个包的应答时转换表被删除。

IP隧道

在下图所示的网络环境中,网络A、B使用IPv6,如果处于中间位置的网络C支持使用IPv4的话,A与B之间就无法直接进行通信。为了让他们之间正常通信,这是必须得采用IP隧道的功能。



IP隧道中可以将那些从网络A发过来的IPv6的包统和为一个数据,再为之追加一个IPv4的首部以后转发给网络C。

一般情况下,紧接着IP首部的是TCP或UDP的首部。然而,现在的应用中,"IP首部的后面还是IP首部"或者"IP首部的后面是IPv6的首部"等情况与日俱增。这种在网络层的首部后面继续追加网络层首部 的通信方法就叫做"IP隧道"。

TCP/IP笔记(五)IP协议相关技术的更多相关文章

  1. TCP-IP-part7-IP协议相关技术(一)

    仅凭IP是无法完成通信的,需要一些IP的辅助技术.这些技术的包格式可能不一样,但它们都是基于IP地址进行的,都是通过匹配路由表来进行的,只是功能不一样.例如DHCP分配IP地址,它只管通知这条信息,具 ...

  2. TCP/IP 笔记 - 传输控制协议

    与UDP不同,TCP提供面向连接的.可靠的.基于字节流的传输层协议,且提供差错纠正. TCP传输的概念 对与分组丢失和比特差错的处理方法,最直接的方法是重发分组,直到它被正确接收. 这需要一种方法来判 ...

  3. TCP/IP笔记(四)IP协议

    前言 IP相当于OSI参考模型的第3层--网络层:主要作用是"实现终端节点之间的通信"又称"点对点通信". IP作为整个TCP/IP中至关重要的协议,主要负责将 ...

  4. Windows网络编程笔记4 -- Winsock 协议相关知识

     Win32平台上的Winsock编程,Winsock是一个与协议无关的接口.以下协议是我们需要了解的: 网络协议的特征包括: 1.  面向消息 2.  面向连接和无线接 3.  可靠性和次序性 4. ...

  5. TCP/IP笔记(八)应用层协议

    TCP/IP的应用层涵盖了OSI参考模型中第5.第6.第7层的所有功能,不仅包含了管理通信连接的会话层功能.转换数据格式的标识层功能,还包括与对端主机交互的应用层功能在内的所有功能. 利用网络的应用程 ...

  6. 图解TCP/IP第五版 -- 文件夹

    非常多年前买过<TCP/IP具体解释>3卷,当时可能根本没看,也可能是看了又忘了,没有留下什么印象,当时的书也当做废品卖了. 卖书时的感觉貌似是.买了太多的书,基本都没看,搬家搬来搬去的麻 ...

  7. TCP/IP 笔记 - ICMPv4和ICMPv6 : Internet控制报文协议

    ICMP是一种面向无连接的协议,负责传递可能需要注意的差错和控制报文,差错指示通信网络是否存在错误(如目的主机无法到达.IP路由器无法正常传输数据包等.注意,路由器缓冲区溢出导致的丢包不包括在ICMP ...

  8. Ripple 20:Treck TCP/IP协议漏洞技术分析

    本文由“合天智汇”公众号首发,作者:b1ngo Ripple 20:Treck TCP/IP协议漏洞技术分析 Ripple20是一系列影响数亿台设备的0day(19个),是JSOF研究实验室在Trec ...

  9. 图解TCP/IP笔记(1)——TCP/IP协议群

    转载请注明:https://www.cnblogs.com/igoslly/p/9167916.html TCP/IP制定  制定:IETF 记录:RFC - Request for comment ...

随机推荐

  1. angular drag and drop (ngDraggable) 笔记

    这是原文 https://github.com/fatlinesofcode/ngDraggable 这是另一个dnd,这比较灵活,可以监听事件.我只用简单的排序功能,其他没去了解太多.有机会遇到功能 ...

  2. php审核操作

    注册页面zhuce.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  3. Laravel 开发笔记

    Laravel 4.2  鉴权使用加盐密码 刚开始接触laravel,发现laravel默认的鉴权模块密码并未加盐处理(密码由password_hash方法创建).所以自己琢磨着对密码加盐.像下面这样 ...

  4. vue + socket.io实现一个简易聊天室

    vue + vuex + elementUi + socket.io实现一个简易的在线聊天室,提高自己在对vue系列在项目中应用的深度.因为学会一个库或者框架容易,但要结合项目使用一个库或框架就不是那 ...

  5. [转载]解决win10 VC++6.0 应用程序无法正常运行 0xc0000142

    本文转载自http://blog.csdn.net/w_9449/article/details/52864135 转载请申明哦,其实我发现自从我在贴吧发了帖子后,就冒出了不少帖子.经验.当然方法和我 ...

  6. ACM Fibonacci数 计算

    Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递 ...

  7. File类和时间类的两道综合练习

    练习1: 获取指定目录下(包含子目录)所有的某一种类型的文件 分析: 1.指定路径并获取其下的文件对象 2.要判断给定的目录是否为空 3.要判断给定路径下获取的目录是否为空 4.判断是否是某种文件 5 ...

  8. 1677: [Usaco2005 Jan]Sumsets 求和

    1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 626  Solved: 348[Submi ...

  9. Dell M102ZD-128 —— 拿XP拯救你

    查过新浪博客上的记录: http://blog.sina.com.cn/s/articlelist_1259160330_7_1.html 2011年6月买了这台 Dell Inspiron M102 ...

  10. iOS网络编程笔记——Socket编程

    一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...