摘要: 第二章 团队 2.1 smallwritingteam 原因: ? 用例要求具有不同观点和专业知识的人编写; ? 将一大组人聚集在一起是困难的; ? 理论上,在用例上投入的人越多,就能越快的完成用例编写工作; ? 大的团队会变得低效; ? 大型编写团队可能会通过集体讨论的形式开发用例,添加许多不必要的特性; 所以: 一个由2人或3人组成的团队足够小,容易交流和达成一致;可以使用几个smallwr......
摘要: 此文作为如何才能构建一个敏捷的开发团队,希望和大家一块交流 的一个小结,希望大家能够提供更多的宝贵意见。 总结如下: 1。敏捷的团队建设,确实是一个渐进的过程。好像没有那个团体是一下子就自动产生,大家只有在比较长期的磨合中,才能达到某种默契。 2。在磨合的过程中,有一个良好的习惯养成,同样也很重要。在这方面schelemiel如斯说:“敏捷团队最要紧的是每个成员的习惯。把持续集成、测试驱动、重构......
TCP传输控制协议 【程序编程相关:
我与CSDN】 【推荐阅读:
关于互联网信息采集的思考】 【扩展信息:
利用C++Builder中OLE自动化功】 (transmission control protocol) 传输控制协议 2004-07-15 tcp协议主为了在主机间实现高可靠性的包交换传输协议.本文将描述协议标准与实现的一些方法.因为计算机网络在现代社会中已经是不可缺少的了,tcp协议主要在网络不可靠的时候完成通信,对军方可能特别有用,但是对于政府与商用部门也适用.tcp是面向连接的端到端的可靠协议.它支持多种网络应用程序.tcp对下层服务没有多少要求,它假定下层只能提供不可靠的数据报服务,它可以在多种硬件构成的网络上运行.下面的图是tcp在层次式结构中的位置,它的下层是ip协议,tcp可以根据ip协议提供的服务传送大小不定的数据,ip协议负责对数据进行分段,重组,在多种网络中传送. tcp的上面就是应用程序,下面是ip协议,上层接口包括一系列类似于操作系统中断的调用.对于上层应用程序来说,tcp应该能够异步传送数据.下层接口我们假定为ip协议接口.为了在并不可靠的网络上实现面向连接的可靠的传送数据,tcp必须解决可靠性,流量控制的问题,必须能够为上层应用程序提供多个接口,同时为多个应用程序提供数据,同时tcp必须解决连接问题,这样tcp才能称得上是面向连接的,最后,tcp也必须能够解决通信安全性的问题. 网络环境包括由网关(或其它设备)连接的网络,网络可以是局域网也可以是一些城域网或广域网,但无论它们是什么,它们必须是基于包交换的.主机上不同的协议有不同的端口号,一对进程通过这个端口号进行通信.这个通信不包括计算机内的i/o操作,只包括在网络上进行的操作.网络上的计算机被看作包传送的源与目的结点.特别应该注意的是:计算机中的不同进程可能同时进行通信,这时它们会用端口号进行区别,不会把发向a进程的数据由b进程接收的. 进程为了传送数据会调用tcp,将数据与相应的参数传送给tcp,于是tcp会将数据传送到目的tcp那里,当然这是通过将tcp包打包在ip包内在网络上传送达到的.接收方tcp在接收到数据后会通信上层应用程序,tcp会保证接收数据顺序的正确性.虽然下层协议可能不会保证顺序是正确的.这里需要说明的是网关在接收到这个包后,会将包解开,看看是不是已经到目的地了,如果没有到,应该走什么路由达到目的地,在决定后,网关会根据下一个网络内的协议情况再次将tcp包打包传送,如果需要,还要把这个包再次分成几段再传送.这个落地检查的过程是一个耗时的过程.从上面,我们可以看出tcp传送的基本过程,当然具体过程可能要复杂得多. 在实现tcp的主机上,tcp可以被看成是一个模块,与文件系统区别不大,tcp也可以调用一些操作系统的功能,tcp不直接与网络打交道,控制网络的任务由专门的设备驱动模块完成.tcp只是调用ip接口,ip向tcp提供所有tcp需要的服务.通过下图我们可以更清楚地看到tcp协议的结构. 上面已经说过了,tcp连接是可靠的,而且保证了传送数据包的顺序,保证顺序是用一个序号来保证的.响应包内也包括一个序列号,表示接收方准备好这个序号的包.在tcp传送一个数据包时,它同时把这个数据包放入重发队列中,同时启动记数器,如果收到了关于这个包的确认信息,将此包从队列中删除,如果计时超时则需要重新发送此包.请注意,从tcp返回的确认信息并不保证最终接收者接收到数据,这个责任由接收方负责. 每个用于传送tcp的通道都有一个端口标记,因为这个标记是由每个tcp终端确定的,因此tcp可能不唯一,为了保证这个数值的唯一,要使用网络地址与端口号的组合达到唯一标识的目的,我们称这个为了套接字(socket),一个连接由连接两端的套接字标识,本地的套接字可能与不同的外部套接字通信,这种通信是全双工的. 通过向本地端口发送open命令及外部套接字参数建立连接,tcp返回一个标记这个连接的名称,以后如果用户需要使用这个名称标记这个连接.为了保存这个连接的信息,我们假设有一个称为传输控制块(transmission control block,tcb)的东西来保存.open命令还指定这个连接的建立是主动请求还是被动等待请求.下面我们要涉及具体的功能了,tcp段以internet数据报的形式传送.ip包头传送不同的信息域,包括源地址与目的地址.tcp头跟在internet包头后面,提供了一些专用于tcp协议的信息.下图是tcp包头格式图: 1) 源端口:16位; 2) 目的端口:16位 3) 序列码:32位,当syn出现,序列码实际上是初始序列码(isn),而第一个数据字节是isn+1; 4) 确认码:32位,如果设置了ack控制位,这个值表示一个准备接收的包的序列码; 5) 数据偏移量:4位,指示何处数据开始; 6) 保留:6位,这些位必须是0; 7) 控制位:6位; 8) 窗口:16位; 9) 校验位:16位; 10)优先指针:16位,指向后面是优先数据的字节; 11)选项:长度不定;但长度必须以字节记;选项的具体内容我们结合具体命令来看; 12)填充:不定长,填充的内容必须为0,它是为了保证包头的结合与数据的开始处偏移量能够被32整除; 我们前面已经说过有一个tcb的东西了,tcb里有存储了包括发送方,接收方的套接字,用户的发送与接收的缓冲区指针等变量.除了这些还有一些变量与发送接收序列号有关: 1)发送序列变量 ? snd.una - 发送未确认 ? snd.nxt - 发送下一个 ? snd.wnd - 发送窗口 ? snd.up - 发送优先指针 ? snd.wl1 - 用于最后窗口更新的段序列号 ? snd.wl2 - 用于最后窗口更新的段确认号 ? iss - 初始发送序列号 2)接收序列号 ? rcv.nxt - 接收下一个 ? rcv.wnd - 接收下一个 ? rcv.up - 接收优先指针 ? irs - 初始接收序列号 下图会帮助您了解发送序列变量间的关系: 当前段变量 ? seg.seq - 段序列号 ? seg.ack - 段确认标记 ? seg.len - 段长 ? seg.wnd - 段窗口 ? seg.up - 段紧急指针...
下一页 摘要:squid我对它的了解还不够多,下面的测试仅仅是我实战的记录。可以保证按照这样做可以成功,不过squid.conf肯定还有很多地方配置的不完善,还好,这段时间会一直看这方面的文档。 这篇文章是全文的第二部分,第一部分可以参考面向缓存的站点规划1--mod_proxy 实战测试2: 1.实验计划:安装squid2.5 stable1,然后打squid-2.5.stable1-combined-log......