tcp/ip网络技术基础重点

上传人:第*** 文档编号:32698397 上传时间:2018-02-12 格式:DOC 页数:16 大小:88KB
返回 下载 相关 举报
tcp/ip网络技术基础重点_第1页
第1页 / 共16页
tcp/ip网络技术基础重点_第2页
第2页 / 共16页
tcp/ip网络技术基础重点_第3页
第3页 / 共16页
tcp/ip网络技术基础重点_第4页
第4页 / 共16页
tcp/ip网络技术基础重点_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《tcp/ip网络技术基础重点》由会员分享,可在线阅读,更多相关《tcp/ip网络技术基础重点(16页珍藏版)》请在金锄头文库上搜索。

1、用TCP/IP进行网际互连客户-服务器编程与应用1.客户-服务器模式在分布式计算中,一个应用程序被动地等待,而另一个应用程序通过请求启动通信的模式,称为客户-服务器模式。其中:发起通信的应用程序称为客户,等待接收客户通信请求的程序称为服务器。客户和服务器分别指两个应用程序,但在实际工作中,我们也将运行服务器程序的计算机简称为服务器。2.充当客户的服务器在服务器计算某个请求的响应时,它可能需要访问其他的网络服务。因此,服务器也可能充当客户。在一个有许多可供使用的服务器的网络环境中,经常可以发现某个应用的服务器对另一个应用则是客户。3.并发是指真正或表面呈现的同时计算。真正的并发:DNA计算机、多

2、处理器(Multiprocessing)计算机;表面呈现的并发:通过分时(time sharing)机制,使得单个处理器在多个任务之间足够快地切换,以致从表面上这些计算似乎是在同时进行的,从而获得并发的效果。4.进程vs线程进程:是执行程序的实例,是具有一定独立功能的程序关于某个数据集合上的一次运行活动,而不是程序的静态版本。进程包括一段地址空间和至少一个执行的线程。线程最重要的信息时一个指令指针,它指明该进程正在执行的地址。线程:是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。关系:线程是进程的一个组成部分,线程由进程创建,因此一个进程中至少存在一个线程,线程还可以创建其它线程;进

3、程是资源分配和保护的基本单位,线程只能在进程的地址空间活动,线程只能使用其所在进程的资源;线程作为基本的调度单位,其状态有:就绪、运行、阻塞等;进程中所有线程共享进程的存储空间和分配资源。线程的特征:动态创建、并发执行、抢先、私有局部变量、共享全局变量、共享文件描述符、协调和同步函数。线程的优点:更高的效率:上下文交换的额外开销减少;共享的存储器:通信开销减少,且更容易构造监控系统。补充:创建和撤消线程的开销非常小:不需要向系统请求独立的地址空间及进行相关的地址空间复制(例如父子进程),因此创建和撤销线程系统的开销要远小于进程。线程的缺点:由于线程间共享存储器和进程状态,一个线程的动作可能对同

4、一进程中的其他线程产生影响:线程安全;健壮性。进程中有多个线程在同时运行,而这些线程可能会同时运行一段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。多个线程操作同一个数据段时,用相应的互斥机制,避免数据段中的数据错误。5.局部和全局变量的共享如果多个线程在同一个进程内执行,则它们各自拥有一份独立的局部变量的副本,且都可以共享进程的全局变量副本。fork()函数:将运行的程

5、序分为两个几乎完全一样的进程。用户执行该并行程序时,OS创建一个含单线程的进程执行代码;当线程执行到fork()调用时,OS复制进程,每个进程都启动一个从代码的同一位置开始执行的线程,这两个进程中的线程继续执行,就像两个用户同时启动了该应用程序的两个副本。调用fork()函数的进程称为父进程, fork()函数新创建的进程称为子进程。虽然一个进程可以包含多个线程,但fork()函数新创建的进程均为单线程的;fork函数要向它的调用者返回一个值。返回给原来进程的值与返回给新创建进程的值是不同的。在新创建的进程里,fork返回零;在原来的进程里,fork返回一个小的正整数来标识(pid)新创建的进

6、程。#include #includeint sum;main()int i;sum=0;fork();for (i=1;iint sum; main()int pid;pid=fork();if(pid!=0) printf(“The original process prints this.n”);elseprintf(“The new process prints this.n”);exit(0);6.接口的功能分配用于通信的本地资源;指定本地和远程通信端点;(客户端)启动连接;(客户端)发送数据报;(服务器端)等待连接到来;发送或接收数据;判断数据何时到达;产生紧急数据;处理到达的紧急

7、数据;从容终止连接;处理来自远程端点的连接终止;异常终止通信;处理错误情况或连接异常终止;连接结束后释放本地资源。7.套接字APITCP/IP标准没有规定应用软件和TCP/IP协议软件接口的细节,而只是建议了所需的功能,并允许系统设计者选择有关API的具体实现细节。套接字API提供了许多综合的功能,这些功能支持使用众多可能的协议来进行网络通信。套接字调用将所有的TCP/IP协议看作一个单一的协议族,表示为PF_INET。套接字调用让应用程序使用所要求的服务的类型来指明操作,而不是指明具体协议的名字。8.套接字描述符vs文件描述符文件描述符可通过系统函数open()创建,代表一个被打开的文件;套

