HTTP与TCP连接的那些事
安全&逆向
HTTP与TCP连接的那些事
这是我看到微信公众号看到的,然后通过wireshark分析,巩固知识。
准备工具
Wireshark
当接收到一个URL的时候,会执行的步骤
- 浏览器解析出主机名
- 浏览器查询主机名的IP地址(DNS)
- 浏览器获得端口号
- 浏览器发器对该IP地址对应端口的链接
- 浏览器向服务器发送一条HTTP GET报文
- 浏览器从服务器读取HTTP响应报文
- 浏览器关闭连接
TCP连接
TCP是可靠的数据管道
TCP按照有序、无差错的承载HTTP数据。从TCP连接会以顺序、正确的传递。
TCP流是分段的、由IP分组传送
HTTP
- 网络接口(数据链路层)
- IP(网络层)
- TCP(传输层)
- HTTP(应用层)
HTTPS
- 网络接口
- IP
- TCP
- TSL 或 SSL
- HTTP
HTTP要发送一条报文时候,会以流的形式将报文数据内容通过一条打开的TCP按照有序的方式进行传输。
- TCP序号
Seq
序号,占32位 - 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
保持TCP连接的持续不间断地运行
TCP连接通过
- 源IP地址
- 源端口
- 目的地址
- 目的端口
三次握手与四次挥手
- 客户端向服务器SYN 并声明
seq=0
- 服务端发送
[SYN,ACK]
并声明发送讯号seq=0
确认讯号ack=1
- 客户端发送
[ACK]
报文,发送讯号seq=1
确认讯号ack=1
- 服务器向客户端发器一个FIN,请求关闭数据传输
- 客户端接收到FIN时,向服务器发送一个ACK
ack=FIN+SEQ
即145 = 1+ 144 - 客户端向服务器发送FIN,告诉服务关闭
- 服务器接收到客户端FIN,回复一个ACK给客户端
ack = FIN+SEQ
即 459=1+458
HTTP请求
向http://server.itaolaity.com:32773/add?a=1&b=8
发起请求,响应9
。
前面三个是TCP三次握手,第四条报文是客户端向服务器发送的HTTP请求包。以及服务器给客户端的响应。 最后四次挥手。
当点击当个报文详情的时候可以看到有5个描述信息。
Ethernet II, Src: ____, Dst: Tp-LinkT_6a:0a:1f (____)
可以看到源mac地址和目的mac地址
Internet Protocol Version 4, Src: 192.168.1.102(本机IP), Dst: 112.124.30.55(客户端IP)
IP层的分析
Transmission Control Protocol, Src Port: 14611, Dst Port: 32773(服务器端口), Seq: 1, Ack: 1, Len: 468
TCP分析
Hypertext Transfer Protocol
HTTP请求控制协议
可以看到请求行信息
、请求方法
、请求的URI
、请求的主机
、浏览器类型
、请求语言
、请求的编码格式
使用\r\n\r\n
结束
总结:
再看看服务器给出的响应报文
包括了响应行信息 HTTP/1.1 200 \r\n