1.客户与服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栽的一部分
2.通过调用listen函数将此套接口变成一个监听套接口,它使系统内核接受来自客户的连接(假
定服务器主机有多个接口)
connect函数用在TCP套接口上的功能是:跟第2个参数所指的套接口地址结构对应的服务器建
立连接;第3个参数说明套接口地址结构的长度.
SA在头文件unp.h中定义为struct sockaddr,即通用套接口地址结构。
connect(sockfd,(SA *)&servaddr,sizeof(servaddr))
3.在字节流的协议里,可以有多种返回方式:即可以是包含所有N个字节的单个TCP分节,也可以
是每个分节只含有一个字节的总共N个分节,当然,总共N字节的任何其他组合也可以。
计算机网络各层对等实体间交换的单位信息称为协议数据单元(PDU),分节就是PDU之一,它对
应于TCP传输层。
就TCP/IP协议族而言,应用实体(如普通的客户和服务器进程)间交换的PDU称为数据(data-
TCP应用程序)或记录(record-UDP应用进程),其中数据的大小没有限制,但记录不能超过UDP发
送缓冲区大小(这个缓冲区实际上并不存在,但它具备这个属性)。
传输层实体间交换的PDU是分节(segment,TCP协议)或数据报(datagram,UDP协议),它们的大
小都是有限的。
TCP应用进程的数据由TCP划分成块(chunk)后封装在分节中传送,UDP应用进程的记录则由UDP
整个封装到数据报中传送。
网络层实体之间交换的PDU是分组(packet,俗称包),其大小自然有限。传输层的分节或数据
报都由IP封装在分组中传送。有时分组可能太大,超过了数据链路层单个PDU的容量,这时分组
需要划分成若干个片段(fragment),因此片段也是网络层实体之间交换的信息单元。TCP/IP为提
高效率,一般尽可能避免这种分片操作。
数据链路层实体之间交换的PDU是桢(frame),网络层的每个小分组(即无需划分片段的分组)或
片段由数据链路层封装到一个贞中。每层的PDU除用来封装来自紧邻上层的数据单元(称为服务数
据单元SDU)外,也用于本层内部的协议通信。
4.通过调用listen函数将bind好了的套接口变成一个监听套接口,它使系统内核接受来自客户的
连接。socket,bind和listen是任何TCP服务器用于准备监听描述字通常的3个步骤。
5.一般情况,服务器进程在调用accept函数后处于睡眠状态,它等待客户的连接和内核对它的接
受。accept为每个连接到服务器的客户返回一个新的已连接描述字。
TCP连接使用三路握手来建立,当握手完毕时,accept函数返回,其返回值是一个称为已连接
描述符(connected descriptor)的新描述符。
6.服务器通过调用close关闭与客户的连接。它引发通常的TCP连接终止序列:每个方向上发送一
个FIN,每个FIN又由对方确认。
7.如多个客户连接同时到达,一般系统内核在最大数目的限制下把它们排入队列,然后每次返回
一个给accept函数。但是,如果服务器用很多时间处理各个客户(如几秒或一分钟),我们就必须
以某种方式重叠对各个客户的服(让每个客户它都对该程序迭代执行一次)。
并发服务器程序有多种编写技术,它同时能处理多个客户。最简单的技术是调用Unix的fork
函数,为每个客户派生一个子进程。
其他技术包括使用线程代替fork,或在服务器启动时预先fork一定数量的子进程。
8.设备驱动程序和硬件:对应数据链路层(以太网MTU)和物理层。
IPv4,IPv6:对应于网络层
TCP,原始套接口(raw),UDP:对应于传输层
应用层:对应于会话层,表示层,应用层(web客户浏览器等,Telnet客户,web服务器,FTP服
务器或其他进程所在层)。对于网际协议,应用层的这三层协议没什么区别
9.有两个命令可用来了解网络细节:netstat和ifconfig
1)netstat -i提供接口信息,-n输出数值地址
2)netstat -r输出路由表
10.目前倾向于64位体系结构和64位软件。理由之一是进程内部可使用更大的编址长度(即64位指
针),以允许进行大内存寻址(超过2的32次方字节)
POSIX:(Portable Operating System Interface)是可移植操作系统接口的缩写
阅读(1946) | 评论(0) | 转发(0) |