【详解】计算机网络从总到细——网络数据传输流程
本篇介绍从网络互联到局域网再到广域网介绍网络数据传输流程
网络数据传输流程-1.网络互联(集线器)
- 集线器的作用:只做数据的转发
- ARP协议:建立IP与MAC的映射主机ARP缓存表
- 场景:主机A发送FTP”下载某个文件”数据包------>主机C
- 查找目的主机MAC地址:
- 查找本地ARP缓存表,通过目的IP查找目的MAC
- 如果找到,就直接发送数据包**(广播)**
- 如果找不到,主机A广播一个ARP请求数据包---->所有主机接收到ARP数据包
- ARP请求数据包:源MAC+目的MAC(广播形式的FF:FF:…),目的IP
- 其他主机接收到ARP数据包的处理过程:
- if(目的ip==自己的ip) 响应回自己的MAC; else 丢弃数据包
- 更新本机ARP缓存表
- 发送FTP请求数据:(目的MAC:主机MAC)
- 集线器转发数据报到其他所有主机;if(目的MAC==自己)处理 ;else丢弃;
- 查找本地ARP缓存表,通过目的IP查找目的MAC
- 冲突域:
- 概念:连接同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合或以太网上竞争同一宽带的节点集合。(房间中所有人同时说话,会让大家互相都听不清)
- 集线器网络互联存在冲突域,交换机可以解决冲突域。
网络数据传输流程-2. 局域网
- 局域网可以是同网段,可以是不同网段
- 同网段:网百络中同一网段指的是IP地址和子网掩码相与得到相同的网络地址。
2.1交换机连接
- 交换机连接:交换机没有进行数据的加工(封装和分用)
-
2. 查找本地ARP缓存表,通过目的IP查找目的MAC;- 如果找到,就直接发送数据包
- 如果本机ARP缓存表找不到目的MAC–>发送ARP请求的广播数据包—>交换机转发—>类似网络互联的查询IP主机MAC的过程
- 发送数据包 — > 交换机查询目的的MAC — > 通过MAC地址转换表,知道要发送数据到哪个端口 — > 通过端口发送对应主机
2.2 交换机+路由器
- 场景:主机1发送FTP“某文件下载”数据包到主机4
- 发送的数据报:源IP+源MAC+源端口号+目的IP+目的MAC+目的端口号+协议号
- 发送过程:
- 判断是否本机与目的主机在同一个网段:目的IP+子网掩码 位与操作得到网络号
- 在同一个网段,走交换机连接的逻辑
- 在不同网段:通过ARP缓存表,查询网关IP对应的MAC
- 主机发送数据报为:源IP+源MAC+源端口号+目的IP+目的MAC+目的端口号+协议号
- 路由器接受数据报:
- 路由器:目的IP对应 设备的 MAC地址 同之前ARP缓存查询的过程相同
- 数据报的加工(先分用,在重新封装)
- 数据包的以太网帧(数据链路层)里边包含的源MAC修改为自己(路由器)的MAC,目的MAC修改为目的主机(主机4)的MAC
- 按目的MAC发数据报:发送到主机4
- 目的主机解析(分用),响应数据报(封装发送),和之前发送端的逻辑一样
- 判断是否本机与目的主机在同一个网段:目的IP+子网掩码 位与操作得到网络号
网络数据传输流程-3. 广域网(重点)
-
-
场景:主机1请求https://www.baidu.com/
- https: 协议号
- www.baidu.com : 域名
-
传输流程:
-
通过域名查询对应的IP地址:DNS协议(本地DNS缓存–>路由器—>上级DNS服务器…–>全球顶级DNS服务器)
-
封装数据报:得到五元组信息
-
目的IP网络号+子网掩码相与得到一个网络号,与本机网络号对比,判断出不在一个网段
-
发送数据报到路由器:
- 源MAC:主机1的MAC ; 目的MAC:路由器的MAC;源IP:主机1的局域网IP;目的IP:百度服务器IP;协议号
-
路由器处理数据:
-
路由器可能没有百度服务器MAC,下一跳的目的MAC怎么办?
百度服务器接收数据时,返回响应数据时,需要根据现在发送数据报中的源IP+源端口号来返回。使用局域网IP+port有问题
-
路由器根据它的路由表决定下一跳地址
- 路由:我(路由器)也不知道百度在哪(目的IP),但是通过路由功能,知道方向,可以知道最优的下一站设备的MAC
- NAT+NAPT:局域网主机源IP+源port,修改为路由器公网IP+公网的映射端口(程序端口)
- 修改:源MAC修改为目的MAC,目的MAC修改为下一跳设备的MAC
-
-
下一跳设备处理数据:只修改MAC为自己的MAC,目的MAC为再下一跳设备的MAC(目的IP!=自己)
-
百度服务器接收数据:目的MAC是自己的,需要处理,目的IP==自己,接收数据报(分用)
-
返回数据报:源IP:百度服务器IP,源端口号:百度http程序端口;目的IP:路由器的公网IP。目的端口:路由器程序端口
-
路由器接收响应数据报:目的IP—>局域网主机1的IP,目的端口:主机1的浏览器程序端口,目的MAC:主机1的MAC
-
主机1接收处理响应数据报:if(目的MAC == 我自己的)处理 — >(if目的IP==自己的) -->分用给程序
- 说明:每一跳的过程中经过的设备,都先判断mac,然后发现ip不是自己的,所以交给后边设备,最后目的地拿到数据也是这样,但发现目的ip是我,所以就自己处理数据
-