网页一次请求过程

http服务器 -> tcp -> ip -> 网卡 -> 交换机  -> 路由器 -> 互联网 -> 路由器 -> 交换机 -> 网卡 -> ip -> tcp -> http客户端

(1)http

【解析URL】(实际上是解析请求服务器里的文件资源),产生发送给web服务器的请求信息。访问协议//web服务器:端口号/服务器文件路径 。如果没有设置路径,那么访问的是默认的文件

【生产http请求信息】

确定了需要访问的服务器和文件名之后,会根据这些信息生成http信息

包括:请求信息和响应信息

请求行(请求方法+URL+请求协议+协议版本)+消息头(数据字段+数据字段值)+消息体(具体数据)

响应状态行(协议+协议版本+  状态码+状态描述)+消息头(首部字段名+字段值)+消息体(具体数据)  

(2)真实地址查询DNS

HTTP消息生成之后需要将消息发送给相应的web服务器,但是需要查询到该服务器对应的IP地址(因为委托操作系统发送消息的时候,必须提供通信对象的IP地址),而服务器和IP的对应关系是在DNS服务器上存储的。

DNS服务器分为:根域名服务器(不做解析用,但是会去找信息)、顶级域名服务器、权威域名服务器。一般都是客户端找本地域名服务器,本地域名服务器找不到最直接去找的都是根域名服务器,然后根域名服务器去找顶级域名服务器

(3)通过DNS获取到IP后,会把http的传输工作交给操作系统的协议栈

应用程序(浏览器,web服务器等)-> 操作系统(协议栈:IP、TCP、UDP、ICMP、ARP)-> 驱动程序(网卡驱动程序:控制网卡)-> 硬件(物理硬件网卡)

【应用程序】通过调用socket库来委托协议栈工作,协议栈的上半部分是TCP,UDP协议,接受应用层的委托执行收发数据的操作;协议栈的下半部分是用IP协议控制的网络收发包操作(互联网传输数据会将数据分割成一块一块的网络包,而将网络包发送给对方的操作就是由IP负责的)。IP中还包括ICMP协议和ARP协议(ICMP:用于告知网络包传输过程中产生的错误以及各种控制信息;ARP:用于根据IP地址查询相应的以太网MAC地址)

IP下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,即对网线中的信号执行发送和接收操作。

(4)可靠传输TCP

TCP包头包括:源端口、目标端口、序号、确认序列、首部长度、保留、状态位、窗口大小、校验和、紧急指针、选项、数据

TCP三次握手(保证双方都有发送和接收的能力)和四次挥手

TCP的连接状态可以通过netstat –napt来查看

【TCP分割数据】

如果http的 请求消息过于长,超过了MSS,就需要把http的数据拆解成一块块的数据发送。数据会按照MSS的长度进行单位长度拆分,拆分出来的每一个数据包都会加上TCP的头信息,然后交给IP进行数据发送。(MTU:一个网络包的最大长度,一般以太网按照1500字节处理;MSS:去除IP和TCP头部之后,一个网络包的TCP数据的最大长度)

【TCP报文生成】

TCP协议里面会有两个端口一个是浏览器的监听端口(通常是随机生成的),一个是web服务器坚挺的端口(HTTP默认是80,HTTPS默认是443)

双方建立好连接之后TCP的数据部分就是存放的HTTP头部+数据,组装好TCP报文后就要交给网络层处理了。

 

(5)远程定位IP

TCP在执行连接、手法、断开等操作的时候,都要委托IP模块将数据封装成网络包发送给通信对象

IP报文头部格式:版本、首部长度、服务类型、总长度、标识、标志、片偏移、TTL、协议、首部校验和、源IP地址、目标IP地址、选项、数据

IP协议里面一定要有源地址IP(客户端输出的IP地址)和目标地址IP(通过DNS域名解析到的web服务器IP)

当客户端存在多个网卡的时候,就会有多个IP地址,那IP头部的源地址应该通过路由表规则来确定源地址IP应该写哪个(rount –n 查看当前系统的路由表)。通过路由表的每个条目的目标地址和子网掩码进行与运算得到匹配的源地址,如果不存在那么使用默认源地址即可。

(6)两点间的传输MAC

生成了IP头部之后,接下来网络包还需要在IP头部的前面加上MAC头部。MAC头部是以以太网使用的头部,它包含了接受方和发送方的MAC地址等信息,用于两点间的传输。

MAC包头:接收方MAC地址、发送方MAC地址、协议类型

一般在TCP/IP通讯里,MAC包头的协议类型只使用两种0800:IP协议,0806:ARP协议

