zoukankan      html  css  js  c++  java
  • HTTP基本链接原理

    http的基本链接原理

    因为http是基于TCP/IP的协议,所以还是要说说这个面试老题,3次握手4次挥手的问题了。

    三次握手:

    1. 第一次握手:客户端发送了一个带有SYN(建立连接)的Tcp报文到服务器,这个三次握手中的开始。表示客户端想要和服务端建立连接。
    2. 第二次握手:服务端接收到客户端的请求,返回客户端报文,这个报文带有SYN(建立连接)和ACK(确认)标志,询问客户端是否准备好。
    3. 第三次握手:.客户端再次响应服务端一个ACK(确认),表示我已经准备好。

    为什么要3次握手那么麻烦?

    当然这个其实作为一个前端不需要关注,因为其实基本没你什么事情,但是了解到这一些基本知识,对于日后排除页面性能的时候,某些指标就是需要了解整个http链接过程了。言归正传,为什么需要三次握手呢?

    因为第一次握手的时候,客户端发送了一个请求,之后因为网络原因或者任何原因,客户端断网了或者没有收到服务器回传的ACK确认码,在这种情况下,如果服务器不去接收客户端回传ACK码确认,就开启链接,在这个时候就浪费了服务器的资源了,所以第三次握手就为这样的一种情况设计的,服务器必须确认客户端接收到了ACK码才开启连接。

     

    四次挥手:

    1. 第一次握手:客户端发送一个FIN(结束),用来关闭客户到服务端的连接。
    2. 第二次握手:服务端收到这个FIN,他发回一个ACK(确认),确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。
    3. 第三次握手:服务端发送一个FIN(结束)到客户端,服务端关闭客户端的连接。
    4. 第四次握手:客户端发送ACK(确认)报文确认,并将确认的序号+1,这样关闭完成。

    那么为什么关闭一个http请求需要走4次握手呢?

    因为服务器收到了客户端的FIN报文请求关闭连接的时候,服务器端很可能并不会立即关闭连接,而是需要等待所有数据都传输完毕后才进行关闭,所以会先回复一个ACK报文告诉客户端收到了FIN报文,当数据都传输完毕了,才使用FIN报文告诉客户端现在可以进行关闭了,客户端回复ACK报文进行确认,彼此才真正关闭连接。因此需要4次握手。

    文章转载:https://www.cnblogs.com/quietxin/p/10740213.html

  • 相关阅读:
    codeforces 189A
    hdu 2085
    hdu 2083
    cf 1237 C2. Balanced Removals (Harder)
    cf 1244 D. Paint the Tree
    cf 1241 E. Paint the Tree(DP)
    cf 1241 D. Sequence Sorting(思维)
    cf1228 D Complete Tripartite(哈希)
    Windows10 与 WSL(Ubuntu)的文件互访
    Ubuntu下运行python文件
  • 原文地址:https://www.cnblogs.com/2393920029-qq/p/12169656.html
Copyright © 2011-2022 走看看