输入网址到回显页面,经历了哪些过程
输入网址到显示,期间经历哪些过程? HTTP:URL解析 DNS:域名解析 操作系统协议栈 可靠传输TCP 远程定位IP 两点传输MAC 出口网卡 交换机 路由器 HTTP:URL解析
浏览器第一步工作就是要对输入的URL进行解析,从而确定发送给Web服务器的请求信息。
关于HTTP,可以看以下文章(由于无法给链接,关于以下文章可以私信我获取具体地址): HTTP基础知识 HTTP/1.1优化 TLS握手 HTTPS优化 HTTP/2 DNS:域名解析
在进行完URL解析以后,需要通过DNS域名解析获取服务器的IP。
关于DNS,可以看以下文章: IP相关协议
操作系统协议栈
通过DNS获取到IP以后,就可以将传输工作交给操作系统协议栈。
应用程序(浏览器)通过调用Socket库来委托操作系统协议栈工作。协议栈大体分为两部分: 上半部分:负责接收和发送数据的TCP和UDP协议 下半部分:用于控制网络包收发操作的IP协议
IP协议中还包含ICMP协议(告知网络传输过程中产生的错误和控制信息)和ARP协议(获取MAC地址)。
IP下面的网卡驱动程序负责控制网卡硬件,网卡负责实际的收发操作(对网线中的信号执行收发)。 可靠传输TCP
由于HTTP的传输层协议是TCP,因此我们还需要借助TCP的帮助,通信的双方需要建立TCP连接。
关于TCP,可以看以下文章(由于无法给链接,关于以下文章可以私信我获取具体地址): TCP三次握手 TCP四次挥手 TCP重传 TCP滑动窗口 TCP流量控制 TCP拥塞控制 网络显形TCP三次握手 TCP连接队列 TCP性能优化 远程定位IP
TCP在执行数据传输的时候会委托IP模块将数据封装成网络包发送给通信对象。
通过上图可以看出,IP协议里面需要有源IP地址和目的IP地址,由于HTTP是TCP传输,所以在IP首部中的协议后为0x06(表示TCP)。
客户端有多个网卡,源IP地址如何选择?
如果客户端有多个网卡(多个源IP地址),此时需要根据路由表规则来进行网卡(源IP地址)的选择。 # linux中查看路由表 route -n
具体的选择步骤如下: 将目标地址与路由表中的子网掩码进行与运算,算出来的结果如果和路由中的Destination一致,就是该路由对应的网卡的IP地址作为源IP地址 在路由表中有一条特殊的路由,目标地址和子网掩码都是0.0.0.0(表示默认网关,Gateway即路由器的IP地址),如果其他路由都无法匹配,就会自动匹配。 两点传输MAC
在IP头部生成以后,需要在IP头部的前面加上MAC头部。
MAC包头里需要发送方的MAC地址和接收方的MAC地址,在TCP/IP通信中,协议类型只有两种: 0800:IP协议 0806:ARP协议
关于ARP如何获取接收方MAC地址,可以看以下文章: IP相关协议
如何查看MAC地址缓存 arp -a
ARP缓存大体有三部分组成: IP地址 MAC地址 网口名称 出口网卡
网络包只是内存中的一串二进制信息,无法直接发送给对方。需要 网卡将数字信息转化为电路信号才能在网线上进行传输 。
控制网卡需要借助网卡驱动程序,网卡驱动程序从IP层获取到包以后,会将其复制到网卡内的缓冲区,接着会在其 开头加上报头和起始帧分界符 ,在 末尾加上用于检测错误的帧校验序列 。
数据包封装好以后,网卡会将包转换成电信号通过网线发出去。 交换机
交换机是二层网络设备,目的是用来将数据包原样的转发至目的地。
交换机的端口没有MAC地址 。
交换机中有MAC地址表,MAC地址表主要包含两个信息: 设备的MAC地址 设备连接在交换机的哪个端口上
交换机的包接收操作 网线中的电信号到达交换机的网线接口,交换机收到电信号以后,会将电信号转换成数字信号 通过包尾的FCS校验,如果校验通过则放入缓冲区 将包放入缓冲区后,需要查询一下包的接收方的MAC地址是否在交换机中的MAC地址表中 如果MAC地址表中有匹配的记录,就通过交换电路将包发送到记录上的端口中。
MAC地址表中没有如何处理?
MAC地址表中如果没有对应的MAC地址,交换机就无法判断将数据包转发至端口,此时交换机会将数据包发送至除源端口以外的所有端口上。端口上的设备收到数据包以后,如果自己的MAC地址与数据包中的相符,就会接收该数据包,并作出响应,只要返回了响应,交换机就可以将它写入MAC地址表,下次就不需要将包发送至所有端口了。
如果 接收方是一个广播地址,交换机还是会把包发送至除源端口以外的所有端口 。 路由器
数据包在经历过交换机以后,顺利抵达了路由器,在路由器上会被转发到下一个路由器或目标设备。
路由器是三层网络设备的各个端口都有MAC地址和IP地址。
路由器的收发流程 路由器的端口收到电信号后,会将电信号转发给数字信号 路由器对包末尾的FCS进行错误校验 校验如果没有问题就检查MAC头部中的接收方MAC地址是否和自己的一致,如果是就放到接收缓冲区,否则就直接丢弃这个包 路由器接收到包以后,就会去掉包中的MAC头部 路由器会根据IP头部中的内容进行包的转发操作,路由器会根据路由表寻找下一跳的路由 找到匹配的路由以后,会根据路由表项中的Gateway列来判断对方的地址 如果网关是一个IP地址,则这个IP地址就是我们要转发的目标地址(此时还未到达终点,需要路由器继续转发) 如果网关为空,则IP头部中的接收方IP地址就是最终的目标地址
确定完目标IP地址以后,又会通过ARP确定MAC地址,最终将封装数据包(IP层的目标IP不会发生变化)发送出去。在整个数据包转发过程中可以看出 源IP和目标IP始终不会变化,但MAC地址一直是在变化的 。