======= 关于IP头和TCP头的一点疑惑,求解。========= (200分)

  • 主题发起人 主题发起人 叶不归
  • 开始时间 开始时间

叶不归

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位校验和

问题就是这样了,不知道说清楚了没有,有没有大虾肯指点一下,感激不尽。
 
楼上两位,我可没有得罪你们啊?为什么要踢我???
 
服务器的认证不在网络底层,和TCP/IP没有关系.
 
晕,你想干什么?

要不是想做什么坏事,是不用这么研究的
再说要研究这个,可以自己写两个程序呀,也用不着用oracle和sql exploer呀

要做防火墙之类?
 
:tianhf,如果说服务器不是从TCP/IP头中认证合法的数据包发送者,那么请问为什么我
发送相同的包时,服务器不返回数据给我呢??你能解释一下吗?

:wisenow,oracle和sql explorer现成的嘛,所以就拿来用了,我不想做什么坏事,只是
在做一个网卡数据监视程序并带发送包功能,在测试发送包功能时发现:向服务
器发送包时,有如题的现象,因此有此一问。

有答案吗?
 
哦?不太清楚

看看是不是crc校验的问题
只是提示哦
 
一个Session, 客户端与Server是长连接, Session建立时已经进行了认证,
连接没有断开, 就不需要认证, 连接断了, Session就结束了
 
接收端会对收到的数据进行校验的,看一下你的校验和是不是正确的。或者数据或其长度是不是正确。
 
:jackchin,我说的不是应用层的认证,显然是网络层和运输层的认证,请看清题目。
:xtjf,接收端当然会对数据进行校验,但并不是我的校验和问题,因为“我自己
构造完全相同的IP头和TCP头和数据”,意味着任何一个bit和已成功发送的报文的内容
都是相同的,请看清题目。

看来我有必要把问题说得更简单些:
TCP段的序列号、确认号根据什么生成?6位的标志位数据根据什么生成?
最后,16位的窗口大小根据什么生成?
 
你把问题想得复杂了,服务器不是靠物理IP头来识别合法用户的,服务器是靠查找表来确定
合法用户,比如:在服务器端仅接受合法范围内的TCP连接,其他拒绝,
TCP序列号是顺序递增的,确认号是接收端返回的,16为窗口是双方协商确定的
 
收邮件,发给你了,呵呵

都是应用惹的祸
 
接受答案了.
 
后退
顶部