网络通信协议(7层协议)

mac地址、IP地址和端口号

看了很多遍,才整理出来我对整个通信过程的理解,大致如下,后期会不断学习补充更正:

在利用TCP/IP协议族进行通信的时候,有三个比较关键的确认身份的信息:mac地址、IP地址和端口号。

  • mac地址是在数据链路层包裹在以太网头部中的,它主要用来识别同一个链路中的不同计算机。Mac地址即网卡号,每块网卡出厂的时候,都有一个全世界独一无二的 MAC 地址,长度是 48 个二进制位,通常用 12 个十六进制数表示。
  • IP地址是在网络层的IP头部里,用于识别网络中互联的主机和路由器,其实主要是确认子网,通过子网掩码确认某个IP地址所在的子网,而后再在子网内部确认mac地址就能找到准确的用户了
  • 端口号是在传输层包含在TCP/UDP头部中的,用于识别应用程序一台主机上能运行多个程序,那么接收到的消息到底是哪个程序的呢?就需要端口号来确认。

端口号有两种:

    • 固定的端口号,是形如http,telnet,ftp等广为使用的应用协议所使用的端口号是固定的
    • 动态分配的端口号,这个时候服务端要确定监听端口号,接受服务的客户端没必要确定端口号

端口号由传输层协议决定,因此不容传输协议可以使用相同的端口号,所以TCP和UDP可以使用同一个端口号

 

 

例如,主机A向主机B利用发送了一条消息,则在TCP head里包含了发送消息的应用的端口号以及接收方应用的端口号,传递给它的下一层,网络层会将TCP数据包封装起来再加自己的头部,IP头部里包含本地IP以及接收方IP等信息传递给数据链路层。数据链路层会再给加一个以太网头部,这里包含双方的mac地址。那么对方IP和端口号都好得到,可是mac地址如何获得呢?这个时候需要ARP协议,这个暂且不说,直说在已知mac地址和IP地址端口号情况下如何发送消息。

首先以太网数据包会在其子网内部广播,如果接收方在其子网内,则在比对mac地址后直接接收数据。如果不在同一个子网内,以太网协议就不能实现数据传输了,而且因为以太网协议采取广播的方式发送消息,就算没有局限在子网内,如果给非常庞大的主机群广播消息是非常可怕的。这个时候就需要IP地址了,IP地址主要是用来区分哪些mac地址在同一个子网。找到目的主机所在子网之后再根据mac地址确认主机,IP层从IP首部确定数据包所用的协议之后将数据包交给对应的协议,再由协议来确认程序的端口号,从而实现了消息的传递

转载于:https://www.cnblogs.com/Chilly2015/p/5720670.html

一、ARP在同个网段下的工作原理

        首先,每台主机都会在自己的ARP缓冲区中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机IP地址对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、MAC地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

例如: 

A的地址为:IP:192.168.10.1 MAC: AA-AA-AA-AA-AA-AA 
B的地址为:IP:192.168.10.2 MAC: BB-BB-BB-BB-BB-BB 

根据上面的所讲的原理,我们简单说明这个过程:A要和B通讯,A就需要知道B的以太网地址,于是A发送一个ARP请求广播(谁是192.168.10.2 ,请告诉192.168.10.1),当B收到该广播,就检查自己,结果发现和自己的一致,然后就向A发送一个ARP单播应答(192.168.10.2 在BB-BB-BB-BB-BB-BB)。

二、局域网中跨网段主机间通讯

        不同网段的主机通信时,主机会封装网关(通常是路由器)的mac地址,然后主机将数据发送给路由器,后续路由进行路由转发,通过arp解析目标地址的mac地址,然后将数据包送达目的地。具体过程分析如下:





如上图,主机A、B通过路由器连接,属于两个不同的网段子网掩码24(255.255.255.0)

1、主机A有数据发往主机B,数据封装IP之后发现没有主机B的mac地址;然后查询ARP,ARP回应:“我在192.168.3.0/24网段,目标地址在192.168.4.0/24,不属于同一网段,需要使用默认网关”;ARP发现默认网关是192.168.3.2,但是没有网关mac地址,需要先进行查询;


2、主机A将数据包先放到缓存中,然后发送ARP查询报文:封装自己的mac地址为源mac,目标mac地址写全F的广播地址,请求网关192.168.3.2的mac地址。然后以广播方式发送出去;


