能力值:
( LV2,RANK:10 )
|
-
-
2 楼
调用一次WS2_32.recv(),是不是对应一个封包,还是多个封包?
|
能力值:
(RANK: )
|
-
-
3 楼
recv返回的内容和封包不是相互对应的.
1. 封包里面除了会话内容外还有协议内容, 有的封包甚至只是一个回应而不带任何数据.
2. 由于路由问题, 封包到达目的系统的顺序和离开源系统的顺序并不一定相同, 但系统会帮你排好队.
3. 对每一个连接, 系统有对应的一个缓冲区负责接收, 这个缓冲区的大小是用户可指定的.
4. 系统收到封包后会剥离协议头, 只将会话内容存入接收缓冲区, 然后通知用户收到数据(Select会返回真)
5. 调用一次recv会把当前接收缓冲区里的内容传送到你给出的Buffer里, 数据的多少由你给的大小和缓冲区中实际的数据大小来决定.
6. 以太网内, 一个TCP/IP的封包有效负荷只有1K多一点(具体数忘记了, 懒得算)
因此, 一次recv的结果可能是N个封包的组合. 特别是HTTP这样一次收发nK的数据的会话.
至少为什么封包里看不到, recv能看到, 有三种可能:
1. 你没截获到. 因为收到封包后系统才会通知应用程序有数据到, 这时应用程序才会调recv, 这有个时间差.
2. 你没看到. ^Q^
3. 你的会话是通过VPN或是PPTP之类加密通道传输的, 这样封包里是看不到的(因为已经加密了), recv可以看到(系统帮你还原了).
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
使用了加密通道,是不是可以从IP的协议头中看出?
|
能力值:
(RANK: )
|
-
-
5 楼
先说明一下, VPN本来只是指使用IPSec协议的, 现在使用PPTP/L2TP等等协议的都叫VPN了---只要能加密认证就可以叫VPN....
IPSec使用UDP 4500端口进行会话;
PPTP使用TCP 1723端口做为控制会话, 实际的数据传输会话协议是GRE(IP协议号为47).
L2TP使用UDP 1701端口, 通常会与IPSec共用.
|
|
|