💻 【HTTP】传输协议及TCP 三次握手和四次挥手详解 🏠专栏:HTTP
👀个人主页:繁星学编程🍁
🧑个人简介:一个不断提高自我的平凡人🚀
🔊分享方向:目前主攻前端,其他知识也会阶段性分享🍀
👊格言:☀️没有走不通的路,只有不敢走的人!☀️
👉让我们一起进步,一起成为更好的自己!!!🎁
文章目录
【HTTP】传输协议及TCP 三次握手和四次挥手
一. 协议过程
1. 建立连接
浏览器和服务器进行连接
- 基于 TCP/IP 协议 的三次握手
2. 发送请求
-
要求:前端必须以请求报文的形式发送
-
报文:由浏览器组装,只需要提供对应的信息就可以
-
报文包含的内容:
-
请求报文行
请求方式 请求地址 传输协议
-
请求报文头 (本次请求的一些说明信息)
-
请求报文空行
-
请求报文体 (携带数据)
-
3. 接受响应
-
要求后端必须用响应报文的形式返回
-
报文用服务器组装
-
报文包含的内容
-
响应报文行
响应状态码
-
响应报文头 (本次响应的一些说明信息)
server 那个服务器返回的信息
date 时间
content-length 响应体长度
content-type 响应体数据类型
… -
响应报问题
后端返回前端的信息
-
4. 断开连接
浏览器和服务器断开连接
- 基于 TCP/IP 协议的四次挥手
二. 响应状态码
由3位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。相应类别由以下五种:
状态码 | 类别 | 描述 |
---|---|---|
1xx | Informational(信息状态码) | 接受请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 需要附加操作已完成请求 |
4xx | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务器错误状态码) | 服务器处理请求出错 |
常见的http响应状态码:
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
200 | OK | 请求成功 。一般用于GET与POST请求 |
204 | No Content | 无内容。服务器成功处理,但未返回内容 。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
301 | Moved Permanently | 永久性重定向 。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时性重定向 。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
401 | Unauthorized | 请求要求用户的身份认证 ,通过HTTP认证(BASIC认证,DIGEST认证)的认证信息,若之前已进行过一次请求,则表示用户认证失败 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。也可以在服务器拒绝请求且不想说明理由时使用 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求 。延时的长度可包含在服务器的Retry-After头信息中 |
三.TCP 三次握手和四次挥手
(1) 三次握手讲解
- 客户端发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求建立联机(客户端:我要连接你)
- 服务器收到请求后要确认联机信息,向A发送ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包(服务器:好的,你来连吧)
- 客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则连接建立成功。(客户端:好的,我来了)
(2) 为什么http建立连接需要三次握手,不是两次或四次?
答:三次是最少的安全次数,两次不安全,四次浪费资源;
(3) TCP关闭连接过程
- Client向Server发送FIN包,表示Client主动要关闭连接,然后进入FIN_WAIT_1状态,等待Server返回ACK包。此后Client不能再向Server发送数据,但能读取数据。
- Server收到FIN包后向Client发送ACK包,然后进入CLOSE_WAIT状态,此后Server不能再读取数据,但可以继续向Client发送数据。
- Client收到Server返回的ACK包后进入FIN_WAIT_2状态,等待Server发送FIN包。
- Server完成数据的发送后,将FIN包发送给Client,然后进入LAST_ACK状态,等待Client返回ACK包,此后Server既不能读取数据,也不能发送数据。
- Client收到FIN包后向Server发送ACK包,然后进入TIME_WAIT状态,接着等待足够长的时间(2MSL)以确保Server接收到ACK包,最后回到CLOSED状态,释放网络资源。
- Server收到Client返回的ACK包后便回到CLOSED状态,释放网络资源。
(4) 为什么要四次挥手?
TCP是全双工信道,何为全双工就是客户端与服务端建立两条通道,通道1:客户端的输出连接服务端的输入;通道2:客户端的输入连接服务端的输出。两个通道可以同时工作:客户端向服务端发送信号的同时服务端也可以向客户端发送信号。所以关闭双通道的时候就是这样:
四次挥手的简单案例对话:
客户端:我要关闭输入通道了。
服务端:好的,你关闭吧,我这边也关闭这个通道。服务端:我也要关闭输入通道了。
客户端:好的你关闭吧,我也把这个通道关闭。
结束语:
希望对您有一点点帮助,如有错误欢迎小伙伴指正。
👍点赞:您的赞赏是我前进的动力!
⭐收藏:您的支持我是创作的源泉!
✍评论:您的建议是我改进的良药!
一起加油!!!💪💪💪