发送方的MAC地址是在网卡产生的时候就已经写入到ROM里的,只要把值读出来写入到MAC头部就可以了。接收方的MAC地址先要在路由表中找到相应的匹配条目,把包发给Gateway列中的IP就可以了,但是还是需要把IP转换成MAC地址,那么需要ARP协议找到路由器的MAC地址。

【ARP协议】

ARP通过广播的形式,询问当前IP地址对应的Mac地址,当询问到对应的MAC地址后会把相应的查询结果放到一块叫做ARP缓存的内存中留着以后使用。也即是说,在发包的时候先查询ARP缓存,如果其中已经保存了对方的MAC地址那么直接使用ARP缓存中的地址;如果不存在对方的MAC地址,那么发送ARP广播查询,然后将查询结果存入ROM中。可以通过arp –a 来查看ARP缓存的内容。

(6)出口-网卡

IP生成的网络包只是存放在内存中的一串二进制数字信息,没有办法直接传输给对方。因此需要将数字信息转换为电信号,才能在在网线上进行传输。即从网卡开始才是真正的数据发送过程。

负责这一操作的是网卡,但是由网卡驱动 程序控制。网卡驱动程序获取到数据包之后,将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符(起始帧分界符用来表示包起始位置的标记 ),在末尾加上用于错误检测的帧校验序列(FCS帧校验序列用来检查包传输过程中是否有损坏)

(7)送别者—交换机

交换机工作在MAC层也称为二层网络设备。交换机是将网络包原样转发到目的地。

【交换机接收包操作】

首先电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换为数字信号。然后通过末尾的FCS进行检查是不是有错,如果未出现错误那么将其放入缓冲区。交换机不会查询是否存在MAC地址以及核对MAC地址而是直接放入缓冲区。(** 网卡本身具有MAC地址,所以会接收并核对收到的包的接收方的MAC地址是不是自己的MAC地址,如果不是则丢弃,这是网卡和交换机的不同)

将包存入缓冲区后,接下来需要查询这个包的 接收方MAC地址是不是已经存在于MAC地址列表里了。然后查询相应的MAC地址列表拿到对应的端口。

交换机的MAC地址列表主要有两个信息:设备的MAC地址、另一个设备在该交换机的哪一个端口上 (MAC地址表、端口、控制信息)

【MAC地址表不存在需要查找的内容】

如果不存在那么就直接把包发送给所有除了源端口的端口上,无论哪个包都可以接收到,然后将目标设备返回的响应包的地址写入MAC地址表,下次直接查表。

但是如果接收方在匹配目标MAC的时候就是未知,即是通过ARP广播询问MAC地址的情况,那么交换机会将包发送到除源端口之外的所有端口。

(8)出境大门—路由器

网络包经过交换机之后会到达路由器,并在此被转发到下一个路由器或者目标设备。路由器也是通过查表来判断包转发的目标。

*路由器是基于IP设计的,三层网络设备,路由器的各个端口都具有MAC地址和IP地址

*交换机是基于以太网设计的,二层网络设备,交换机的端口不存在MAC地址

【路由器的原理】

路由器的端口具有MAC地址,所以它能够成为以太网的发送方和接收方同时还具有IP地址,这里看来跟网卡差不多。当转发包时,首先路由器的端口会接收发送给自己的以太网包,然后通过查询路由转发目标。再由相应的端口作为发送方将以太网包发送出去。

【路由器包接收】

电信号达到网线接口部分,路由器的模块将电信号转换成数字信号,然后通过末尾的FCS进行错误校验,检验通过再进行MAC 地址检查,如果是发送给自己的包则放入缓冲区,否则就丢弃这个包。

【查询路由表确定出输出端口】

完成包接收之后,路由器就会去掉报的开头的MAC头部(MAC头部就是为了将数据包传到相应的路由器),然后会根据数据包中的IP地址进行包内容的转发:A 查询路由表判断转发目标:每条表数据的子网掩码和数据包IP进行与运算,得到得到转发目标,若没有那么按照默认路由处理。

B 发送:根据路由表的网关列判断对方的地址(如果网关是一个IP地址那么还需要继续按照查询到的IP进行转发;如果网关为空,那么说明路由结束,IP头部的IP地址则为目标地址IP。。然后通过ARP协议根据IP查询到MAC地址,路由器也是有ARP缓存的)。然后封装上MAC地址字段完成网络包,将其转化为电信号发出去。

*   在网络包的传输过程中,源IP和目标IP是不会变化的,一直变化的是MAC地址,因为需要MAC地址在以太网内进行两个设备之间的包传输。

*   互相拆包,完成数据传输之后进行四次挥手,断开连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值