本文详细介绍了一次Telnet进行HTTP访问的过程,并对该过程进行协议上的分析以及wireshark抓包分析。文章只是自己记录实验过程所作,内部若有问题还请各路大神在评论区加以指正,如有问题也欢迎大家交流讨论。
涉及到的知识点有:
1.Telnet协议
2.三次握手流程
3.TCP协议字段详解
4.HTTP报文分片传输与重组
5.TCP的seq和ack变化过程
6.4次挥手的现实情况--简化版的3次挥手
今天才知道可以利用telnet进行http连接并发送请求,特此记录。
![v2-67190df77cd60799f88a24c6c725b15b_b.png](https://img-blog.csdnimg.cn/img_convert/79ad42126efa3d91414fc70bd3e649af.png)
首先输入telnet 主机地址 端口号,在本例中为telnet http://www.baidu.com 80
看到回显第一行就是正在尝试IP地址,该地址就是百度服务器地址。
进一步剖析内部原理如下:
telnet是一个应用层协议,基于TCP/IP协议栈,在其与服务器沟通时,首先与服务器建立TCP连接,经历3次握手后发送HTTP请求,并通过TCP将回显发送回本地shell。
TCP协议为传输层协议,发送至服务器需要经过网络层和数据链路层。而经过网络层时需要知道目的地址,此时需要先通过DNS协议获取到百度的IP。
所以在我们输入telnet http://www.baidu.com 80这条指令时,网络数据包如下图所示
![v2-187b2fad4b7e170828d5b6ed078ccaaa_b.png](https://img-blog.csdnimg.cn/img_convert/27d0ca5b4e14cdb24352f581d9db8055.png)
这是3次握手的数据包,首先看第一个包。
1.本地IP为115.25.46.77,目的地址为220.181.112.244,协议为TCP
2.长度74(包括以太网长度14,IP长度20,TCP长度40,TCP中加入了5个可选项,有MSS和Timestamps等)
3.源端口为40862,目的端口为80(刚才设置的)
4.seq=0,这是一个SYN请求,发送的seq是一种验证机制,需要对方发送seq+1的ack进行确认
5.窗口大小29200,指发送方请求的发送窗口为29200字节
6.载荷长度0,由于是请求报文,内部不携带数据,所以载荷长度为0
7.最大分片大小1460字节,由于MTU限制每一个以太网帧的最大包长为1500字节,IP和TCP各占