集线器作用:只是做数据转发
ARP协议:建立IP与MAC的映射主机ARP缓存表
场景:主机A发送FTP“下载某个文件数据包”—>主机C
查找目的主机MAC地址:
查找本机ARP缓存表,通过目的IP查找目的MAC如果找到,就直接发送数据包(广播)如果没找到,主机A广播一个ARP请求数据包-->所有主机接收到ARP数据包—>主机C发现是请求自己的MAC,就返回数据包(ARP响应),其他主机通过IP判断出不是请求自己的MAC,就会丢弃数据包。1.集线器网络互联存在冲突域,交换机可以解决冲突域 2.ARP请求数据包:源MAC + 目的MAC(广播形式FF:FF…),目的IP. 通过目的IP查询目的MAC请求,广播形式(数据包目的MAC为FF:FF…)发送
举例: 主机1通过IP + PORT访问主机3的http服务 流程: (1)通过主机1的ARP缓存表,查询目的IP对应的MAC地址 (2)如果找不到,广播发送ARP请求数据报(源MAC,目的MAC填FF:广播地址,目的IP), 其他主机接收并处理数据报:
if(自己IP == 目的IP) return 我的MAC; else 丢弃数据包(3)更新本机ARP缓存表 (4)发送http请求数据:(目的MAC:主机3MAC) 集线器转发数据报到其他所有主机
if(目的MAC == 自己) 处理; else 丢弃冲突/碰撞域:同一时间,多台主机同时发送数据报,集线器要把多个数据报发送到所有端口.总带宽个单个端口带宽有限,造成干扰.
交换机中存在MAC地址转换表 主机1中有ARP缓存表
举例: 主机1访问主机3的http服务 流程: (1)通过目的IP查询本机ARP缓存表,找目的MAC (2)如果没有,广播ARP数据报,如果有发送http请求数据 (3)交换机查看数据包的目的MAC,通过MAC地址转换表可以知道对应端口,发送数据包到对应端口
举例: 主机1访问主机4的http服务 前置条件(主机网络配置): IPV4地址:(192.168.0.100) IPV4子网掩码(255.255.255.0) IPV4默认网关(192.168.1.1) 流程: (1)通过目的IP的网络号与子网掩码按位与操作,得到一个网络号,这个网络号和自己的网络号对比,就知道目的主机是否在同一网段
(2)不在同一网段,自己处理不了数据传输,交给上一级可处理设备(路由) (3)发送数据报: 目的IP:主机4的IP(192.168.0.100) 目的MAC:本机ARP缓存表,通过网关IP查找网关MAC (4)路由器处理数据报: 源MAC:由主机1MAC修改为路由器自己的MAC地址 目的MAC:由路由器MAC修改为主机4MAC(如果没有主机4的MAC,就通过广播来找)
举例: 主机1访问网址
流程: (1)通过域名查询相对应的IP地址:DNS协议(本地DNS缓存-->路由器-->上级DNS服务器-->...-->全球顶级DNS服务器)
(2)有了五元组信息
(3)目的IP网络号 + 子网掩码得到一个网络号,与本机网络号对比,判断出不在一个网段
(4)发送数据报到路由器:
内容对应源MAC主机1的MAC目的MAC路由器的MAC源IP主机1的局域网IP目的IP百度服务器IP,协议号http(5)路由器处理数据报:
百度服务器接收数据,返回响应数据时,需要根据现在发送数据报中源IP + 源端口号返回,使用局域网IP + PORT有问题
路由:路由器不知道百度在哪(目的IP),但是通过路由功能,知道方向,就可以知道最优的下一站设备的MACNAT + NAPT:局域网主机源IP + 源port,修改为路由器公网IP + 公网映射端口(程序端口)修改:源MAC修改为自己的MAC,目的MAC修改为下一跳设备的MAC(6)下一跳设备处理数据:只修改源MAC为自己的MAC,目的MAC为再下一跳设备的MAC(目的IP != 自己)
(7)百度服务器接收数据:目的MAC是自己的,需要处理,目的IP == 自己,接收数据报(分用)
(8)返回数据报:
内容对应源IP百度服务器IP源端口号百度http程序端口目的IP路由器的公网IP目的端口路由器程序端口(9)路由器接收响应数据报:
内容对应目的IP局域网主机1IP目的端口主机1的浏览器程序端口目的MAC主机1的MAC(10)主机1接受处理响应数据报:
if(目的MAC == 自己的){ 处理(交给分用程序); }百度服务器不能存在局域网内,通过路由器在公网提供http服务:路由器没有建立端口映射,找不到局域网内具体主机.