gpt4 book ai didi

network-programming - 数据是如何分包的?

转载 作者:行者123 更新时间:2023-12-04 08:03:45 24 4
gpt4 key购买 nike

嗨对不起,如果这是一个愚蠢的问题(我刚开始学习网络编程),但我一直在谷歌上寻找文件/数据如何划分为数据包。我到处读到,文件以某种方式分解为数据包,在它们通过 OSI 模型时应用了页眉/页脚,并通过接收方基本上相反并删除标题的线路发送。

我的问题是文件/数据究竟是如何分解成数据包的,以及它们是如何在另一端重新组装的?

重新组装的任何事情如何知道最后一个数据包何时到达等等?

是否可以重新组装从另一台机器捕获的数据包?如果是这样怎么办?

(另外,如果它意味着什么,我最感兴趣的是它如何处理 TCP 类型的数据包)

我还通过WireShark从计算机上的应用程序中捕获了一些数据包,它们被标记为TCP协议(protocol),我想做的是将它们重新组合成原始数据,但是你怎么知道哪些数据包属于哪一组数据?

非常感谢任何指向资源的指针,谢谢!

最佳答案

My question is how exactly are files/data broken up into packets



通过网络发送的不一定是文件。在它是文件的情况下,有几种不同的协议(protocol)可以发送文件,问题的答案取决于协议(protocol)。

对于 FTP 和 HTTP,文件的全部内容可能作为单个数据流通过 TCP 发送(在 HTTP 的情况下,在 header 之前,在 FTP 的情况下,只是原始的,通过连接)。

对于 TCP,有一个由客户端和服务器协商的“最大段大小”,基于服务器和客户端之间的各种网络上的最大数据包大小等因素,并且文件数据以大小为的 block 顺序发送受最大数据包大小以及 IP 和 TCP header 大小的限制。

对于 SMB、NFS 和 AFP 等远程文件访问协议(protocol),通过网络传输的是“文件读取”和“文件写入”请求;对“文件读取”请求的回复包括一些回复头,如果读取成功,则读取请求请求的文件数据 block ,“文件写入”请求包括一些请求头和文件数据 block 被写。这些不保证是整个文件,按顺序,但是如果读取或写入文件的程序正在按顺序读取或写入整个文件,则整个文件的数据将可用。数据包大小将取决于读取回复/写入请求 header 的大小以及正在使用的读取或写入大小;根据 TCP“最大段大小”以及 IP 和 TCP header 的大小,这些数据包可能会被分成多个 TCP 段。

My question is how exactly are files/data broken up into packets



对于 FTP,当传输数据的 TCP 连接端关闭时,数据的接收者知道没有更多数据了。

对于 HTTP,当传输数据的 TCP 连接端关闭时,或者如果连接是“持久的”(即,对于更多请求和回复),当“Content-Size:” header 指定的数据量在数据之前发送时已经传输(或其他类似机制,例如 chunked encoding 的“最后一个 block ”指示)。

对于文件访问协议(protocol),没有真正的“我们处于数据末尾”的指示;对于 SMB、AFP 和 NFSv4,最接近的近似值是“文件关闭”操作。

Is it possible to reassemble packets captured from another machine? And if so how?



这取决于协议(protocol),但是,对于 HTTP 和 SMB,如果捕获已被读入 Wireshark(并且所有文件数据都在捕获中!),您可以使用“导出对象”菜单,并且对于某些协议(protocol),您也许还可以使用 tcpflow .

关于network-programming - 数据是如何分包的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18345161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com