TCP协议简单介绍

TCP协议简单介绍

1.TCP的应用场景

image-20250507201834928

image-20250507123724818

TCP为应用层协议提供可靠传输服务,发送端按顺序发送数据,接收端按顺序接收数据,其间若发生丢包、乱序等情况,TCP须负责重传和排序。

TCP的应用场景:

(1)应用程序传输的文件需要分段传输,比如在浏览器访问网页或者QQ传输文件时,在传输层均会选用TCP进行分段传输。

(2)客户端程序和服务端程序需要多次交互才能实现应用程序的功能,比如接收电子邮件使用的POP3和发送电子邮件使用的SMTP,传输文件使用的FTP,在传输层使用的都是TCP。

2.TCP 连接建立

image-20250507202041391

“三次握手”

客户端向服务端发起通信,客户端的TCP模块与服务端的TCP模块之间将通过“三次握手”来建立TCP会话。

所谓三次握手,是指在TCP会话的建立过程中总共交换3个TCP数据包。

3.TCP连接释放

image-20250507202225503

“四次握手”

为了确认最后发送的数据接收方正确收到,数据发送结束后,还需要给接收端发送释放连接的请求,得到接收方的确认报文后,才能释放连接。

可以看到客户端和服务端释放连接,需要四个报文,又称为四次握手。

4.抓包分析TCP协议工作过程

4.1.实验一、FTP的抓包实验

打开服务管理器

image-20250507140416730

打开IIS服务

image-20250507140434078

添加FTP站点

image-20250507140455418

image-20250507140553254

image-20250507140614979

image-20250507140633496

关闭防火墙

打开命令行,关闭防火墙
C:\Users\Administrator>wf.msc
image-20250507140953617

image-20250507142641992

客户端操作,输入账号密码

image-20250507142602855

image-20250507142747511

4.1.1.没有加密的FTP可以找到账号密码

从抓包中找到 USER 和 PASSWORD

image-20250507143319821

image-20250507143558841

image-20250507143610437

image-20250507143842777

红色字体是客户端发出的指令

image-20250507143913770

可以找到上传的文件

image-20250507144206343

还原报文中文件的文字

image-20250507144459204

image-20250507144618004

image-20250507144721542

4.1.2.FTP添加使用命令规则
image-20250507145253501

image-20250507145323049

image-20250507145401948

image-20250507145556404

4.2.实验二、抓包邮箱发送过程查看TCP

image-20250507232618296

image-20250507232733273

image-20250507232905030

image-20250507232933172

image-20250507233020286

image-20250507233059444

image-20250507233401933

image-20250507233614106

image-20250507233802356

image-20250507233830155

image-20250507234013482

image-20250507234353313

确认本机邮件服务器的IP地址

image-20250507234821408

打开WIN7的OUTLOOK,需要提前安装好OFFICE

image-20250508093536694

image-20250508093558358

image-20250508093908940

完成后,打开ETHEREAL

image-20250508094847283

打开OUTLOOK,给自己发一封邮件

image-20250508093339538

收到邮件之后”STOP”ETHEREAL,接着查看可以查看TCP的”三次握手”,”四次挥手”

image-20250508094652366

image-20250508094727537

比较奇怪的是,没有出现第一次的FIN包,根据DEEPSEEK的回答是这样

结合图片日志的分析与解释:

根据你提供的图片信息,图中的TCP连接终止过程看似缺少了第一次挥手的FIN包,但实际上可能是由于FIN与ACK合并发送或被动关闭方主动触发关闭导致流程简化。以下是具体分析:


 2. 可能的原因:
   - FIN与ACK合并发送(隐藏的第一次挥手):
     - 正常流程中,主动关闭方(客户端)应发送`FIN`,被动方(服务器)回复`ACK`。
     - 但在你的日志中,客户端在发送`QUIT`后直接发送了`FIN,ACK`包(步骤3)。这可能意味着:
       - FIN包被合并到之前的ACK中(例如,在SMTP传输过程中,服务器已提前发送了ACK,但日志未明确展示)。
       - 客户端主动关闭连接,但FIN包被合并到`QUIT`命令触发的TCP层操作中,导致看似缺少第一次FIN。

   - 被动关闭方(服务器)直接终止:
     - 服务器在回复`221`后,可能直接进入`LAST_ACK`状态并发送`FIN`(但日志中未显示),客户端回复`ACK`(步骤4)。
     - 若服务器未发送`FIN`,可能是异常终止(如进程崩溃),但图中无`RST`包,因此可能性较低。


 4. 验证日志中的关键细节:
   - 检查`FIN`包的来源:
     - 客户端发送的`FIN,ACK`(步骤3)是否为第一次挥手?
       - 若是,则缺少服务器的`ACK`(步骤4应为第二次挥手)。
       - 但根据日志,步骤4的`ACK`是对客户端`FIN`的确认,服务器应进入`CLOSE_WAIT`,但后续未发送`FIN`,导致连接未完全关闭。
     - 结论:可能服务器未正常关闭,或日志不完整。

   - 观察序列号(Seq)和确认号(Ack):
     - 客户端`FIN,ACK`的`Seq=2842`与服务器`ACK`的`Ack=2843`匹配,说明服务器确认了客户端的`FIN`。
     - 若服务器未发送自己的`FIN`,则连接处于半关闭状态(客户端在`FIN_WAIT_2`,服务器在`CLOSE_WAIT`),需依赖超时机制终止。

总结:图中现象可能是TCP协议灵活性(合并包)或日志截取不完整导致的误解,实际连接终止过程需结合完整交互分析。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注