很多从事5、6年Web工作者都不明白的东西。

我是个很自私的人,我通常很讨厌写技术分享。
我更喜欢写一下与技术无关的东西,更喜欢不写,请尊重劳动成果。
因为我觉得这个世界并没有谁会在意。

Tip:图比文字重要

# 这是一篇关于TCP/HTTP详解的文章

这是我上网找个一个图,请先初略的浏览一下


很多从事5、6年Web工作者都不明白的东西。_第1张图片
TCP 三次握手,四次挥手

# 三次握手

  • 客户端首先向服务器端发送一个请求包。
  • 服务器收到之后,同样给客户端发送一个(请求+确认)包
  • 客户端在收到服务器发送过来的(请求+确认)包,再给服务器一个发送一个确认包

# 四次挥手(通常2、3会在一起)

  • 客户端请求断开
  • 服务器确认,服务器请求断开
  • 客户端确认

首先使用WireShark

很多从事5、6年Web工作者都不明白的东西。_第2张图片
抓到的包

选择好网卡之后,在过滤栏目输入你想要抓取的协议(TCP)

选择的一条记录

我们这里选取了这一条。

表面上我们可以看到这些信息

  • Source:172.16.16.44
  • Destination: 180.97.161.108
  • Length: 66
  • Info: 从本机的49561->80端口
  • 是一个带有ACK(确认)的包
  • Seq: 274
  • Ack(确认号=上一个包的Seq+1): 1346
  • Win(窗口大小):65280
很多从事5、6年Web工作者都不明白的东西。_第3张图片
过滤的包

在过滤窗口输入ip.addr == 172.16.16.44 && tcp过滤掉不需要的,红线框住的就是一个三次握手。

很多从事5、6年Web工作者都不明白的东西。_第4张图片
第一次握手

这个主要是IP(缩写)里面封装的信息(红线框内),从172.16.16.44到202.181.159.92

很多从事5、6年Web工作者都不明白的东西。_第5张图片
TCP协议

Transmission Control Protocol缩写就是TCP,里面封装了TCP端口到端口的协议

很多从事5、6年Web工作者都不明白的东西。_第6张图片
SYN

可以看见flag里面的SYN位是为Set的

很多从事5、6年Web工作者都不明白的东西。_第7张图片
第二次握手

可以看到这是从服务器发回给本机172.16.16.44的一个(SYN+ACK)确认包。
并且ACK = 上一次SEQ + 1

很多从事5、6年Web工作者都不明白的东西。_第8张图片
第三次握手

本机在收到之后,再向服务器发送一个确认包,完成三次握手。
建立TCP链接完成之后,我们的HTTP协议就可以开始工作了,对服务器请求数据。

很多从事5、6年Web工作者都不明白的东西。_第9张图片
HTTP
  • 从172.16.16.44到220.181.159.92
  • 协议:HTTP
  • 长度为1242
  • 提交方式POST
  • 请求的地址: /index.php
  • 版本信息:HTTP/1.1
很多从事5、6年Web工作者都不明白的东西。_第10张图片
HTTP

可以看见里面有一个Hypertext Transfer Protocol,缩写就是HTTP,我们把他打开来看一看。

很多从事5、6年Web工作者都不明白的东西。_第11张图片
HTTP
  • 请求的URI为 /index.php
  • 主机Host:site.browser.360.cn
  • User-agent: 发送请求的客户端的浏览器信息
  • Content-type:内容类型,form-data表单数据,因为这是用POST的方式进行提交的。
  • Cookie:包含浏览器的一些cookie信息
  • 完整URI:http://site.browser.360.cn/index.php

我们再找一个HTTP响应的报文

很多从事5、6年Web工作者都不明白的东西。_第12张图片
HTTP响应
  • 状态号:200
  • 请求版本:http/1.1
  • Server版本:nginx服务器
  • Date:时间
  • Expires:过期时间
  • Content-Type:文档类型
  • Content-Encoding: gzip 使用gzip压缩
  • X-Cache: MISS from cache.51cdn.com 没有从cdn上面下载缓存
  • X-Via: 1.1 lsh213:8110 (Cdn Cache Server V2.0), 1.1 baoji26:10 (Cdn Cache Server V2.0)缓存服务器的一些信息
很多从事5、6年Web工作者都不明白的东西。_第13张图片
四次挥手

这里由于一次性抓到了,就直接说了

  1. HTTP发送了请求之后,服务器发送回来一个ACK确认,生成一个新的ACK确好,并且发送给客户端HTTP响应,完成后。

2.客户端给服务器端发送FIN确认,并且SEQ=上一次的ACK

3.服务器接收到客户端来的FIN,服务器也向客户端发送一个FIN,SEQ=上一ACK,ACK=上一次SEQ+1

4.最终客户端向服务器端发送一个ACK确认断开。

其实下面还有我用 PackTracer,物理流程的TCP/HTTP,更多。看各位的评论再上传了。光是排版这么点我就花了半个小时。

你可能感兴趣的:(很多从事5、6年Web工作者都不明白的东西。)