网络协议抓包验证实验

一、网络协议

(一)TCP

TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。

1.TCP的特点

  • TCP是面向连接的运输层协议
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
  • TCP提供可靠交付的服务
  • TCP提供全双工通信。数据在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。
  • 面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅是一连串的无结构的字节流。

2.TCP头格式

  • Source Port(源端口号):数据发起者的端口号,16bit。
  • Destination Port(目的端口号):数据接收者的端口号,16bit。
  • Sequence Number(顺序号码,Seq):用于在数据通信中解决网络包乱序(reordering)问题,以保证应用层接收到的数据不会因为网络上的传输问题而乱序(TCP会用这个顺序号码来拼接数据),32bit。
  • Acknowledgment Number(确认号码,ack):是数据接收方期望收到发送方在下一个报文段的顺序号码(Seq),因此确认号码应当是上次已成功收到顺序号码(Seq)加1,32bit。
  • Offset(TCP报文头长度):用于存储报文头中有多少个32bit(上图的一行),存储长度为4bit,最大可表示(23+22+2^1+1)32bit=60bytes的报文头。最小取值5,532bit=20bytes。
  • Reserved(保留):6bit, 均为0
  • TCP Flags(TCP标志位)每个长度均为1bit
    (1)CWR:压缩,TCP Flags值0x80。
    (2)ECE:拥塞,0x40。
    (3)URG:紧急,0x20。当URG=1时,表示报文段中有紧急数据,应尽快传送。
    (4)ACK:确认,0x10。当ACK = 1时,代表这是一个确认的TCP包,取值0则不是确认包。
    (5)PSH:推送,0x08。当发送端PSH=1时,接收端尽快的交付给应用进程。
    (6)RST:复位,0x04。当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。
    (7)SYN:同步,0x02。在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
    (8)FIN:终止,0x01。当FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
  • 窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。
  • 检验和:该字段检验的范围包括头部和数据这两部分。由发端计算和存储,并由收端进行验证。
  • 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。
  • TCP选项:长度可变,最长可达40字节

3.TCP协议中的三次握手和四次挥手

  • 建立连接需要三次握手
    第一次握手:客户端向服务端发送连接请求包,标志位SYN(同步序号)置为1,顺序号码为X=0。
    第二次握手:服务端收到客户端发过来报文,由SYN=1知道客户端要求建立联机,则为这次连接分配资源。并向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始顺序号码Y=0,将确认序号(ack)设置为上一次客户端发送过来的顺序号(Seq)加1,即X+1 = 0+1=1。
    第三次握手:客户端收到服务端发来的包后检查确认号码(ack)是否正确,即第一次发送的Seq加1(X+1=1)。以及标志位ACK是否为1。若正确,服务端再次发送确认包,ACK标志位为1,SYN标志位为0。确认号码(ack)=Y+1=0+1=1,发送顺序号码(Seq)为X+1=1。Server收到后确认号码值与ACK=1则连接建立成功,可以传送数据了。
  • 断开连接需要四次挥手
    中断连接端可以是Client端,也可以是Server端。只要将下面两角色互换即可。
    第一次挥手:客户端给服务端发送FIN报文,用来关闭客户端到服务端的数据传送。将标志位FIN和ACK置为1,顺序号码为X=1,确认号码为Z=1。意思是说”我Client端没有数据要发给你了,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK过来。”
    第二次挥手:服务端收到FIN后,发回一个ACK(标志位ACK=1),确认号码为收到的顺序号码加1,即X=X+1=2。顺序号码为收到的确认号码=Z。意思是说“你的FIN请求我收到了,但是我还没准备好,请继续你等我的消息" 这个时候客户端就进入FIN_WAIT状态,继续等待服务端的FIN报文。
    第三次挥手:当服务端确定数据已发送完成,则向客户端发送FIN报文,关闭与客户端的连接。标志位FIN和ACK置为1,顺序号码为Y=1,确认号码为X=2。意思是告诉Client端“好了,我这边数据发完了,准备好关闭连接了。”
    第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认号码为收到的顺序号码加1,即Y+1=2。顺序号码为收到的确认号码X=2。意思是“我Client端知道可以关闭连接了,但是我还是不相信网络,怕 Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。“(在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。)

为什么关闭的时候却是四次挥(握)手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

(二)HTTP

HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

HTTP主要特点:

  • 支持客户/服务器模式。
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。为了解决这个问题, Web程序引入了Cookie机制来维护状态。

