从输入www.baidu.com经历了什么
一、DNS(网址->IP)
二、ARP(IP->MAC)
- A->B:有数据发送,数据封装ip之后发现没有主机B的mac地址。然后ARP在本网段广播:检查目标地址和源地址是否在同一网段,①在同一网段,返回目标ip对应的mac。②不在同一网段,需要默认网关的ip和mac信息。(局域网默认网关一般可以由路由器充当)。
- 显然不在一个网段。主机将数据包先放到缓存中,然后广播ARP查询报文:封装自己的mac地址为源mac,目的mac地址全写F(作为广播地址),请求本局域网的默认网关mac地址。
- 路由器收到广播数据包,发现是请求自己的mac地址。首先将源地址的mac添加到自己的mac地址表中。然后路由器单播一个ARP应答:封装自己的ip地址为源ip自己的mac地址为源mac,主机A的ip为目的IP主机A的mac为目的mac。
- 主机(A)收到应答包后,将默认网关mac地址+目的地址ip(跨网关通信,其他网段ip地址对应的mac均为默认网关的mac),然后将缓存中的数据包,封装默认网关mac地址后进行发送。(前面已经封装了目的ip)。
- 路由收到数据包,检查目的ip地址,发现不是给自己的,需要进行路由,然后查询路由表,确定是需要发往另外一个网段中B的ip地址。路由发送之前查询mac地址表,发现没有主机B的映射。路由器广播arp请求查询主机B的mac地址(原理同2、3步,主机B收到请求后首先会添加网关的mac地址,然后单播回复arp请求)。
- 路由器得到主机B的mac地址映射后,也将其添加到路由器的mac地址表中,重新封装数据包的源地址mac和ip(路由器的ip和mac作为源地址,目的地址仍然是主机B信息),发送给主机B。(多级网关(路由)就这样一级一级下去)。
- 主机B收到数据之后,进行处理,发送过程结束。
- 如果主机B收到数据后进行回复,主机B会进行地址判断,不在同一网段,然后决定是否将数据发送给网关,主机B查询mac地址表获得网关mac地址,将数据封装后发送(arp地址解析的过程不再需要了,mac地址表条目有一定的有效时间),网关收到数据后直接查询mac表,将二层帧mac地址更改为A的mac发送出去。如此,主机A收到主机B的回复。
综上,跨网段通信过程中有以下过程:
1、判断地址是否同一网段;
2、查询目的ip地址对应的mac地址(发送arp请求);
此外需注意点:
1、ARP请求以广播发送(1对n)、以单播回应(1对1);
2、路由器隔离广播。每一个网段都是独立的广播域(arp只能在本网段广播);
3、跨越网段通信需要使用默认网关的mac地址;
三、NAT(不同子网下设备地址的映射)
跨网段通信需要使用网关建立链接;(局域网1到局域网2,此情况下一般路由器充当网关);
局域网访问公网服务器需要使用NAT网关进行地址映射;
1、局域网中的一台主机 A如何与外网服务器通信?
局域网中的主机A,想要访问外网服务器时,是通过NAT,将局域网ip地址+端口映射成外网ip地址+端口(NAT网关会记录映射表)。也就是说要与外网地址通讯,实际上也是需要一个外网地址。
2、服务器的返回数据包,是如何找到内网的客户端主机A,并将数据传给主机A上运行的程序P呢?
服务器返回消息时,返回到NAT,NAT根据映射表找到当时局域网内的ip+端口,并发送到局域网内的目标机器上,并发给对应的程序P;(ip+端口号确定应用程序P)。
四、其他基础
1、局域网使用的IP地址范围:
A类地址:10.0.0.0 - 10.255.255.255
B类地址:172.16.0.0 - 172.31.255.255
C类地址:192.168.0.0 -192.168.255.255
2、TCP/IP四层模型常用协议:
应用层:http、DNS、FTP
传输层:TCP/UDP
网络层:IP、ICMP(ping命令,核心也就是发送ARP报文进行地址探测)
网络接口层:ARP(ip->mac)、RARP(mac->ip)
3、OSI7层模型下设备工作层:
路由器:网络层
交换机:数据链路层
集线器:物理层