Tcp
-
概述
Transmission Control Protocol,一种面向连接的、可靠的、基于字节流的传输层通信协议。
-
数据包
了解Tcp,需提前知道下数据包,参考维基百科。 经常看到的SYN、ACK、FIN这些都是数据包中的标识符号,取值0和1。
-
三次握手简述
抓包工具用的wireshark
第一次握手:
第二次握手:
第三次握手:
如上的三次握手过程中,1、Client 发送 SYN = 1,seq = 0 以及数据长度、窗口大小、最大报文段长度、客户端时间戳等 到 Server,此时Client进入 SYN_SENT 状态;
2、Server 发送 SYN = 1,ACK = 1,ack = 1,seq = 0 以及窗口大小等 到 Client,此时Server进入 SYN_RECEIVED 状态;
3、Client 发送 ACK = 1,ack = 1,seq = 1,窗口大小,数据长度等, 到 Server,此时Client 进入 ESTABLISHED 状态,Server 接收到 ACK 后 进入 ESTABLISHED 状态;
-
四次挥手简述
第一次挥手:
第二次挥手:
第三次挥手:
第四次挥手:
如上的四次挥手过程中,
1、Server 发送 FIN = 1,ACK = 1,seq = 246,ack = 480 以及数据长度、窗口大小、最大报文段长度、客户端时间戳等 到 Client,此时Server进入 FIN_WAIT_1 状态;
2、Client 发送 ACK = 1,ack = 480,seq = 247 以及窗口大小等 到 Server,此时Client进入 ClOSE_WAIT 状态,Server 接受后进入 FIN_WAIT_2 状态;
3、Client 发送 FIN = 1,ACK = 1,ack = 247,seq = 480,窗口大小,数据长度等, 到 Server,此时Client 进入 LAST_ACK 状态, Server接受后进入 TIME_WAIT状态;
4、Server 发送 ACK = 1,ack = 481,seq = 247,窗口大小,数据长度等, 到 Client,此时Server 进入 2MSL 状态,Client 接受后进入 CLOSE 状态;
HTTP
-
请求报文
- 请求方式 + URI + 版本
- 请求头
- \r\n
- 请求体
ps:上传文件报文,需要boundary,划分文件内容
-
响应报文
- 版本 + 状态码
- 请求头
- \r\n
- 响应体