Edg*_*pad 5 network-programming packet-capture packet
对不起,如果这是一个愚蠢的问题(我刚开始学习网络编程),但我一直在寻找关于如何将文件/数据分成数据包的谷歌.我已经到处读到,不知何故文件被分解为数据包,因为它们通过OSI模型并且通过线路发送,其中接收者基本上反向并删除标题.
我的问题是文件/数据究竟是如何分解成数据包的,以及它们如何在另一端重组?
重组的任何事情如何知道数据的最后一个数据包何时到达等?
是否可以重新组装从另一台机器捕获的数据包?如果是这样怎么样?
(如果它意味着我最感兴趣的是这对TCP类型数据包的工作方式)
我也通过WireShark从我的计算机上的应用程序捕获了一些数据包,它们被标记为TCP协议,我想要做的是将它们重新组装回原始数据,但是如何判断哪些数据包属于哪组数据?
任何指向资源的指标都非常感谢,谢谢!
小智 5
我的问题是文件/数据到底是如何分解成数据包的
通过网络发送的内容不一定是文件。在它是文件的情况下,有几种不同的协议可以发送文件,问题的答案取决于协议。
对于 FTP 和 HTTP,文件的全部内容可能作为单个数据流通过 TCP 发送(在 HTTP 的情况下,前面是标头,在 FTP 的情况下,通过连接,前面是原始内容)。
对于 TCP,客户端和服务器根据诸如服务器和客户端之间的各种网络上的最大数据包大小等因素协商确定“最大段大小”,并且文件数据以块的形式顺序发送,其大小为受最大数据包大小以及 IP 和 TCP 标头大小的限制。
对于 SMB、NFS 和 AFP 等远程文件访问协议,通过网络传输的是“文件读取”和“文件写入”请求;对“文件读取”请求的回复包括一些回复标头,如果读取成功,还包括读取请求请求的文件数据块,“文件写入”请求包括一些请求标头和文件数据块正在被写入。这些不能保证是按顺序排列的整个文件,但如果读取或写入文件的程序按顺序读取或写入整个文件,则整个文件的数据将可用。数据包大小将取决于读取回复/写入请求标头的大小以及所使用的读取或写入大小;根据 TCP“最大分段大小”以及 IP 和 TCP 标头的大小,这些数据包可能会被分成多个 TCP 分段。
我的问题是文件/数据到底是如何分解成数据包的
对于 FTP,当传输数据的 TCP 连接一侧关闭时,数据接收方知道不再有数据。
对于 HTTP,当传输数据的 TCP 连接一侧关闭时,数据的接收者知道不再有数据,或者,如果连接是“持久的”(即,它保持开放状态以接受更多请求并且当在数据之前发送的“Content-Size:”标头指定的数据量已被传输时(或其他类似机制,例如用于分块编码的“最后一个块”指示)。
对于文件访问协议,没有真正的“我们已到达数据末尾”指示;对于 SMB、AFP 和 NFSv4,最接近的近似是“文件关闭”操作。
是否可以重新组装从另一台机器捕获的数据包?如果是的话怎么办?
这取决于协议,但是,对于 HTTP 和 SMB,如果捕获已读入 Wireshark(并且所有文件数据都在捕获中!),您可以使用“导出对象”菜单,并且对于某些协议,您也许还可以使用tcpflow。
| 归档时间: |
|
| 查看次数: |
5161 次 |
| 最近记录: |