提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
网络常见问题
提示:以下是本篇文章正文内容,下面案例可供参考
一、协议体系结构
二、TCP
三次握手
SYN:同步位;SYN=1,表示要做一个连接请求;
ACK :确认位;ACK=1,表示确认有效;ACK==0,表示确认无效;
seq:序列号
ack:确认号;对方发送的序号+1;
前提条件:
服务端是启动状态;
流程:
- 客户端主动发起请求; 请求发送到服务器;携带信息:
SYN=1;
seq = x;(x 序列号是客户端随机的) - 服务器给客户端发送一个响应,表示自己收到了;携带信息:
SYN=1;
ACK=1;
ack = x+1;
seq = y;(y序列号是服务器随机的) - 客户端给服务端发送一个响应,表示自己收到了;携带信息:
ACK=1;
ack =y+1;
seq = x+1;(每次都会发送一个seq,值为上次的x+1)
此时就可以进行数据传输了
四次挥手
断开链接tcp四次挥手
seq: 随机生成的序列号
ack:ack = seq+1; 是确认号
ACK:确认序列号有效
SYN:发起新链接
FIN:完成
客户端和服务端都可以发起。以客户端发起为例
在这里插入图片描述
FIN:FIN=1;断开链接;并且客户端会停止向服务端发数据
流程:
客户端主动发起一个关闭请求;携带信息:
FIN=1;
seq =u;
服务器给客户端发送一个响应,表示自己收到了;携带信息:
ACK=1;
ack=u+1;
seq = v;(服务器生成)
此时称为半关闭状态;此时服务器还是会向客户端发送数据
服务器向客户端发送一个关闭请求;携带信息:
FIN=1;
ACK=1;
seq=w;(因为,此时还是半关闭状态,服务器生成的序列号并不能确定,不一定是v 了,所以用w 来表示)
ack=u+1;(客户端没有向服务器端再次发送序列号,所以,此时的确认号,仍然是上次浏览器发过来的序列号+1;即:u+1)
客户端给服务端响应,表示自己收到了;携带信息:
ACK=1;
ack=w+1;
seq = u+1;
注意:
在fin_wait_2:会等待未完成的任务完成
1-4min 超时等待状态;
发送请求的方法
方法名称 | 方法说明 | 支持的HTTP 协议版本 |
---|---|---|
get | GET 方法用于根据 URI 参数从服务器中获取数据,是最常用的请求方法之一 | 1.0、1.1 |
head | HEAD 方法与 GET 方法类似,但服务器在响应时只返回响应行和响应头,不会返回响应体 | 1.0、1.1 |
post | POST 请求用于将数据发送到服务器。例如使用 HTML 表单上传文件或提交客户信息等 | 1.0、1.1 |
put | PUT 方法可以向服务器中写入文档,有点类似于使用 FTP 上传文件 | 1.0、1.1 |
delete | DELETE 方法用于删除 URI 所指定的目标资源,与 PUT 方法正好相反 | 1.0、1.1 |
connect | CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信 | 1.1 |
options | OPTIONS 方法用来查询目标资源所在服务器支持的 HTTP 方法 | 1.1 |
trace | TRACE 方法可以让服务器端将收到的请求返回给客户端,主要用于开发阶段的测试和诊断 | 1.1 |
link | 建立和资源之间的联系 | 1.0 |
unlink | 断开链接关系 | 1.0 |