您好,抱歉,如果这是一个愚蠢的问题(我刚刚开始学习网络编程),但我一直在Google各处搜索有关文件/数据如何划分为数据包的信息。我到处都读到,通过OSI模型,文件以某种方式分解为数据包会应用标头/页脚,并通过电线发送,接收方基本上会反向操作并删除标头。
我的问题是文件/数据如何精确地分解为数据包,以及如何在另一端重新组装它们?
重新组装的内容如何知道最后一个数据包何时到达等?
是否可以重组从另一台计算机捕获的数据包?如果是这样怎么办?
(如果还有什么意思,我最感兴趣的是如何处理TCP类型的数据包)
我还通过WireShark从计算机上的应用程序捕获了一些数据包,它们被标记为TCP协议,我要做的是将它们重新组装回原始数据,但是如何分辨哪些数据包属于哪组数据?
任何指向资源的指针都非常感谢,谢谢!
我的问题是文件/数据究竟如何分解为数据包
通过网络发送的内容不一定是文件。在这情况下是一个文件,也有可能将文件发送几种不同的协议,而问题的答案取决于协议。
对于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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句