8、接字:就像文件一样,每个套接字也是由一个小整数标识,称为套接字描述符。应用程序可以调用系统函数socket()来创建套接字。操作系统为每个运行的进程维护一张单独的描述符表,文件描述符与套接字描述符都在该描述符表中分配,因此,在一个应用进程中不能同时存在具有相同值的文件描述和套接字描述符。9.在程序中使用套接字调用客户端:Step1:客户创建套接字;Step2:调用connect连接服务器;Step3:交互时,使用send发送请求,使用recv接收应答;Step4:当连接结束时,客户调用close断开连接。服务器端:Step1:服务器创建套接字;Step2:调用bind指明它所使用的本地(公开的

9、)协议端口;Step3:调用listen设置连接等待队列的长度,之后进入循环;Step4:在循环中,调用accept进行等待,直到有一个连接请求到达为止;Step5:有连接请求到达时,使用recv接收请求,使用send发送应答,从而实现与客户的交互;Step6:当连接结束时,调用close断开连接。之后,服务器回到accept调用,在那里等待下一个连接请求的到达。10.查找域名客户必须使用sockaddr_in结构指明服务器的地址,但用户在启动程序时输入的服务器信息一般为服务器的IP地址或者是服务器的域名。套接字API提供了两种例程库inet_addr和gethostbyname来执行上述转换

10、功能。inet_addr():用于将用户输入的用点分十进制表示的IP地址转换为用二进制表示的 32 位的IP地址。gethostbyname():用于将用户输入的服务器的域名转换为用二进制表示的32 位的IP地址,当它调用成功,将返回一个hostent结构,若失败,则返回0。hostent结构在netdb.h中声明,包含有用二进制表示的 32 位的IP地址。struct hostent *gethostbyname(const char *name);name参数:含有协议名的字符串的地址。Struct socketaddr_inu_char sin_len;u_short sin_famil

11、y;u_short sin_port;struct in_addr sin_addr;char sin_zero8;Struct hostentchar *h_name;char *h_aliases;int h_addrtype;int h_length;char *h_addr_list;#define h_addr h_addr_list0serv_addr.sin_addr=*(struct in_addr*)hptr-h_addr);/强制转换为struct sockaddr_in 结构中的 struct in_addr 结构,因为 struct sockaddr_in 结构用 st

12、ruct in_addr 结构的变量 sin_addr 存储 IP 地址。11.由名字查找某个熟知端口客户软件查找特定服务的协议端口号,则需要调用getservbyname。struct servent *getservbyname(const char *name, const char *proto) ;name 参数:要查询的服务名称,如 telnet,http,smtp 等;proto 参数:要查询的协议,如 tcp,udp 等。没有找到返回 NULL,否则返回一个指向 servent 结构的指针。Struct serventchar *s_name;char *s_aliases;i

13、nt s_port;char *s_proto;由名字查找协议:客户或服务器将协议名映射成分配给该协议协议号,通过调用 getprotobyname 来按协议名查找其对应的协议号。struct protoent *getprotobyname(const char *name);调用成功,则返回一个 protoent 类型的结构地址,失败则返回 0。Struct protoentchar *p_name;char *p_aliases; int p_proto;12.分配套接字协议族不止一个协议,第一个参数指明协议族,第二个指明要求的服务,第三个指明某个特定的协议。#include #incl

14、ude int s; s=socket(PF-INET,SOCK_STREAM,0);13.将 TCP 套接字连接到某个服务器系统调用connect允许TCP套接字发起连接。Connec强迫执行了开始时的三次握手。除非它建立了连接,或者TCP到达超时门限并放弃建立连接,否则对connec的调用时不会返回的。int connect(int sockfd, struct sockaddr* serv_addr, int addrlen);首先,它对指明的头阿姐子进行检测,以保证它是有效的并且没有创建连接。第二,它将第二个参数给出的端点地址填入此套接字中。第三,若此套接字还没有本地端点地址,它便为连

15、接选择一个(IP地址和协议端口号) 。第四,它发起一个TCP连接并返回一个值,一次告诉调用者连接是否成功。14. 构成连接的过程:/* connectsock.c - connectsock */extern int errno;int errexit(const char *format, .);int connectsock(const char *host, const char *service, const char *transport )/* Arguments:* host - name of host to which connection is desired* servi

16、ce - service associated with the desired port* transport - name of transport protocol to use (tcp or udp)*/struct hostent *phe; /* pointer to host information entry */struct servent *pse; /* pointer to service information entry */struct protoent *ppe; /* pointer to protocol information entry*/struct sockaddr_in sin; /* an Internet endpoint address */int s, type; /* socket descriptor and socket type */memset(sin.sin_family

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号