前言
从浏览器上输入一个网址/url,到出现一个网页的过程涉及到网络的方方面面,本文不过多详解http具体原理等,仅对网络中包的封装、转发等简单分析。
在这之前回顾下一些网络基础:
- TCP比UDP多了拥塞控制、超时重传、流量控制(双方各声明一个窗口,别发的太快或太慢)
- 要传输的数据可能非常大,直接传出就不好传输,所以当大于MSS,就会分段传输;这样的话,当某一段丢失,只需要重传那一段即可。
网址到网页的出现都发生了什么?
发包
- 解析url : 分解网址,确定 web服务器和 文件名, url组成元素分别是:协议、主机名、端口、路径、片段标识符。然后形成http请求消息;
- dns解析 : 请求解析服务器对应的ip地址。请求的dns服务器顺序是:本地dns服务器---根域名服务器---.com顶级域名服务器---权威dns服务器告诉本地dns服务器---告诉客户端
- HTTP传输工作交给协议栈:TCP、UDP、ICMP、ARP等
TCP可靠传输:
- 三次握手:保证双方都有发送和接收的能力;
- 查看tcp链接状态:
netstat -napt
; http消息过长(超过MSS),分解成一块块的数据段;
- MTU:一个网络包的最大长度。以太网一般是1500字节
- MSS:出去TCP、IP头部后,一个网络包所能容纳的TCP数据的最大长度
- TCP的数据部分:HTTTP头部+数据
- 网络层:加上IP头部(源、目的IP、协议号06代表HTTP等),然后根据路由表发送
- 加上MAC头部:发出---->先看ARP缓存表---->没有就广播出去
- 数字信号到电信号:上述都是数字信号,数据包到网卡之后,复制到网卡内的缓存区,+报头+起始帧分界符+FCS(尾部),以电信号发出。
以上为浏览器所在主机发包的过程。
链路上传输
交换机:
- 通过内置模块先将电信号转成数字信号;
FCS校验错误--->无错,放入缓存区;
- 和计算机不同,交换机属于纯二层设备,端口不具备MAC地址,也不会核对接收到的MAC地址,直接放入缓冲区。
- 查本地的ARP表,有--->根据对应的端口号发出;无--->通过所有的端口号发出。
路由器:
- 电信号转换成数字信号;
- FCS校验错误;
- 检查接收方的MAC地址,如果不是给我的---->丢弃;
- 剥掉MAC头部(MAC头部的作用就是将包送到路由器)
转发
- 根据路由表查转发目标;
- 根据IP查mac地址,查询的结果即接收方的MAC;
- 封装发出。
从上述过程可以看出一直不变的是源、目的ip,一直变化的是MAC。
接收
- 剥掉MAC头部,看是不是给自己的,不是--->丢弃;
- 剥掉IP头,根据IP头中的协议项知道上层的是TCP协议;
- 剥掉TCP头,里边有序列号,看是不是我想要的,是--->放入缓存并返回ACK;不是--->丢弃;
- TCP头部有端口号,同样的HTTP服务正在监听这个端口号,数据包给HTTP
- HTTP进程将要请求的网页封装到HTTP响应报文中发出;
- 再经过+tcp + ip+MAC等一系列上面的过程再发出--->网卡---->交换机--->路由器--->客户端。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。