Chinaunix首页 | 论坛 | 博客
  • 博客访问: 968655
  • 博文数量: 200
  • 博客积分: 5011
  • 博客等级: 大校
  • 技术积分: 2479
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 15:07
文章分类

全部博文(200)

文章存档

2009年(12)

2008年(190)

我的朋友

分类:

2008-12-27 23:52:08

Chapter 1 introduction

1.7 OSI model

的确,OSI7层模型很理论,很好,但是在现实实现中肯定是简化的。Internet protocol suit就是他的一个简化版本。

physical layer, data link layer就对应了Internet protocol suit的硬件以及驱动层。network layer对应了ip层,transport layer对应了TCP, UDP层。再上层的什么session layer, presentation layer,以及application layer就直接对应了internet protocol suitapplication 层。

internet protocol suit中,有时候,并不使用tcpudo,即莲transportation layer都不用了,直接用network layerip层的数据,这就是所谓的raw socket

这本书主要关注的网络api一般都是为了使application层能够访问tcp层,而也包括了直接使用ip层的raw socket,甚至还有直接读写data link层的frame的内容。这样在applicationtcp层之间划分的原因是这样的:

1tcp层是涉及具体数据的传输,排序,校验的,而上层就不用

2.从tcp层开始,是作为kernel的一部分的,而其上层是作为user process的。这样二者相互干扰较小,位于kernel的各层同时为多个user process服务。

1.9 test networks and host

使用ifconfig可以查看本机的所有的网络接口的配置,同时可以看到broadcast地址。那么怎么样发现同在一个ethernet中的其他电脑呢?

ping 你的broadcast地址,你就会收到同在一个ethernet的其他电脑的回应。

linux % ping -b 206.168.112.127

WARNING: pinging broadcast address

PING 206.168.112.127 (206.168.112.127) from 206.168.112.96 : 56(84) bytes of data.

64 bytes from 206.168.112.96: icmp_seq=0 ttl=255 time=241 usec

64 bytes from 206.168.112.40: icmp_seq=0 ttl=255 time=2.566 msec (DUP!)

64 bytes from 206.168.112.118: icmp_seq=0 ttl=255 time=2.973 msec (DUP!)

64 bytes from 206.168.112.14: icmp_seq=0 ttl=255 time=3.089 msec (DUP!)

64 bytes from 206.168.112.126: icmp_seq=0 ttl=255 time=3.200 msec (DUP!)

64 bytes from 206.168.112.71: icmp_seq=0 ttl=255 time=3.311 msec (DUP!)

64 bytes from 206.168.112.31: icmp_seq=0 ttl=64 time=3.541 msec (DUP!)

64 bytes from 206.168.112.7: icmp_seq=0 ttl=255 time=3.636 msec (DUP!)

...

1.11 64-bit architectures

由于网络程序要考虑到向后兼容,因此必须保证我们的程序最大的兼容,所以为了使网络程序不受平台的影响,网络api使用的一些类型,就尽量避开平台影响。使其长度不会因平台变化。

1990年代中期开始,开始流行64bit的架构,好处是可以使用更大的内存空间。但是对于32bit64bit,由于pointer, long int型数据的长度不一样,造成同样的程序在两个平台上编译得到的二进制程序是不一样的。这就造成了binary级别的不兼容。

unix环境下,32bit64bitmodel的各种数据的长度:

32bit                     64bit

Char              8                          8                  

Short             16                         16

Int                32                         32

Long             32                         64

Pointer          32                         64

可见,在32bit的环境里,你可以用int来保存一个地址,但是在64bit的环境中是不可以的。

关于ANSI C定义的size_t这种类型,在32bit64bit的环境里,分别是32bit64bit的长度,这种类型用在网络接口api中会造成代码的二进制不兼容,所以socket api里面使用socketlen_t这种类型,他的长度不会随着平台的变化而变化。

阅读(1344) | 评论(0) | 转发(0) |
0

上一篇:猜生日

下一篇:数字电视常用的加密算法

给主人留下些什么吧!~~