叶
叶不归
Unregistered / Unconfirmed
GUEST, unregistred user!
当客户端向服务器发送数据包时,服务器是如何判断数据包的发送者是合法的呢?
我以sql explorer作为客户端,oracle作为服务器来阐述这个问题:
我在sql explorer中输入select * from aaatbl,然后发送,做了几次相同的操作,
发现:1.每次发送的IP头中,某几个字节的内容不同,
2.每次发送的TCP头中,某几个字节的内容不同,
3.每次发送的数据中,所有的字节都相同。
很显然,服务器是根据IP头或TCP头中的某个标识,判断数据包的发送者是合法的,
因此服务器返回了数据。当我自己构造完全相同的IP头和TCP头和数据,向服务器发送
报文时,发现服务器并没有返回数据,显然,IP头或TCP头中的这个标识具有唯一性,
只能是第一次发送有效,或者客户端和服务器端共同维护着一个序列,以确定下一
个正确的标识(是这样吗??)。
发送的报文如下:
a b c d e f g h i j
IP头 :45 00 00 28 DF 69 40 00 34 06 68 9D CA 6C 27 83 CA 6C 27 01
A B C D EF G H I
TCP头:46 44 0C 38 E5 39 36 B2 D9 10 36 5E 50 10 83 25 B0 0E 00 00
(说明:英文字母分别对应下面的数据)
IP头中,不相同的数据是 d:16位标识,
e:3位标志位+13位偏移量,
h:16位IP首部校验和
TCP头中,不相同的数据是D:32位确认号
EF:4位首部长度+6位保留字
G:16位窗口大小
H:16位校验和
问题就是这样了,不知道说清楚了没有,有没有大虾肯指点一下,感激不尽。
我以sql explorer作为客户端,oracle作为服务器来阐述这个问题:
我在sql explorer中输入select * from aaatbl,然后发送,做了几次相同的操作,
发现:1.每次发送的IP头中,某几个字节的内容不同,
2.每次发送的TCP头中,某几个字节的内容不同,
3.每次发送的数据中,所有的字节都相同。
很显然,服务器是根据IP头或TCP头中的某个标识,判断数据包的发送者是合法的,
因此服务器返回了数据。当我自己构造完全相同的IP头和TCP头和数据,向服务器发送
报文时,发现服务器并没有返回数据,显然,IP头或TCP头中的这个标识具有唯一性,
只能是第一次发送有效,或者客户端和服务器端共同维护着一个序列,以确定下一
个正确的标识(是这样吗??)。
发送的报文如下:
a b c d e f g h i j
IP头 :45 00 00 28 DF 69 40 00 34 06 68 9D CA 6C 27 83 CA 6C 27 01
A B C D EF G H I
TCP头:46 44 0C 38 E5 39 36 B2 D9 10 36 5E 50 10 83 25 B0 0E 00 00
(说明:英文字母分别对应下面的数据)
IP头中,不相同的数据是 d:16位标识,
e:3位标志位+13位偏移量,
h:16位IP首部校验和
TCP头中,不相同的数据是D:32位确认号
EF:4位首部长度+6位保留字
G:16位窗口大小
H:16位校验和
问题就是这样了,不知道说清楚了没有,有没有大虾肯指点一下,感激不尽。