以前只知道输入一个网站,然后看着返回琳琅满目的内容,其实中间经历的过程和步骤太多了。为了满足好奇心以及学习需要,特查阅了资料将其记录下来以备后续自己复习。
从我在地址栏输入www.zhihu.com 按下 Enter键开始 到浏览器显示出知乎首页结束 这个过程中间都发生了什么?
首先定义如下
第一步:
A: 应用层即浏览器封装数据:http头部 | DATA ,DATA中包括"http://www.zhihu.com",交给传输层。
B:传输层对数据判断是http,即使用TCP协议对数据进行封装,目标端口:80。 数据:TCP源端口(随机)和目标端口(80) | http头部 | DATA,交给网络层。
C:网络层对数据进行封装需要源IP:10.1.1.1 而目标IP(知乎服务器)未知,网络层封装失败,暂时中断。此时就需向DNS请求目标IP。
第二步:向DNS请求目标IP
A:传输层使用UDP协议对数据封装。数据:源端口(随机)和目标端口(53) | DNS | DATA。封装完毕,交给网络层。
B:网络层:有源IP:10.1.1.1 目标IP(DNS):10.1.1.2可以封装。数据:源IP和目标IP | UDP源端口和目标端口 | DNS | DATA 封装完毕,交给数据链路层。
C:数据链路层对数据封装需要源MAC地址:A,目标MAC地址(DNS):未知。数据封装失败,暂时中断。此时会发送ARP请求来获取DNS的MAC地址。
第三步:发送ARP请求。
源MAC地址:A,目标MAC地址:FFFFFF | ARP发送者IP:10.1.1.1目标IP:10.1.1.2。DNS收到ARP请求,发现是自己的IP,便把自己的MAC地址返回给你的PC(DNS从ARP请求中获取PC的IP和MAC地址)。
即将结束:PC有了DNS的MAC地址,那么第二步就可以完成,数据成功发送给DNS,DNS把“www.zhihu.com”对应的IP返回给PC,那么第一步封装可以完毕,数据成功发出,再过TCP三次握手与知乎服务器建立连接,知乎把自己的主页返回给你的PC机,你的屏幕上就有了华丽丽的知乎主页。
简单地说:ip地址是服务商给你的,mac地址是你的网卡物理地址。
一、IP地址
对于IP地址,相信大家都很熟悉,即指使用TCP/IP协议指定给主机的32位地址。IP地址由用点分隔开的4个8八位组构成,如192.168.0.1就是一个IP地址,这种写法叫点分十进制格式。IP地址由网络地址和主机地址两部分组成,分配给这两部分的位数随地址类(A类、B类、C类等)的不同而不同。网络地址用于路由选择,而主机地址用于在网络或子网内部寻找一个单独的主机。一个IP地址使得将来自源地址的数据通过路由而传送到目的地址变为可能。
二、MAC地址
对于MAC地址,由于我们不直接和它接触,所以大家不一定很熟悉。在OSI(Open System Interconnection,开放系统互连)7层网络协议(物理层,数据链路层,网络层,传输层,会话层,表示层,应用层)参考模型中,第二层为数据链路层(Data Link)。它包含两个子层,上一层是逻辑链路控制(LLC:Logical Link Control),下一层即是我们前面所提到的MAC(Media Access Control)层,即介质访问控制层。所谓介质(Media),是指传输信号所通过的多种物理环境。常用网络介质包括电缆(如:双绞线,同轴电缆,光纤),还有微波、激光、红外线等,有时也称介质为物理介质。MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。这个地址与网络无关,也即无论将带有这个地址的硬件(如网卡、集线器、路由器等)接入到网络的何处,它都有相同的MAC地址,MAC地址一般不可改变,不能由用户自己设定。
三、MAC地址的长度、表示方法、分配方法及其唯一性
MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(Istitute of Electrical and Electronics Engineers,电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。每个网络制造商必须确保它所制造的每个以太网设备都具有相同的前三字节以及不同的后三个字节。这样就可保证世界上每个以太网设备都具有唯一的MAC地址。
四、IP地址与MAC地址在互连网中的作用
既然每个以太网设备在出厂时都有一个唯一的MAC地址了,那为什么还需要为每台主机再分配一个IP地址呢?或者说为什么每台主机都分配唯一的IP地址了,为什么还要在网络设备(如网卡,集线器,路由器等)生产时内嵌一个唯一的MAC地址呢?主要原因有以下几点:(1)IP地址的分配是根据网络的拓朴结构,而不是根据谁制造了网络设置。若将高效的路由选择方案建立在设备制造商的基础上而不是网络所处的拓朴位置基础上,这种方案是不可行的。(2)当存在一个附加层的地址寻址时,设备更易于移动和维修。例如,如果一个以太网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。(3)无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP(Address Resolution Protocol:地址解析协议)负责将IP地址映射到MAC地址上来完成的。下面我们来通过一个例子看看IP地址和MAC地址是怎样结合来传送数据包的。
假设网络上要将一个数据包(名为PAC)由北京的一台主机(名称为A,IP地址为IP_A,MAC地址为MAC_A)发送到华盛顿的一台主机(名称为B,IP地址为IP_B,MAC地址为MAC_B)。这两台主机之间不可能是直接连接起来的,因而数据包在传递时必然要经过许多中间节点(如路由器,服务器等等),我们假定在传输过程中要经过C1、C2、C3(其MAC地址分别为M1,M2,M3)三个节点。A在将PAC发出之前,先发送一个ARP请求,找到其要到达IP_B所必须经历的第一个中间节点C1的MAC地址M1,然后在其数据包中封装(Encapsulation)这些地址:IP_A、IP_B,MAC_A和M1。当PAC传到C1后,再由ARP根据其目的IP地址IP_B,找到其要经历的第二个中间节点C2的MAC地址M2,然后再将带有M2的数据包传送到C2。如此类推,直到最后找到带有IP地址为IP_B的B主机的地址MAC_B,最终传送给主机B。在传输过程中,IP_A、IP_B和MAC_A不变,而中间节点的MAC地址通过ARP在不断改变(M1,M2,M3),直至目的地址MAC_B。
综合上面所述,我们可以归纳出IP地址和MAC地址相同点是它们都唯一,不同的特点主要有:
1. 对于网络上的某一设备,如一台计算机或一台路由器,其IP地址可变(但必须唯一),而MAC地址不可变。我们可以根据需要给一台主机指定任意的IP地址,如我们可以给局域网上的某台计算机分配IP地址为192.168.0.112 ,也可以将它改成192.168.0.200。而任一网络设备(如网卡,路由器)一旦生产出来以后,其MAC地址永远唯一且不能由用户改变。
2. 长度不同。IP地址为32位,MAC地址为48位。
3. 分配依据不同。IP地址的分配是基于网络拓朴,MAC地址的分配是基于制造商。
4. 寻址协议层不同。IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层。 数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过MAC地址),而网络层协议使数据可以从一个网络传递到另一个网络上(ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络)。
当主机或路由器想要知道网络上另一台主机或者路由器的物理地址的时候,它就会发送ARP查询分组。这个分组包括发送端的物理地址和IP地址,以及接收端的IP地址。因为发送端不知道接收端的物理地址,所以查询就在网络上广播。
ARP查询分组将会被网络上的每一个主机或者路由器接收和处理。但是,只有目的接收者才会识别ARP查询分组的IP地址,从而发送ARP响应分组。响应分组包括接受者的IP地址和物理地址。这个响应分组是用单播方式直接发送给查询者。
字段简单解释:
硬件类型:16位字段,用来定义运行ARP的网络的类型,如以太网是类型1;
协议类型:16位字段,用来定义协议的类型,如IPv4的值为0800;
硬件长度:8位字段,用来定义物理地址长度,以字节为单位,如以太网的值为6;
协议长度:8位字段,用来定义逻辑地址长度,以字节为单位,如IPv4的值为4;
操作:16位字段,用来定义分组的类型,如ARP请求为1,ARP回答为2;
发送者硬件地址:可变长字段,对以太网是6字节;
发送者协议地址:可变长字段,对IP是4字节;
目标硬件地址:可变长字段,对以太网是6字节,对于ARP请求报文,该字段全为0;
目标协议地址:可变长字段,对IP是4字节。
二、ARP协议的工作原理
在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,如附表所示。
附表
ip地址mac地址
192.168.1.100-aa-00-62-c6-09
192.168.1.200-aa-00-62-c5-03
192.168.1.303-aa-01-75-c3-06
…… ……
我们以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.1的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6-09”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。
三、如何查看ARP缓存表
ARP缓存表是可以查看的,也可以添加和修改。在命令提示符下,输入“arp -a”就可以查看ARP缓存表中的内容了。
用“arp -d”命令可以删除ARP表中某一行的内容;用“arp -s”可以手动在ARP表中指定IP地址与MAC地址的对应。
四、用 wireshark 软件抓包验证报文格式:
1、请求报文
2、响应报文
windows系统下查看ARP高速缓存表:
如何查询对方的IP地址和MAC地址?
nbtstat及netstat命令---查对方IP mac地址 根据IP查对方计算机名
知道ip,想知道是谁的主机(主机的计算机名是实名制)。
nbtstat -A 192.168.1.20 注意:参数A为大写,是根据ip查计算机名。小写a,是根据计算机名查ip
nbtstat -a 王五
知道ip地址,想知道其mac地址
arp -a 192.168.1.20
nbtstat
NBTSTAT命令:用于查看当前基于NETBIOS的TCP/IP连接状态,通过该工 具你可以获得远程或本地机器的组名和机器名。虽然用户使用ipconfig/winipcfg工具可以准确地得到主机的网卡地址,但对于一个已建成的比较 大型的局域网,要去每台机器上进行这样的操作就显得过于费事了。网管人员通过在自己上网的机器上使用DOS命令nbtstat,可以获取另一台上网主机的 网卡地址。我们还是先来看看它的语法格式吧:
NBTSTAT [ [-a RemoteName] [-A IP address] [-c] [-n] [-r] [-R] [-RR] [-s] [-S] [interval] ]
参数说明:
-a Remotename—说明使用远程计算机的名称列出其名称表,此参数可以通过远程计算机的NetBios名来查看他的当前状态。
-A IP address—说明使用远程计算机的 IP 地址并列出名称表,这个和-a不同的是就是这个只能使用IP,其实-a就包括了-A的功能了。
-c—列出远程计算机的NetBIOS 名称的缓存和每个名称的 IP 地址 这个参数就是用来列出在你的NetBIOS里缓存的你连接过的计算机的IP。
-n—列出本地机的 NetBIOS 名称,此参数与上面所介绍的一个工具软件“netstat”中加“ -a”参数功能类似,只是这个是检查本地的,如果把netstat -a后面的IP换为自己的就和nbtstat -n的效果是一样的了。
-r—列出 Windows 网络名称解析的名称解析统计。在配置使用 WINS 的 Windows 2000 计算机上,此选项返回要通过广播或 WINS 来解析和注册的名称数。
-R—清除 NetBIOS 名称缓存中的所有名称后,重新装入 Lmhosts 文件,这个参数就是清除nbtstat -c所能看见的缓存里的IP。
-S—在客户端和服务器会话表中只显示远程计算机的IP地址。
-s—显示客户端和服务器会话,并将远程计算机 IP 地址转换成NETBIOS名称。此参数和-S差不多,只是这个会把对方的NetBIOS名给解析出来。
-RR—释放在 WINS 服务器上注册的 NetBIOS 名称,然后刷新它们的注册。
interval—每隔interval 秒重新显示所选的统计,直到按“CTRL+C”键停止重新显示统计。如果省略该参数,nbtstat 将打印一次当前的配置信息。此参数和netstat的一样,nbtstat中的“interval”参数是配合-s和-S一起使用的。
netstat
netstat –s本选项能够按照各个协议分别显示其统计数据。如果我们的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么我们就可以 用本选项来查看一下所显示的信息。我们需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。
netstat –e本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。
netstat –r本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。
netstat –a本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。
netstat –n显示所有已建立的有效连接。
Netstat 查看对方IP地址
经常上网的人一般都使用ICQ的,不知道我们有没有被一些讨厌的人骚扰,想投诉却又不知 从和下手?其实,我们只要知道对方的IP,就可以向他所属的ISP投诉了。但怎样才能通过ICQ知道对方的IP呢?如果对方在设置ICQ时选择了不显示 IP地址,那我们是无法在信息栏中看到的。其实,我们只需要通过Netstat就可以很方便的做到这一点:当他通过ICQ或其他的工具与我们相连时(例如 我们给他发一条ICQ信息或他给我们发一条信息),我们立刻在DOS 命令提示符下输入netstat -n或netstat -a就可以看到对方上网时所用的IP或ISP域名了,甚至连所用Port都完全暴露了。
references:
[1] https://www.zhihu.com/question/28930212
[2] http://iynu17.blog.51cto.com/10734157/1703054
[3] http://blog.csdn.net/liuruiqun/article/details/46391431
[4]