3、路由器收到广播数据包,首先将原192.168.3.1添加到自己的mac地址表中,对应mac地址为0800.0222.2222。路由发现是请求自己的mac地址,然后路由回复一个ARP应答:封装自己的IP地址为源IP自己的mac地址为源mac,主机A的IP为目的IP主机A的mac为目的mac,发送一个单播应答“我是192.168.3.2.我的mac地址为0800.0333.2222”;


4、主机收到应答后,将网关mac地址对应192.168.4.2(跨网关通信,其他网段IP地址的mac地址均为网关mac),然后将缓存中的数据包,封装网关mac地址进行发送;


5、路由收到数据包,检查目的IP地址,发现不是给自己的,决定要进行路由,然后查询路由表,需要发往192.168.4.0网段中的192.168.4.2地址。路由准备从相应接口上发出去,然后查询mac地址表,发现没有主机B的映射。路由器发送arp请求查询主机B的mac地址(原理同2、3步,主机B收到请求后首先会添加网关的mac地址,然后单播回复arp请求);


6、路由器收到主机B的mac地址后,将其添加到路由mac地址表中,
然后将缓存中的数据二层帧头去掉,封装自己的mac地址为源mac,主机B的mac地址为目的mac(源和目的IP地址不变),加上二层帧头及校验,发送给主机B;

7、主机B收到数据之后,进行处理,发送过程结束;

8、如果主机B收到数据后进行回复,主机B会进行地址判断,不在同一网段,然后决定将数据发送给网关,主机B查询mac地址表获得网关mac地址,将数据封装后发送(arp地址解析的过程不再需要了,mac地址表条目有一定的有效时间),网关收到数据后直接查询mac表,将二层帧mac地址更改为A的mac发送出去。如此,主机A收到主机B的回复;

综上在跨网段通信过程中有以下过程:
1、判断地址是否同一网段
2、查询目的IP地址的mac(发送arp请求)

此外需注意点:
1、ARP请求以广播发送、以单播回应
2、路由器隔离广播。每一个网段都是独立的广播域
3、跨越网段通信需要使用网关的mac地址

ps:如想深入分析,建议模拟环境,进行抓包操作,可以看到具体经历了哪些过程,有助于深入了解。

转载于:https://blog.csdn.net/qq_26122039/article/details/72887466

MAC地址的作用:

网络层使用ip地址寻找一台机器,数据链路层使用mac地址寻找一台机器。

IP地址本质上是终点地址,它在跳过路由器(hop)的时候不会改变,而MAC地址则是下一跳的地址,每跳过一次路由器都会改变。

这就是为什么还要用MAC地址的原因之一,它起到了记录下一跳的信息的作用。

注:一般来说IP地址经过路由器是不变的,不过NAT(Network address translation)例外,这也是有些人反对NAT而支持IPV6的原因之一。

最后结论是: 
mac地址可以作为一个翻译,毕竟世界不止有英特网也有其他网络 
在二层用arp协议实现mac地址和ip地址的映射,MAC地址也只是记录下一跳的信息

在三层使用ip地址传输数据,基本不用到mac地址。

一. 整体与局部
信息传递时候,需要知道的其实是两个地址:
  • 终点地址(Final destination address)
  • 下一跳的地址(Next hop address)

IP地址本质上是终点地址,它在跳过路由器(hop)的时候不会改变,而MAC地址则是下一跳的地址,每跳过一次路由器都会改变。

这就是为什么还要用MAC地址的原因之一,它起到了记录下一跳的信息的作用。

反过来,为什么全球只有mac地址不能用于全球通信?问题在于mac地址和IP地址的汇聚性。mac地址是出厂就决定的,不是上网的时候决定的。也就是说intel设备或使用intel芯片的mac地址前面多少位是相同的,然后intel在给芯片分地址的时候保证所有的芯片没有重号的,这样才能保证随便哪个终端接入到同一个局域网中没有重复的。

这样问题就来了:网络上希望路由器的转发规则尽量简单,所以一般要用ip地址前多少位而不是整个IP地址去做转发。mac地址显然没法汇聚,前面已经讲过,工厂决定的。

给每个用户分配一个只由路由器网关决定的地址,每个网关上附着一个段,例如100.200.x.x,也就是所有以100.200开头的ip都送到这个网关上来,就可以保证internet转发规则的简单化。而且,一个用户从一个局域网离开,换到另一个局域网中,mac地址不需要变,只需要换个ip地址就行。

转载于:https://blog.csdn.net/cabing2005/article/details/52810520





猜你喜欢

转载自blog.csdn.net/yinni11/article/details/81045013