




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.3 TCP连接的建立与终止和TCP状态转换图 -2MSL状态难点:执行主动关闭的那端进入这种状态。这个端点在该状态的持续时间是2MSL(最长分节生命周期)。存在TIME_WAIT状态有两个理由:1.实现终止TCP全双工连接的可靠性(假设最后一个ack丢失的情况).2.允许老的重复分节在网络中消逝.2.4套接字基本函数-知道怎么用这些函数套接字类型:SOCK_STREA,:流式套接字TCP支持;SOCK_DGRAM:数据包套接字UDP支持;SOCK_RAW:原始套接字允许对低于传输层的协议或物理网络直接访问;收发ICMP报、常用于检测新的协议第三章 各个函数和参数的作用【close()与shutdown()】区别:(1)close将描述字的访问计数减1,仅在此计数为0时才关闭套接口。用shutdown可以激发TCP的正常连接终止程序,而不管访问计数;(2)close终止了数据传送的两个方向:读和写。由于TCP连接是全双工的,有很多时候要通知另一端已完成了数据发送,即使那一端仍有许多数据要发送也如此。Shutdown函数可以仅仅关闭连接的读、写或两个方向都关闭。 函数返回的描述符 设置套接字选项 第四章 recvfrom和sendto函数的用法第五章默认为子进程先执行 父进程后执行 但是有sleep函数就不一样了 进程:定义了一个计算的基本单元,可以认为是一个程序的一次运行。它是一个动态实体,是独立的任务。它拥有独立的地址空间、执行堆栈、文件描述符等l 父进程监听 l 子进程进行通信 l wait和waitpid函数的用法 僵尸进程:一个已经终止,但是其父进程尚未对其进行善后处理的进程 l 线程的创建函数 l 传递参数问题 once函数 include int pthread_once(pthread_once_t *once_control, void (*init_routine) (void)成功返回0,否则返回错误码 如果本函数中,once_control变量使用的初值为PTHREAD_ONCE_INIT,可保证init_routine()函数在本进程执行序列中仅执行一次。一般在init_routine函数中完成一些初始化工作。 LinuxThreads使用互斥锁和条件变量保证由pthread_once()指定的函数执行且仅执行一次,而once_control则表征是否执行过。如果once_control的初值不是PTHREAD_ONCE_INIT(LinuxThreads定义为0),pthread_once()的行为就会不正常; 互斥锁 pthread_mutex_lock(pthread_mutex_t *mptr) 返回:成功0,否则返回错误码如果互斥锁是静态分配的,就将mptr初始化为常值PTHREAD_MUTEX_INITIALIZER。 pthread_mutex_unlock(pthread_mutex_t *mptr) 用于互斥锁解锁操作。返回:成功0,否则返回错误码线程的例子和I/O复用第六章 要了解PPT上的各个函数,知道他们的作用 uname函数等第9章 第13章当客户处理多个描述字(一般是交互式输入和网络套接字),必须使用i/o复用l 五个I/O模型 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvl 4个宏函数vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv FD_ZREO/将所有位设为0/、FD_CLR/将fd位设为0/、FD_SET/将fd位设为1/、FD_ISSET/检测fd位是否为1/l select函数 该函数有三种执行结果:【永远等待下去】仅在有一个或以上描述字准备好i/o才返回,为此,我们将timeout设置为空指针。【等待固定时间】在有一个描述字准备好时返回,但不超过由timeout参数指定的秒数和微秒数。【根本不等待,检查描述字后立即返回,这称为轮询】这种情况下,timeout必须指向结构timeval,且定时器的值必须为0。l 每次调用select前都必须对等待描述字集合完成初始化和设置工作l 【Select()函数实现I/O多路复用的步骤】:vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv1) 清空描述符集合; 2) 建立需要监视的描述符与描述符集合的联系;3) 调用select()函数;4) 检查所有需要监视的描述符,利用FD_ISSET宏判断是否已准备好;5) 对已准备好的描述符进行I/O操作。l 区别:pselect函数使用结构timespec,而不是timeval vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvpselect函数不能更改参数timeout,以表示还剩余多少时间。函数pselect增加了第六个参数:指向信号掩码的指针。这允许程序禁止递交某些信号,测试由这些当前禁止的信号的信号处理程序所设置的全局变量,然后调用pselect,告诉它临时重置信号掩码l 【套接字可读的条件主要有】:套接字接收缓冲区中的数据字节数大于等于套接字接收缓冲区低潮限度的当前值;套接字是一个监听套接字且已完成的连接数为非0。如果对方tcp发送一个FIN(对方进程终止),套接字就变为可读且read返回0;有一个套接字错误待处理。l 【套接字可写的条件主要有】:套接字发送缓冲区的可用空间大于等于套接字发送缓冲区的低潮限度;套接字的写这一半关闭,对套接字的写将产生SIGPIPE信号;有一个套接字错误待处理l 【套接字的异常条件】:套接口带外数据的到达;控制状态信息的存在,可从一个已置为分组方式的伪终端读到l Libpcap工作流程查找有效的网络设施获得网络地址及网络掩码打开网络将用户输入的字符串编译到过滤程序设置过滤器捕获包缓冲满?处理捕获的包退出【Libpcap的工作流程】VVVVVVVVVVVVVVVVVVVVVVVVVVV1、查找网络设备(pcap_lookupdev);2、获取网络地址及网络掩码(pcap_lookupnet);3、打开网络设备(pcap_open_live);4、将过滤字符串编译到过滤程序中(pcap_compile);5、设置过滤器(pcap_setfilter);6、捕获包(pcap_dispatch) l 非阻塞I/O模型当把一个套接字设置成非阻塞方式时,即通知内核:当请求的i/o操作非得让进程睡眠不能完成时,不要进程睡眠,而应返回一个错误。(返回不成功指示)【SO_LINGER选项】函数close缺省操作是立即返回,但如果有数据残留在套接字发送缓冲区,系统将试着将这些数据发送给对方;SO_LINGER(level: SOL_SOCKET)选项将改变tcp套接字关闭时的缺省行为。 【原始套接字的输出遵循以下规则】:1) 如果套接字已经连接,可以调用write、writev、send来发送数据,否则需要调用sendto或sendmsg;2) 如果IP_HDRINCL选项未设置,则内核会将IP头部之后的第一个字节作为写数据的起始地址。3) 如果设置了IP_HDRINCL,则内核会将IP头部的第一个字节作为写数据的起始地址。此时进程构造除了以下两项外的整个IP头部;(a)IPv4标识字段可以设为0,要求内核设置该值;(b)IPv4头部校验和由内核来计算和存储。4) IPv4数据报首部各个字段的内容均是网络字节序(对linux而言)5) 对于超出外出接口的MTU的分组,内核将其分片【作用:原始套接字提供了一些使用tcp和udp协议不能实现的功能】1) 使用原始套接字可以读写ICMPv4、IGMPv4分组。如Ping程序,mroute程序等;2) 使用原始套接字可以读写特殊的IPv4数据包,内核不处理这些数据报的IPv4协议字段。如大多数内核只处理ICMP、IGMP、TCP、UDP的数据报。但协议字段还可以为其他值,如OSPF直接使用IP协议,将IP数据报的协议字段设为89,此时,就必须有专门的程序通过原始套接字来处理它们;3) 利用原始套接字还可以创建自定义的IP数据报首部,编写基于IP协议的高层网络协议。【常用的网络命令】1、ping:检测主机连接状况2、ifconfig:显示当前有效网络接口的状态3、netstat :显示网络状态。如显示网络连接、路由表和网络接口信息。4、route:对内核的IP路由表进行操作5、tcpdump:用于分析网络上的数据流【简答题:】1、 Select()函数实现I/O多路复用的步骤 答:1. 清空描述符集合;2. 建立需要监视的描述符与描述符集合的联系;3. 调用select()函数;4. 检查所有需要监视的描述符,利用FD_ISSET宏判断是否已准备好;5. 对已准备好的描述符进行I/O操作。2、I/O复用的应用场合 答:“一应两客三服” 当客户处理多个描述字(一般是交互式输入和网络套接字),必须使用i/o复用; 一个客户同时处理多个套接字是可能的(例如FTP客户程序),但很少出现; 如果一个tcp服务器既要处理监听套接字,又要处理连接套接字,一般也可以用i/o复用;(当然可以使用并发技术) 如果一个服务器既要处理tcp,又要处理udp,一般也要使用i/o复用; 如果一个服务器要处理多个服务或者多个协议,一般要使用i/o复用; i/o复用并非只限于网络编程,许多正式应用程序也需要使用这项技术。3、常用Linux网络命令1、ping:检测主机连接状况2、ifconfig:显示当前有效网络接口的状态3、netstat :显示网络状态。如显示网络连接、路由表和网络接口信息。4、route:对内核的IP路由表进行操作5、tcpdump:用于分析网络上的数据流4、TCP连接的建立n TCP连接的过程:n 服务器必须准备好接受外来的连接。通过调用socket, bind, listen函数完成。称为被动打开。n 客户通过调用connect进行主动打开。这引起客户TCP发送一个SYN分节,告诉服务器客户将在连接中发送的数据的初始序列号。n 服务器必须确认客户的SYN,同时自己也得发送一个SYN分节。服务器以单个分节向客户发送SYN和对客户的SYN的ACK。n 客户必须确认服务器的SYN。TCP连接终止n TCP一般用四个分节终止一个连接:n 某个进程首先调用close, 这一端的TCP于是发送一个FIN分节,表示数据发送完毕。主动关闭。n 另一端称为被动关闭。TCP对接收的FIN分节进行确认,并以文件结束标志传递给应用程序。n 一段时间后,接收到文件结束标志的应用程序调用close,这也导致向对方发送一个FIN分节。n 接收到这个FIN分节的原发送方TCP对它进行确认。n 还有一种关闭称为“半关闭”(half-close)5、服务器分类n 按连接类型分类n 面向连接的服务器(如tcp)n 面向无连接的服务器(如udp)n 按处理方式分类n 迭代服务器n 并发服务器6、进程的状态n 就绪:进程准备运行,但还没有得到CPU。根据调度算法决定将CPU分配给某个进程。n 运行:进程正在运行(即占用CPU)n 等待:进程正在等待某个事件的发生,如:输入输出的完成、子进程的退出、进程睡眠期的结束。n 被交换:进程准备运行,但可能由于需要更多的内存而当前却没有足够的可用内存,因此被暂时存放在硬盘(交换空间)上。n 僵死:一个已经终止,但是其父进程尚未对其进行善后处理的进程。7、互斥锁 在linux系统中,提供一种基本的进程同步机制互斥锁,可以用来保护线程代码中共享数据的完整性。n 操作系统将保证同时只有一个线程能成功完成对一个互斥锁的加锁操作。n 如果一个线程已经对某一互斥锁进行了加锁,其他线程只有等待该线程完成对这一互斥锁解锁后,才能完成加锁操作。8、给新线程传递参数n 由于同一个进程内的所有线程共享内存和变量,因此在传递参数时需作特殊处理,下面参考如下几种方法:n 传递参数的普通方法n 通过指针传递参数n 通过分配arg的空间来传递参数n 还可以通过加锁等同步设施来实现传递参数;9、调用wait或waitpid函数时,正常情况下,可能会有以下几种情况:n 阻塞(如果其所有子进程都还在运行);n 获得子进程的终止状态并立即返回(如果一个子进程已终止,正等待父进程存取其终止状态);n 出错立即返回(如果它没有任何子进程)10、Libpcap的工作流程。Page2051、 查找网络设备(pcap_lookupdev);2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 红菜苔管理办法视频
- 中国石化污染管理办法
- 上海护士岗位管理办法
- 仓库下属人员管理办法
- 上市企业税务管理办法
- 业务运营机制管理办法
- 葡萄不开花管理办法
- 中医学院物业管理办法
- 专业监理公司管理办法
- 规范财务帐目管理办法
- 以物抵债方案(3篇)
- 秋季预防常见传染病课件
- 2025年中国商用开水器市场调查研究报告
- HER2阳性晚期胃癌分子靶向治疗中国专家共识
- 2025届安徽省六校研究会高三开学联考-数学试卷(含答案)
- 中国绿色食品市场深度调查研究报告2025-2028版
- 2025年苏教版小学数学小升初模拟考试测试卷及答案(共五套)
- 基于赋能理论的老年COPD稳定期患者慢病管理方案的构建及应用
- 公司员工特殊岗位补贴政策
- 2025会计基础工作规范
- 《人工智能基础与应用-(AIGC实战 慕课版)》全套教学课件
评论
0/150
提交评论