如:发送http请求到百度服务器http://www.baidu.com
①根据DNS协议将域名转换为ip
②根据网络分层,从上到下进行封装,应用层:http协议首部,传输层:tcp协议首部(包含源端口,目的端口),网络层:ip协议首部(包含源ip,目的ip),数据链路层:以太网帧(包含源MAC,目的MAC)
③查看目的主机与本机是否在同一网段
根据某个ip与本机的子网掩码进行按位与运算,得到对应ip的网络号,由此判断目的主机与本机是否在同一网段。如果不在同一网段,就将数据报发给网关设备——路由器。根据ARP寻址,由路由器ip查找路由器对应的MAC地址
④发送数据报到网关设备
经过交换机时,根据MAC地址转换表,根据目的MAC查找对应的端口,找到对应的端口并发送数据报,如果找不到,就广播数据报到所有端口,目的主机返回响应,就可以记录目的主机MAC与端口。
路由器根据网络分层,从下到上分用解析数据报;基于NAPT协议(将内网ip+port转换为公网ip+port)将源ip转换为路由器公网ip,源端口转换为路由器公网端口;基于路由功能,找到下一设备的ip;根据ARP寻址,找到下一设备的MAC;从上到下封装数据报发送到下一设备
⑤服务器接收数据报
从下到上分用,数据链路层:目的MAC跟我一样,接收;网络层:目的ip和我一样,要处理;传输层:根据端口找对应的进程;应用层:把数据交给应用层,由应用程序根据应用层协议进行解析
⑥服务器返回响应数据报
和请求流程一样,只是源ip与目的ip交换,源端口和目的端口交换