WireShark抓包学习记录
访问4399并进行抓包

感到诧异 怎么HTTP直接就开始传输数据了 说好的基于TCP呢 还有三次握手又在哪里?
然后修改过滤条件为 tcp and ip.addr == 113.96.147.71


可以看到在HTTP请求开始之前(即图中➡处)本地已经和请求网站之间已经进行了三次握手,HTTP请求结束后(即图中⬅处)本地便跟请求网站进行了四次挥手。
问题又来了 为什么四次挥手中只有三个报文段?先看一下四次挥手的定义

主要看FIN(结束标识符)和ACK(确定标识符)
前三次报文段都能对应上 独独少了第四次的报文段 对应关系如下面这个表格所示
| 方向 | 标识符 | 代表意思 | |
| 第一次报文段 | 网站——》本地 | FIN=1 | 网站请求断开链接 |
| 第二次报文段 | 本地——》网站 |
ACK=1 ACKNumber=SEQ+FIN=25(SEQ是多少无所谓) |
本地收到了网站要断开链接的请求,并告诉网站“我知道啦,我要结束链接啦” |
| 第三次报文段 | 本地——》网站 | FIN=1 | 本地发送结束标识符给网站,并断开了链接 |
| 第四次报文段 | 网站——》本地 | ACK=1 |
网站告诉本地“我知道你要结束连接了”,但是这时候本地已经断开连接了 所以本地并没有接受到第四次报文段 |
ps:某种情况下为了效率第二次报文段和第三次报文段可能会合成一个报文段
第二个问题
HTTP协议 HTTP请求信息 HTTP连接(请求) 和 TCP 协议 TCP报文段 TCP连接 是什么,有什么区别
按我的理解 HTTP协议和TCP协议像是两个表的设计,HTTP请求信息和TCP报文段则是表数据,而在TCP协议中又设计了一个“data字段”用于存放HTTP请求信息
TCP连接就是“两台电脑”之间传送TCP报文段,从三次握手到四次挥手的整个过程。HTTP连接也是“两台电脑”之间传送TCP报文段,只不过这些报文段传送时间在三握和四挥手之间(也就是TCP连接建立起来后),而且这些TCP报文段中的“data”字段中带有HTTP请求信息。(至于报文段是怎么传输的,那是路由的问题)
感觉没有把我想说的东西明白地表达出来,如果以后看这篇文章不理解,那我就再去抓一次包看看。
补充:http请求(连接)是基于tcp连接的,tcp连接有三次握手的概念,所以http通信的时候会有三次握手
第三个问题
socket是什么?和HTTP请求的区别是什么?
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信
socket是基于tcp/ip协议封装的一套实现tcp连接的接口,或者说是工具。
在一般的android开发中,调用的各种实现所谓的http连接的api(包括java自带的httpurlconnection)其底层基本上都是调用的jdk的socket接口。
我对socket的理解还不深,上面答案是复制的

最后一个问题 什么是websocket?
可能是和本文最无关的一个问题,是我在看小程序聊天功能的遇到的,也是我再次学习计算机网络和写这篇文章的原因(之前没学明白),来自wx.getwebsocket
WebSocket是一种协议,与HTTP协议一样位于应用层
详细展开另开一贴把。。。

浙公网安备 33010602011771号