1.浏览器解析url
协议//服务器/路径
当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html 或者 /default.html 这些文件
2.生成 HTTP 请求消息
请求行、消息头、消息体
3.向DNS服务器查询服务器域名对应的 IP 地址
DNS服务器:保存了 Web
服务器域名与 IP
的对应关系
如果没有缓存、hosts文件就是上图流程
4.将HTTP传输交给操作系统协议栈
应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。
协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
TCP有三次握手,保证双方都有发送和接收的能力
如果HTTP 请求消息比较长,超过了 MSS
的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据
然后添加TCP头部,生成TCP报文交给网络层,包括源端口号、目的端口号、序号、确认序号、标志位、窗口大小等
在网络层,需要添加ip头,包括源ip地址、目的ip地址和传输层协议号等等,源ip地址通过查找路由表确定,目的ip地址是DNS服务器返回的结果。
网络接口层,添加MAC头部,包括接收方MAC地址、发送方MAC地址和协议号(通常是IP或ARP)
接收方的MAC地址需要先查路由表,得到匹配的列对应的ip,然后通过ARP缓存或广播获得对应MAC地址
网卡在在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列,然后转换为电信号发出去。
交换机可以接收到电信号转换为数字信号,通过包末尾的 FCS
校验错误,如果没问题则放到缓冲区,和网卡不同,交换机的端口不具有 MAC 地址,交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。如果缓存没有或者MAC是个广播地址,交换机会将包发送到除源端口之外的所有端口。
路由器和上述的区别是会检测MAC是否是发给自己的包,接收后会去掉MAC头,此外查找也是查找路由表(根据ip地址)决定转发端口。发送时,会根据路由表的网关列判断对方的地址,如果网关是一个 IP 地址,说明还未抵达终点,如果网关为空,说明已抵达终点。最后通过 ARP
协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地址(MAC地址也有缓存)。传输过程源IP和目的IP一直不变,变的是MAC地址。
服务器收到后一层一层去掉头部交给上层协议处理。
Comments NOTHING