Model : 用于保存程序数据的类
View : 所有的用户能看到的诸如窗体之类,还有用户能用来操作的控件
Controller: 程序逻辑,用于连接 model和view的部分,知道如何处理用户的输入,如何来响应事件.
Controller 里面的类可以通过一个特殊的变量实例outlet来引用nib里的对象,这个实例就如同一个指针指向了nib中的对象. Controller里面要操作一个nib里的对象的时候可以先声明一个outlet然后将这个outlet指向想要操作的对象,然后通过这个outlet就可以操作指向的对象了.
从操作的另外一个方向来讲,也可以在nib文件中创建接口对象,用以激发在controller中的特别处理,这类处理就称之为动作action,加入当手指离开一个按钮的时候,这本身就是一个事件,这个事件发生的时候你的controller里面的一个method就可能被触发.
(IBAction)dosomething:(id)sender 这是action方法的声明方式,注意,后面的sender是可选的,即便你声明的时候有这个sender,使用的时候也完全可以不带.
在定义一个property的时候,在"property"关键字后面带的括号中的可选属性,如果property操作的对像是一个raw type(基本类型) 比如int则不需要带retain关键字,如果操作的对像是用户构建的其他的非简单类型,则必须要带这个attribute不然就有可能在你还需要操作这个对象的时候它就已经被从内存中清除了.
到这一步一个属性的开头应该是 @property (retain,) 当然后面还有别的东西,慢慢讲. 另外一个attribute是nonatomic,其实为了实现多线程的应用,还可以选别的,但是那样会增加不必要的开销,尽管开销不大,还是应该避免,大多数情况下,这里要用nonatomic,后面其实还会看到不用nonatomic的情况.
2009年2月9日星期一
2009年2月1日星期日
IGMP v1 notes
IGMP报文长度8byte,附带之前的IP头20byte总共是个8字节长.
一台主机上只要还有包含至少一个进程的多播组,就需要对多播路由器下发的查询报文发送报告报文.
如果一台主机上已经没有了多播组,则下次多播路由器下发查询报文的时候就不发报告报文就可以了.
多播路由器搜集了所有接口上的所有主机发送过来的报告报文,就知道自己下辖的主机们当前还在加入着哪些多播组,这样多播路由器便可以向它的上级进行报告了.
主机在报告的时候对每一个至少还含有一个进程的多播组都要发送一个报告,报告报文中IGMP后四个Byte正是这个多播组的地址, 但对于查询报文,这里是全零,也就是32个零.
重要)
主机的报告报文中的IP头部,源IP地址就是主机地址,目的IP地址是所报告的组地址,在多播路由器下发的查询报文的IP头部中,源IP地址是多播路由地址,目的地址是个224.0.0.1这个地址是保留多播地址,意思是发往子网内所有的系统组. (224.0.0.2)是发往所有的多播路由器
规则)
当第一个进程加入一个多播组的时候,主机要发送一个报告,这个报告并不能保证一定会被多播路由器收到,所以为了保险期间,过一定时间之后主机会重新发送一个报告,这个时间一般在0-10秒之间.
当多播路由器发起一个查询的时候,因为子网内可能有很多主机都加入同一个多播组,这个时候主机收到了查询报文之后并不急于发送报告报文,而是会后延一个时延,当子网中有一个主机发送应查询的要求发送了一个报告报文之后,因为目的地址是这个要报告的多播组的组地址,那么这个报告报文便可以被子网内所有同在这个多播组的其他主机收到,其他主机看到有人已经报告了这个多播组的存在,便可以不再发送关于这个多播组的报告报文了. 这样便减少了不要要的开销
在一个没有多播路由器的子网中,因为没有人发起查询,自然就不会有应查询而发出的报告报文,但是子网中的主机因为支持多播,所以当有进程在主机上加入了一个新的多播组的时候,主机还是会发出报告报文的,而这便是在没有多播路由器的子网中唯一的IGMP报文流量.
特别的多播组)
224.0.0.1是所有子网内支持多播的主机和路由都要自动加入的一个组,当接口初始化之后便自动加入这个组,这就是为什么抓包能够看到有些设备在启动的时候会自动加入到224.0.0.1这个组的原因,加入的方式是发送一个报告报文,宣称自己加入了这个组,所有在子网内的其他设备支持多播的设备都能收到这个报文,因为这个报文的目的地址是大家都加入的组224.0.0.1
TTL 一般多播报文的TTL 设定为1,这样可以控制多播报文在子网内传递,而不能被多播路由器转发.
有一个特别需要注意的地方就是对于特殊地址范围 224.0.0.0-224.0.0.255 被设定用于TTL 不大于1的应用,所以任何情况下多播路由器不会转发多播地址在这个范围内的多播报文.
一台主机上只要还有包含至少一个进程的多播组,就需要对多播路由器下发的查询报文发送报告报文.
如果一台主机上已经没有了多播组,则下次多播路由器下发查询报文的时候就不发报告报文就可以了.
多播路由器搜集了所有接口上的所有主机发送过来的报告报文,就知道自己下辖的主机们当前还在加入着哪些多播组,这样多播路由器便可以向它的上级进行报告了.
主机在报告的时候对每一个至少还含有一个进程的多播组都要发送一个报告,报告报文中IGMP后四个Byte正是这个多播组的地址, 但对于查询报文,这里是全零,也就是32个零.
重要)
主机的报告报文中的IP头部,源IP地址就是主机地址,目的IP地址是所报告的组地址,在多播路由器下发的查询报文的IP头部中,源IP地址是多播路由地址,目的地址是个224.0.0.1这个地址是保留多播地址,意思是发往子网内所有的系统组. (224.0.0.2)是发往所有的多播路由器
规则)
当第一个进程加入一个多播组的时候,主机要发送一个报告,这个报告并不能保证一定会被多播路由器收到,所以为了保险期间,过一定时间之后主机会重新发送一个报告,这个时间一般在0-10秒之间.
当多播路由器发起一个查询的时候,因为子网内可能有很多主机都加入同一个多播组,这个时候主机收到了查询报文之后并不急于发送报告报文,而是会后延一个时延,当子网中有一个主机发送应查询的要求发送了一个报告报文之后,因为目的地址是这个要报告的多播组的组地址,那么这个报告报文便可以被子网内所有同在这个多播组的其他主机收到,其他主机看到有人已经报告了这个多播组的存在,便可以不再发送关于这个多播组的报告报文了. 这样便减少了不要要的开销
在一个没有多播路由器的子网中,因为没有人发起查询,自然就不会有应查询而发出的报告报文,但是子网中的主机因为支持多播,所以当有进程在主机上加入了一个新的多播组的时候,主机还是会发出报告报文的,而这便是在没有多播路由器的子网中唯一的IGMP报文流量.
特别的多播组)
224.0.0.1是所有子网内支持多播的主机和路由都要自动加入的一个组,当接口初始化之后便自动加入这个组,这就是为什么抓包能够看到有些设备在启动的时候会自动加入到224.0.0.1这个组的原因,加入的方式是发送一个报告报文,宣称自己加入了这个组,所有在子网内的其他设备支持多播的设备都能收到这个报文,因为这个报文的目的地址是大家都加入的组224.0.0.1
TTL 一般多播报文的TTL 设定为1,这样可以控制多播报文在子网内传递,而不能被多播路由器转发.
有一个特别需要注意的地方就是对于特殊地址范围 224.0.0.0-224.0.0.255 被设定用于TTL 不大于1的应用,所以任何情况下多播路由器不会转发多播地址在这个范围内的多播报文.
订阅:
评论 (Atom)