1.请求报文结构
报文中的数据都使用ASCII编码,各个字段的长度是不确定的(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
在这里插入图片描述
2.请求方法
在这里插入图片描述

关于HTTP请求GET和POST的区别

  • 提交形式
    GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
  • 传输数据的大小
    HTTP协议本身没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有:
    GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。因此对于GET提交时,传输数据就会受到URL长度的限制。
    POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
  • 安全性
    POST的安全性要比GET的安全性高,具有真正的Security的含义。而且通过GET提交数据,用户名和密码将明文出现在URL上,因为登录页面有可能被浏览器缓存,其他用户浏览历史纪录就可以拿到账号和密码了。

3.响应报文结构
在这里插入图片描述
4.响应状态码

  • 状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
    1xx:指示信息–表示请求已接收,继续处理。
    2xx:成功–表示请求已被成功接收、理解、接受。
    3xx:重定向–要完成请求必须进行更进一步的操作。
    4xx:客户端错误–请求有语法错误或请求无法实现。
    5xx:服务器端错误–服务器未能实现合法的请求。
  • 常用状态码
    200 OK:成功返回状态,对应,GET,PUT,PATCH,DELETE。
    201 created - 成功创建。
    302 Found:重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
    304 Not Modified:代表上次的文档已经被缓存了, 还可以继续使用。
    400 bad request - 请求格式错误。
    401 unauthorized - 未授权。
    403 forbidden - 鉴权成功,但是该用户没有权限。
    404 not found - 请求的资源不存在。
    405 method not allowed - 该http方法不被允许。
    410 gone - 这个url对应的资源现在不可用。
    415 unsupported media type - 请求类型错误。
    422 unprocessable entity - 校验错误时用。
    429 too many request - 请求过多。
    500 Internal Server Error:服务器发生了不可预期的错误。
    503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

二、wireshark抓包软件

Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样,Wireshark也使用pcap network library来进行封包捕捉。可破解局域网内QQ、邮箱、msn、账号等的密码!!
wireshark的原名是Ethereal,新名字是2006年起用的。当时Ethereal的主要开发者决定离开他原来供职的公司,并继续开发这个软件。但由于Ethereal这个名称的使用权已经被原来那个公司注册,Wireshark这个新名字也就应运而生了。

Wireshark可以做什么

  • 网络管理员使用Wireshark检测网络问题
  • 网安工程师用Wireshark检查信息安全相关问题
  • 开发者使用Wireshark为新的通信协议调试
  • 普通用户使用Wireshark学习网络协议相关知识

(一)下载

Wireshark:官网下载地址
在这里插入图片描述
自行选择系统、版本下载
在这里插入图片描述

(二)安装

双击打开下载好的安装包文件
在这里插入图片描述
Next
在这里插入图片描述
I Agree
在这里插入图片描述
Next
在这里插入图片描述
Next
在这里插入图片描述
选择安装路径,Next
在这里插入图片描述
Next
在这里插入图片描述
Install
在这里插入图片描述
等待
在这里插入图片描述
跳出这个界面,点击I Agree
在这里插入图片描述
Install
在这里插入图片描述
Finish
在这里插入图片描述
安装已完成,Next
在这里插入图片描述
Finish
在这里插入图片描述

三、抓取数据包,验证协议

打开wireshark
在这里插入图片描述
查看自己的网络状态
在这里插入图片描述
在这里插入图片描述
选择网路
在这里插入图片描述
点击开始
在这里插入图片描述
点击统计,选择流量图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、总结

抓包实际上是分析网络协议的一种过程,尽管繁琐的细节劳动都让抓包工具做了,但我们还是需要了解下基础的网络协议,好帮助我们更好的分析问题。
HTTPS是基于HTTP协议的一种改进,在TCP之上的会话层增加安全处理。对于应用层来说,HTTPS和HTTP没有什么不同,也就是说,HTTPS是保证网络传输的安全性,对业务数据无侵入。

参考文献

网络协议抓包验证实践
基础笔记(三):网络协议之Tcp、Http
Wireshark抓包使用指南
Wireshark抓包,带你快速入门

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WiresharkTelnet实验结果分析如下: 在进行Telnet的实验中,我们使用了Wireshark工具进行了分析。Telnet是一种用于在计算机之间建立远程终端连接的协议。通过使用Wireshark取了Telnet会话期间的所有网络数据,并对实验结果进行了分析。 首先,我们发现Telnet会话在传输过程中使用明文传输,即所有数据中的内容都是以明文形式显示的。这意味着在Telnet通信过程中,用户输入的用户名、密码等敏感信息存在被窃取的风险。对于安全性要求较高的应用来说,使用加密的远程终端连接协议如SSH会更合适。 其次,我们注意到Telnet会话期间存在多个数据的收发。通过分析这些数据,我们可以看到Telnet会话在建立连接时需要进行三次握手,确认连接建立后,双方可以通过发送各种命令和数据来进行通信。 在数据中,我们还可以看到Telnet会话中的各种命令和回应。例如,当用户发送登录请求时,可以观察到服务器返回一个带有登录提示符的数据,然后用户再次发送用户名和密码的数据进行身份验证。在认证成功之后,用户可以执行各种命令,并观察到服务器对这些命令的回应。 此外,通过分析Telnet数据的时间戳信息,我们可以计算出会话的延迟时间。延迟时间是指从发送一个命令到接收到相应的回应之间所需的时间。这对于评估网络性能和响应时间非常有用。 总结来说,通过使用Wireshark工具对Telnet实验进行分析,可以了解到Telnet会话的建立过程、明文传输的安全风险、命令和回应的交互过程以及会话的延迟时间等方面的信息。这些分析结果对于理解Telnet协议的工作原理和网络性能的评估非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值