【HTTP】传输协议及TCP 三次握手和四次挥手详解

1 篇文章 0 订阅
文章详细介绍了HTTP协议的过程,包括建立连接、发送请求、接受响应和断开连接。同时,重点讲解了TCP的三次握手和四次挥手机制,解释了为何需要三次握手和四次挥手的原因。此外,还列举了一些常见的HTTP响应状态码及其含义。
摘要由CSDN通过智能技术生成

💻 【HTTP】传输协议及TCP 三次握手和四次挥手详解 🏠专栏:HTTP
👀个人主页:繁星学编程🍁
🧑个人简介:一个不断提高自我的平凡人🚀
🔊分享方向:目前主攻前端,其他知识也会阶段性分享🍀
👊格言:☀️没有走不通的路,只有不敢走的人!☀️
👉让我们一起进步,一起成为更好的自己!!!🎁

【HTTP】传输协议及TCP 三次握手和四次挥手

一. 协议过程

1. 建立连接

浏览器和服务器进行连接

  • 基于 TCP/IP 协议 的三次握手

2. 发送请求

  • 要求:前端必须以请求报文的形式发送

  • 报文:由浏览器组装,只需要提供对应的信息就可以

  • 报文包含的内容:

    1. 请求报文行

      请求方式 请求地址 传输协议

    2. 请求报文头 (本次请求的一些说明信息)

    3. 请求报文空行

    4. 请求报文体 (携带数据)

3. 接受响应

  • 要求后端必须用响应报文的形式返回

  • 报文用服务器组装

  • 报文包含的内容

    1. 响应报文行

      响应状态码

    2. 响应报文头 (本次响应的一些说明信息)

      server 那个服务器返回的信息
      date 时间
      content-length 响应体长度
      content-type 响应体数据类型

    3. 响应报问题

      后端返回前端的信息

4. 断开连接

浏览器和服务器断开连接

  • 基于 TCP/IP 协议的四次挥手

二. 响应状态码

由3位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。相应类别由以下五种:

状态码类别描述
1xxInformational(信息状态码)接受请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要附加操作已完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求出错

常见的http响应状态码:

状态码状态码英文名称中文描述
200OK请求成功。一般用于GET与POST请求
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
301Moved Permanently永久性重定向。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时性重定向。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
401Unauthorized请求要求用户的身份认证,通过HTTP认证(BASIC认证,DIGEST认证)的认证信息,若之前已进行过一次请求,则表示用户认证失败
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。也可以在服务器拒绝请求且不想说明理由时使用
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中

三.TCP 三次握手和四次挥手

(1) 三次握手讲解

  1. 客户端发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求建立联机(客户端:我要连接你
  2. 服务器收到请求后要确认联机信息,向A发送ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包(服务器:好的,你来连吧
  3. 客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则连接建立成功。(客户端:好的,我来了

(2) 为什么http建立连接需要三次握手,不是两次或四次?

答:三次是最少的安全次数,两次不安全,四次浪费资源;

(3) TCP关闭连接过程

  1. Client向Server发送FIN包,表示Client主动要关闭连接,然后进入FIN_WAIT_1状态,等待Server返回ACK包。此后Client不能再向Server发送数据,但能读取数据。
  2. Server收到FIN包后向Client发送ACK包,然后进入CLOSE_WAIT状态,此后Server不能再读取数据,但可以继续向Client发送数据。
  3. Client收到Server返回的ACK包后进入FIN_WAIT_2状态,等待Server发送FIN包。
  4. Server完成数据的发送后,将FIN包发送给Client,然后进入LAST_ACK状态,等待Client返回ACK包,此后Server既不能读取数据,也不能发送数据。
  5. Client收到FIN包后向Server发送ACK包,然后进入TIME_WAIT状态,接着等待足够长的时间(2MSL)以确保Server接收到ACK包,最后回到CLOSED状态,释放网络资源。
  6. Server收到Client返回的ACK包后便回到CLOSED状态,释放网络资源。

(4) 为什么要四次挥手?

TCP是全双工信道,何为全双工就是客户端与服务端建立两条通道,通道1:客户端的输出连接服务端的输入;通道2:客户端的输入连接服务端的输出。两个通道可以同时工作:客户端向服务端发送信号的同时服务端也可以向客户端发送信号。所以关闭双通道的时候就是这样:

四次挥手的简单案例对话:

客户端:我要关闭输入通道了。
服务端:好的,你关闭吧,我这边也关闭这个通道。

服务端:我也要关闭输入通道了。
客户端:好的你关闭吧,我也把这个通道关闭。

结束语

希望对您有一点点帮助,如有错误欢迎小伙伴指正。
👍点赞:您的赞赏是我前进的动力!
⭐收藏:您的支持我是创作的源泉!
✍评论:您的建议是我改进的良药!
一起加油!!!💪💪💪

三次握手是TCP建立连接的过程,而四次挥手是TCP断开连接的过程。 三次握手的详解如下: 1. 第一次握手:客户端向服务器发送一个SYN包,其中包含客户端的初始序列号(ISN)。 2. 第二次握手:服务器收到客户端的SYN包后,向客户端发送一个SYN-ACK包,其中包含服务器的初始序列号(ISN+1),同时确认客户端的SYN包。 3. 第三次握手:客户端收到服务器的SYN-ACK包后,向服务器发送一个ACK包,确认服务器的SYN-ACK包。 通过这三次握手,客户端和服务器建立了双向的可靠连接,可以开始进行数据的传输。 四次挥手的详解如下: 1. 第一次挥手:当客户端没有数据要发送时,它向服务器发送一个FIN包,表示客户端已经完成了数据的发送。 2. 第二次挥手:服务器收到客户端的FIN包后,向客户端发送一个ACK包,确认客户端的FIN包。 3. 第三次挥手:当服务器也没有数据要发送时,它向客户端发送一个FIN包,表示服务器已经完成了数据的发送。 4. 第四次挥手:客户端收到服务器的FIN包后,向服务器发送一个ACK包,确认服务器的FIN包。 通过这四次挥手,客户端和服务器完成了连接的断开,不再进行数据的传输。 总结起来,三次握手是建立连接的过程,而四次挥手是断开连接的过程。这样的设计可以保证数据的可靠传输,并且确保连接的双方都能正确地完成连接的建立和断开。 #### 引用[.reference_title] - *1* *2* *3* [我终于搞懂了TCP三次握手和四次挥手(图片案例超详解)](https://blog.csdn.net/weixin_45393094/article/details/104965561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值