浏览器输入谷歌地址, 请描述整个访问过程发生了哪些步骤?
- 启动浏览器:
- 用户打开计算机上的浏览器应用程序,如 Google Chrome、Firefox、Safari 或 Microsoft Edge。
- 输入网址:
- 用户在浏览器顶部的地址栏(也称为统一资源定位符 URL 栏)中输入谷歌的网址,通常是 www.google.com 或相应国家的谷歌域名(例如 google.cn 对于中国用户)。
- DNS 解析:
- 浏览器将请求发送到本地 DNS 服务器,询问与输入网址对应的 IP 地址。如果本地 DNS 缓存中没有该记录,则会递归查询 DNS 树直至获取正确的 IP 地址。
- 建立连接:
- 获取到谷歌服务器的 IP 地址后,浏览器发起 TCP 连接请求,与谷歌服务器建立 HTTPS(HTTP over SSL/TLS)连接。这涉及到握手过程,其中包括验证服务器身份(通过证书)、协商加密套件,并最终生成会话密钥。
- SSL/TLS 加密握手:
- 如果是 HTTPS 访问,浏览器与服务器进行 SSL/TLS 加密握手,确保数据在传输过程中是加密且安全的。这一过程中包括交换必要的证书、公钥以及协商对称密钥等。
- 发送 HTTP 请求:
- 安全连接建立后,浏览器构造一个 HTTP GET 请求(包含 headers 和可能的 cookies 等信息),并将请求通过加密通道发送给谷歌服务器。
- 服务器响应:
- 谷歌服务器接收到请求后,根据请求内容处理请求,检索或生成所需资源,如网页内容,并将其封装成一个 HTTP 响应包,同样通过加密通道发送给浏览器。
- 解析响应内容:
- 浏览器接收响应数据并对其进行解密,接着按照 HTML、CSS、JavaScript 等资源构建和渲染页面内容。
- 页面渲染与交互:
- 浏览器根据接收到的 HTML 文档结构开始构建 DOM 树,并加载 CSS 样式表定义样式,执行 JavaScript 脚本实现动态功能。最终,完整的网页界面呈现在用户面前,用户可以开始在谷歌首页上进行搜索或其他操作。
tcp三次握手四次挥手? 如果只有两次会出现哪些问题?
TCP(Transmission Control Protocol)协议为了可靠地建立连接和终止连接,分别设计了三次握手和四次挥手的过程。
三次握手
TCP三次握手是用来建立连接的过程,其具体步骤如下:
客户端发起连接请求(SYN):客户端发送一个带有SYN标志的数据包到服务器,同时把序列号设置为X(Seq=X)。
服务器确认连接请求(SYN+ACK):服务器接收到这个数据包后,回应一个带有SYN和ACK标志的数据包,确认已收到客户端的连接请求,并附带自己的序列号Y(Seq=Y),同时将确认号设置为X+1(Ack=X+1),表明期望收到客户端的下一个数据包序列号为X+1。
客户端确认连接建立(ACK):客户端收到服务器的SYN+ACK包后,发送一个带有ACK标志的数据包,确认号设置为Y+1(Ack=Y+1),表示已收到服务器的SYN,并确认连接建立成功。
这样做的目的是双方都要确认彼此都能正常通信,避免因为网络延迟或者其他原因导致一方未收到对方的数据包而误认为连接已经建立。
若只有两次握手可能出现的问题
如果TCP连接只采用两次握手,即客户端发送SYN,服务器回复SYN+ACK后就认为连接建立完成,那么主要存在以下几个问题:
半开连接:服务器无法确定客户端是否收到了自己发出的SYN+ACK报文。如果客户端的SYN请求在网络中丢失,服务器依然会发送SYN+ACK,但客户端由于没有收到自己的SYN报文回传,不会发送ACK确认,因此服务器端会一直等待客户端的ACK,这就可能导致服务器端资源(如socket连接)被错误占用,形成半开连接状态。
重复连接:若客户端的SYN报文在网络中重传,而服务器又接受到了这个重传的SYN报文,如果没有第三次握手,服务器就会再次尝试建立连接,从而可能创建重复的连接。
总之,三次握手是为了保证双方都能明确知道对方已准备好进入数据传输阶段,减少了潜在的资源浪费和不一致的情况。减少握手次数会导致连接不可靠,增加系统负担和数据传输风险。