现在的位置: 首页 > 综合 > 正文

用tcp/ip进行网络连接(第2-5章 笔记)

2013年10月12日 ⁄ 综合 ⁄ 共 1600字 ⁄ 字号 评论关闭

第二章:
1. 客户机-服务器范例使用发起通信的方向来对程序分类
2. 服务器软件应该含有处理安全问题的机制
3. 全参数化客户软件是指客户软件允许用户指明远程服务器的端口号,而不使用默认的端口号(在测试时比较有用)
4. 有状态和无状态的服务器(是否保存状态信息),采用有状态的服务器还是无状态的服务器是服务器软件的事情,而不是tcp/ip的问题,但选用的依据应该在于所使用的应用层协议

第三章:
1. 程序员应该保证在服务器中引入并发处理器所带来的好处要比在各个进程间切换上下文所带来的开销大
2. select 调用允许单个进程管理并发I/O

第四章:
1.tcp/ip本身并没有为应用定义精确的接口(api),这部分由操作系统的设计来完成

第五章:
1. unix中的socket描述符和文件描述符使用的是同一个描述符表,因此一个进程不可能具有相同的文件描述符和socket描述符
2. unix中的socket是基于一般的网络通信设计的,并不局限于tcp/ip协议族。socket抽象允许协议族选择自己的地址结构,每种地址结构就是
一种地址族,并且一种协议族可能会对应多个地址结构。这也就是PF_INET和AF_INET的区tcp别所在。
3. tcp/ip协议族只使用一种地址族,其对应的地址结构为:struct sockaddr_in
4. 一般化的地址格式:struct sockaddr,这种结构主要用于socket函数,这种结构只能用于覆盖,代码只能引用此结构中的sa_family字段,struct sockaddr的大小可能不足以容纳所有的地址结构,可用struct sockaddr_storage代替
5. bind函数是为socket指定一个本地地址,而不是对端地址
6. listen的一个参数指明此socket将用于被支模式打开,另一个参数指明此socket所使用的连接队列长度
7. 这些地址结构的定义:
struct sockaddr {
   sa_family_t   sa_family;   /* address family, AF_xxx   */
   char   sa_data[14];   /* 14 bytes of protocol address   */
};
struct sockaddr_in {
  sa_family_t    sin_family;   /* Address family  */
  unsigned short int    sin_port;   /* Port number   */
  struct in_addr    sin_addr;   /* Internet address   */

  /* Pad to size of `struct sockaddr'. 填充字段,为了与sockaddr大小一至 __SOCK_SIZE__为16 */
   unsigned char   __pad[__SOCK_SIZE__ - sizeof(short int) -
   sizeof(unsigned short int) - sizeof(struct in_addr)];
};
struct __kernel_sockaddr_storage {
   unsigned short   ss_family;   /* address family */
   /* Following field(s) are implementation specific */
   char   __data[_K_SS_MAXSIZE - sizeof(unsigned short)];   /*  _K_SS_MAXSIZE为128,足够大了 */
        /* space to achieve desired size, */
        /* _SS_MAXSIZE value minus size of ss_family */
} __attribute__ ((aligned(_K_SS_ALIGNSIZE)));   /* force desired alignment */


抱歉!评论已关闭.