CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

问两个有关socket的问题~~~

楼主kekeke(再吵,我踢你下床~~)2001-08-09 09:44:42 在 VC/MFC / 基础类 提问

我在看《windows网络编程技术》的时候有个疑问,从105页和340、341页来看,这两个是不是一样的:s=socket(AF_INET,SOCK_DGRAM,0)和s=socket(AF_INET,SOCK_RAW,IPPROTO_UDP);?????  
   
  还有一个就是351页倒数第二段上的有关“Tracert的设计原理”的问题:TTL的变化是不是这样的,1---0-----1------0------1.....这样交替变化的,开始的时候TTL=1,遇到一个路由器的时候变成0,发送ICMP超时数据包之后立即变为1,又遇到路由器的时候又变成0,再发送ICMP数据包,TTL又变为1....那这个TTL又怎么能“一旦TTL的值递增得足够大”呢???  
   
   
  不解~~~~~有人知道吗?谢谢~~~~~ 问题点数:20、回复次数:11Top

1 楼kekeke(再吵,我踢你下床~~)回复于 2001-08-09 11:13:51 得分 0

怎么没人呢?Top

2 楼oo(为了名副其实,努力学习oo技术ing)回复于 2001-08-09 11:18:17 得分 6

第二个问题:  
  没经过一个路由器,它都会把TTL的值减一,如果TTL的值为0,而且本路由器不是最终目的地,则返回ICMP超时包。  
  tracert第一次向目的地发一个TTL为1的包,这样第一个路由器把TTL减一后为0,所以返回ICMP超时包,这样,tracert就知道了第一个路由器的地址;  
  然后发一个TTL为2的包,根据返回的ICMP报文知道第二个路由器的地址;  
  直到报文发到目的地,收到正确的应答。  
  这样就知道了到目的地所经过的路由器的地址了。Top

3 楼kekeke(再吵,我踢你下床~~)回复于 2001-08-09 11:22:03 得分 0

你的意思是说:源主机收到ICMP超时包后,再发一个TTL比上一个TTL大1的数据包出去??Top

4 楼kekeke(再吵,我踢你下床~~)回复于 2001-08-09 11:26:28 得分 0

根据224页倒数第二段的有关TTL的分析以及在360页第6行程序,应该说这个TTL一开始不是1的吧?Top

5 楼kekeke(再吵,我踢你下床~~)回复于 2001-08-09 19:35:12 得分 0

??Top

6 楼111222(www.111222.cn)回复于 2001-08-09 19:49:41 得分 0

我也好想看这本书哎,可不可以送给我啊?Top

7 楼111222(www.111222.cn)回复于 2001-08-09 19:51:34 得分 1

IPPROTO_UDP这些都是define在winsock2.h里面的,你到里面看看啊,其实就是intTop

8 楼tigerwood12345(tigerwood12345)回复于 2001-08-09 20:18:09 得分 1

有没有电子版啊,我也想要.Top

9 楼azuo_lee(宿醉)回复于 2001-08-09 21:04:58 得分 12

1。两种定义的socket是不同的。第一种定义时定义了一个DGRAM的socket,这种socket遵守UDP协议,但是协议实现的细节不用你来关心,内核帮你完成这部分工作,包括发送时添加UDP头、添加IP头,接收时分离IP头、分离UDP头。也就是说,这种socket你唯一能控制的是它的数据——它将“严格”遵守UDP协议。而第二种socket截然不同。它是原始套接字,它接收到的数据中将包括IP头与UDP头,你必须自己解析,发送时你必须自己构造UDP头(甚至自己构造IP头)。内核不会对接收到和将要发送的数据(事实上,发送时的IP头有可能被更改)做任何处理。至于第二个参数PROTO_UDP只是给内核一个通知,告诉它我只关心IP头中协议为PROTO_UDP的数据报,其他的数据报不要给我。你在发送时即使发送一个TCP的报头也无所谓。所以PROTO_UDP只是一个接收类型“通知”,而实际发送的数据不一定就要“严格”遵守UDP协议。  
   
  2。TTL就是Time   To   Live,其实就表明了报文“存活”的时间。报文每经过一个路由器,路由器就会将TTL值减一,如果TTL值为0,路由器就将该报丢弃,并给发送端回送一个TIME   EXCEEDED的ICMP报文(不过有些路由器只是丢弃该报,却并不会送ICMP,这种路由器TRACERT无法跟踪)。因此,TRACERT首先发送一个TTL为1的报文,于是会得到第一个路由器会送的ICMP,TRACERT再发送一个TTL为2的报文,就会得到第二个路由器的ICMP,以此类推,直至收到目的IP回送的ICMP报文为止。现在假设源IP与目的IP之间需要经过10个路由器,那么如果TTL设为8,IP报将无法到达目的地。Windows使用的缺省TTL(Ieexplorer、telnet等)好像是32?记不清了。ping可以指定TTL值。  
   
  可能有些我记得不够准确,去查书吧。Top

10 楼kekeke(再吵,我踢你下床~~)回复于 2001-08-09 23:18:21 得分 0

按照我的理解:原始套接字的意思应该是说发送数据是需要或可以自己构造IP头、UDP头等这些协议头,非原始套接字则-----不用也不能-----自己构造这些“头”,只是控制数据包的数据部分???可以这样理解吗?  
   
   
  ========TO:111222(哇哈哈哈哈~动感超人~娃哈哈哈哈)   
   
  我这本书是前几天去广州出差的时候到广州购书中心4楼天顶书店买的,不知道现在还有没有?  
   
  :))应该还有的。。。。Top

11 楼azuo_lee(宿醉)回复于 2001-08-09 23:42:29 得分 0

可以。Top

相关问题

  • 有关Java Socket 问题
  • 有关Socket的问题
  • 有关多线程和Socket的问题
  • 有关socket的一个小问题
  • 急!!!有关Socket编程的问题
  • 有关socket底层编程的问题
  • 有关socket数据传输的问题。
  • 有关socket控件的疑问
  • 有关socket中send和recv的问题????
  • 有关socket

关键词

  • 路由器
  • socket
  • 数据
  • 协议
  • ttl
  • 报文
  • 头
  • icmp
  • tracert
  • 数据包

得分解答快速导航

  • 帖主:kekeke
  • oo
  • 111222
  • tigerwood12345
  • azuo_lee

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo