Tcp Http 报文学习

325 阅读2分钟

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
    • 响应体