计算机世界的字节流的思维
admin 提交于 星期三, 09/07/2016 - 22:30
在计算机的世界里, 是由数据流组成的 文件在文件系统存储的格式是字节流 网络传输的也是字节流 ...
然而,现实世界里面, 对信息的组织应该是结构化的。
这就需要对信息流进行解析,以得到结构化的数据
这就需要对结构化的信息进行编码。
网络上的数据传输 文件流 - > tcp包 / udp包 - > ip包 -> 传输帧 对数据进行一层层的拆分, 每一层由相应的机制保证数据按正确的拆分与重组。 上一层负责折分,排序, 下一层的数据包保证数据包的完整性, 就是说下一层虽然可以对数据再拆分,但到另一边时,必须重新好,形成一个完整的包, 那边另一边的上一层可以按拆分的顺序重成组成一个完整的数据文件。
一些规则:
1. 同一层里面上层拆分出来的包,有一个相同的ID. 因为同一层里面可能会有其它的不同上一层拆分的数据包。 2. 同一层里面上层拆分出来的包, 有记录顺序的符号,以便全部数据包收到后进行重组。 3. 数据包里面应该有完整性较验符, 上一层的数据包头部。
通过这样的一个机制,大文件数据包打散成小文件后, 形成适合网络传输的小数据包,到达目的端后,再组装,达到数据传输的目的。
TCP的可靠性保证
* 1. 连线的可靠性保证,三次握手,四次挥手 * 2. 传输数据回复确认
如果发送一个数据包确认一个,效率必然很低下。 虽然有两大优化算法
- 1. 捎带ACK. 200ms时间窗口 - 2. Nagle算法(一次尽量多的发数据) - 3. 滑动窗口
现实世界漏洞的查找理论基础, 输入都是字节流,需对字节流解析成结构化的数据,这里面是很复杂,而且是充满错误。 基本流程是 追踪输入的数据流,逆向思维的数据流入,变成数据流变指令代码。如C里面取得EIP.