在浏览器输入url回车之后发生了什么?
- 浏览器解析URL(https://www.baidu.com/dist/test.html),获得协议(https)、web服务器名(baidu.com)和文件路径(/dist/test.html)等信息
- 根据解析URL获取的信息生成HTTP请求报文(请求行 + 消息头 + 消息体)
- 客户端去DNS服务器查询web服务器域名对应的IP地址
- 域名解析(www.baidu.com):
- 客户端向本地DNS服务器发起DNS请求,如果本地有缓存,则直接取出对应web服务器的IP地址返回给客户端
- 如果本地没有缓存,则向根域服务器发起请求,它会告诉你去.com域名服务器去找
- 然后向.com域名服务器发起请求,它会告诉你去baidu.com域名服务器去找
- 最后向baidu.com域名服务器发起请求,它会找到对应web服务器地址的IP地址返回给本地DNS
- 域名解析(www.baidu.com):
- 为HTTP报文添加TCP头部,添加源端口号+目的端口号等信息
- 三次握手建立TCP连接
- 客户端(CLOSED),服务端(CLOSED)>>
- 客户端(CLOSED),服务端主动监听某端口 >(LISTEN) >>
- 客户端发起连接SYN>(SYN—SENT)
- 服务端收到SYN,发送SYN + ACK > (SYN-RCVD) 第一次握手
- 客户端收到SYN + ACK,发送ACK >(ESTABLISHED) 第二次握手
- 服务端收到ACK > (ESTABLISHED)第三次握手
- 三次握手的目的就是保证双方都有发送和接收的能力
- TCP协议会将过大的数据包分包处理
- 三次握手建立TCP连接
- 为TCP+HTTP+报文添加IP头部 ,添加源IP地址+目的IP地址等信息
- 为IP + TCP + HTTP + 报文添加MAC头部,添加源MAC地址+ 目的MAC地址等信息
- MAC地址用于两点之间传输(MAC地址是路由器的地址)
- MAC + IP + TCP + HTTP + 报文通过网卡发送到交换机
- 网卡将数字信号转化为电信号发送出去
- 交换机根据报文的MAC地址查找MAC地址,然后将信号发送到对应端口
- 报文通过交换机到达了路由器,路由器通过对应的端口将报文发送出去
- 路由器与交换机的区别:路由器的每个端口都具有MAC地址与IP地址,交换机的每个端口都只有MAC地址
- 数据包终于抵达服务器,服务器根据四个请求头来分发数据。
- 分发到HTTP进程,将浏览器请求的数据封装成HTTP响应报文,HTTP响应报文也逐层添加TCP、IP、MAC头部,不过这次的源地址是服务器IP地址,目的地址是客户端IP地址
- 响应报文(状态行 + 消息头 + 消息体)
- 报文 >> 网卡 >> 交换机 >> 路由器 >> …
- 最后客户端收到HTTP响应报文,交给浏览器去响应报文,向服务器发起了TCP四次挥手断开连接。