1、三次握手

image.png

  • 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  • 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

    1.1、为什么要三次握手

    为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
    由于网络传输是有延时的(要通过网络光纤和各种中间代理服务器),在传输的过程中,比如客户端发起了SYN=1创建连接的请求(第一次握手)。
    如果服务器端就直接创建了这个连接并返回包含SYN、ACK和Seq等内容的数据包给客户端,这个数据包因为网络传输的原因丢失了,丢失之后客户端就一直没有接收到服务器返回的数据包。
    客户端可能设置了一个超时时间,时间到了就关闭了连接创建的请求。再重新发出创建连接的请求,而服务器端是不知道的,如果没有第三次握手告诉服务器端客户端收的到服务器端传输的数据的话,
    服务器端是不知道客户端有没有接收到服务器端返回的信息的。

    2、四次挥手

    image.png

  • (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

  • (2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  • (3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  • (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

————————————————
版权声明:本文为CSDN博主「鱼巷、猫未随」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42153410/article/details/80277733

3、访问WWW.JD.COM过程

当浏览器中输入www.jd.com之后,浏览器经历如下步骤:

  1. 浏览器查找该域名的 IP 地址
    1. 浏览器缓存 首先是查找浏览器缓存,浏览器会缓存DNS记录一段时间,不同浏览器保存的时常不等(2分钟到30分钟不等)。
    2. 系统缓存 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用来查找这个网址的对应DNS信息。
    3. 路由器缓存 如果在系统缓存里没有找到找到对应的IP,请求会发向路由器,它一般会有自己的DNS缓存。
    4. ISP DNS服务器 如果在路由器缓存里还是没有对应的IP,请求会被发送到ISP。
    5. 根域名服务器 如果还是没有,请求将发向根域名服务器进行搜索。找不到就说明此域名不存在。
  2. 浏览器根据解析得到的IP地址向web服务器发送一个HTTP请求
    1. 请求需要进行编码,生成一个HTTP数据包,依次打上TCP、IP、以太网协议的头部。其中TCP头部主要信息是本机端口和目标端口号等信息,用于标识同一个主机的不同进程,对于HTTP协议,服务器端的默认端口号是80,本机浏览器的话生成一个1024到65535之间的端口号。IP头部主要包含本地IP和目标IP等信息。以太网协议头部主要是双方的MAC地址,目标MAC可以由第一条所诉方法得到。以太网数据包的数据部分,最大长度为1500字节,所以如果IP包太大的话还要拆包,比如IP包5000字节,要分为4包,每一包都包含一个IP头部。
  3. 服务器收到请求并进行处理
    1. 负载均衡 网站可能会有负载均衡设备来平均分配所有用户的请求。负载均衡,即对工作任务进行平衡,分摊到多个操作单元上执行,如图片服务器,应用服务器。可分为链路负载均衡,集群负载均衡,操作系统负载均衡 。集群负载均衡又分为硬件负载均衡和软件负载均衡。
      CDN 请求的数据可能存储在分布式缓存、静态文件或者数据库中。如果请求的数据是静态文件,如果在CDN上,那么CDN服务器又会处理这个用户的请求。如果在数据库中需要向数据库发起查询请求。
  4. 服务器返回一个响应
    1. 过程 服务器返回一个 HTTP 响应,如果返回状态码304,浏览器可以直接使用之前缓存的资源。对于内容响应,浏览器需要进行响应解码,渲染显示。
  5. 浏览器对该响应进行解码,渲染显示
    1. 在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了,如果是个静态的页面,拿到此就基本结束了。如果是是动态的,那么在浏览器显示HTML时,会获取嵌入在HTML中的对象,浏览器会发送获取请求来重新获得这些文件。这些请求都要经历一个和HTML读取类似的过程。
      对于静态的页面内容,浏览器通常会进行缓存,而对于动态的内容,浏览器通常不会进行缓存。
  6. 页面显示完成后,浏览器发送异步请求
    1. 页面显示完成后客户端仍与服务器端保持着联系。它会持续与服务器保持联系来及时更新一些页面信息。在浏览器中执行的 JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址,它是一个按照程式构造的获取或发送请求。