-
基于JQuery UI的datepicker二次开发 支持时分秒(带示例)
基于华丽的JQ UI的datepicker没有对时分秒进行支持本次开发彻底解决这一问题示例中支持皮肤切换
- 2020-11-30下载
- 积分:1
-
基于zynq的HDMI输入输出例程代码(vivado_hdmi)
基于zynq的HDMI输入输出例程代码,使用verilog语言
- 2021-11-06 00:37:13下载
- 积分:1
-
MATLAB实现彩色图像增强
分别用直方图,自适应,对比度调整方法实现彩色图像的增强,有代码,有图片
- 2020-12-06下载
- 积分:1
-
RFX2401C参考设计 包括PCB、原理图
Silicon Labs EM35x Reference Design with RFX2401C,可以学习到RFX2401C的电路设计方法,像我这样的新手就直接抄了,特别是天线部分,可以套用到其他2.4GHz模块上
- 2020-12-03下载
- 积分:1
-
锁相环技术原理及FPGA实现
高清扫描版PDF,含章节书签。本书既有锁相环原理又有工程实现,值得一看。尤其是关注数字锁相环的同学,可以了解一下。内容简介本书全面阐述了典型锁相环技术的工作原理及FPGA设计方法,结合 System View仿真实例,详细分析了锁相环技术的基本概念。按照从理论到实践,再从实践到理论的思路,以 Altera公司的FPGA器件为开发平台,采用 MATLAB及 Verilog HDL语言为开发工具,详细阐述了锁相环技术的FPGA实现原理及仿真测试过程,逐步深入地讲解锁相环技术在工程应用中的技术细节。本书思路清晰、语言流畅、分析透彻,在简明阐述设计原理的基础上,追求对工程实践的指导性,力求使读者在较短的时间内掌握锁相环技术的FPGA设计知识和技能。本书的配套网络光盘收录了完整的 System View、 MATLAB及 Verilog HDL实例工程代码,有利于技术人员参考学习,读者可登录华信教育资源网(www.hxedu.com.cn)免费注册后下载。本书适合从事数字通信和数字信号处理领域的设计工程师、科研人员,以及相关专业的研究生、高年级本科生使用未经许可,不得以任何方式复制或抄袭本书之部分或全部内容版权所有,侵权必究。图书在版编目(C|P)数据锁相环技术原理及FPGA实现/杜勇编著.一北京:电子工业出版社,2016.6ISBN978-7-121-28738-1I.①锁…ⅡI.①杜…Ⅲ①锁相环一研究Ⅳ.①TN9118中国版本图书馆CIP数据核字(2016)第095248号责任编辑:田宏峰印刷:北京京师印务有限公司装订:北京京师印务有限公司出版发行:电子工业出版社北京市海淀区万寿路173信箱邮编10006开本:787×10921/16印张:18.25字数:465千字版次:2016年6月第1版印次:2016年6月第1次印刷印数:3000册定价:6800元凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888质量投诉请发邮件至zs@Dphei.com.cn,盗版侵权举报请发邮件至dbq@phei.com.cn本书咨询联系方式:tianhf@phei.com.cn。前言为什么要写这本书1965年,英特尔联合创始人戈登·摩尔( Gordon moore)预测,计算机芯片的处理能力每两年就会翻一番。尽管已经过去50多年,摩尔定律仍然有效。半导体行业的发展速度,以及摩尔定律的精准性预测一度连摩尔本人都感到无比惊奇!2015年6月1日,英特尔宣布将以每股54美元的价格收购 Altera,以此计算,此交易总价将达到167亿美元,创造了英特尔并购历史上金额最大的纪录。一时间,传闻四起,业内专家和媒体开始讨论,FPGA计算机是否将成为可能?无论你是否愿意,只要从事的是与电子及信息处理相关的行业,FPGA的地位已显得越来越重要,它已成为电子行业的基本设计平台之一!无论多么高大上的技术,工程师要能够熟练应用到自己的工程项目中,都必须深入了解每一个技术实现细节。所谓“九层之台,起于垒土:合抱之木,生于毫末”。对于繁杂的技术实现方法,“各个击破”是有效学习应用的不二法门。自作者于4年前开始陆续出版数字通信技术的FPGA实现相关著作以来,通过邮件或博客的方式收到了广大读者的很多反馈意见。一些读者直接通过邮件告知书中的内容对工作中提供的直接或间接的帮助;一些读者提出了很多中肯的、有建设性的意见和建议;更多的读者通过邮件或博客交流书中的相关设计问题。归纳起来,不少读者的问题集中在数字锁相环技术的设计及实现方面。在前几本著作中,限于书中内容编排,对通信系统中最困难的锁相环技术阐述得还不够系统全面。目前市场上讲解锁相环技术的图书,主要集中在讲解锁相环的基本工作原理,或介绍一些专门的锁相环集成芯片,因此,将锁相环的工作原理与FPGA实现结合起来讨论,显得十分必要作者在写作本书的过程中,兼顾锁相环技术的理论,以及工程设计过程的完整性,重点突出FPGA设计方法、结构、实现细节,以及仿真测试方法。在讲解理论知识的时候,结合 System View、 MATLAB软件仿真实例,重点从工程应用的角度进行介绍,主要介绍工程设计时必须掌握和理解的知识点,便于读者尽快地找到理论与工程实现之间的结合点。在讲解实例的FPGA实现时,不仅对所有实例给出了完整的程序代码,并且从思路和结构上进行了详细的分析和说明。根据作者的理解,针对一些似是而非的概念,结合工程实例的仿真测试加以阐述,希望能对读者提供更多有用的参考。相信读者按照书中讲解的步骤完成一个个工程实例时,会逐步感觉到理论与工程实现之间完美结合的畅快。随着读者掌握的工程实现技能的提高,对锁相环理论知识的理解也必将越来越深刻,当重新阅读以前学过的原理时,头脑里就更容易构建起理论知识与工程实践之间的桥梁。前言Ⅲ本书的内容安排第1章首先介绍了FPGA的基本知识,以及 Altera公司的主要器件。本章在介绍了FPGA的发展历程、结构及工作原理等基本知识后,对本书所用到的设计语言及工具软件进行了简要介绍,主要包括 Verilog ldl语言、 Quartus、 MATLAB和 System View软件。所谓“工欲善其事,必先利其器”。之所以说是简要介绍,因为这些开发工具本身的功能十分强大,每一种工具都有种类繁多的专门著述进行阐述。随着工程师设计经验的积累,设计水平的提高,越能更全面地掌握设计工具的特点,从而更好地发挥设计工具的性能,以最小的代价设计出理想的产品。好比一把宝剑,只有握在高手的手中才能发挥出最大的威力。第2章介绍了FPGA数字信号处理基础知识。数字信号在FPGA等硬件系统中实现时,因受寄存器长度的限制,不可避免地会产生有效字长效应。设计工程师必须了解字长效应对数字系统可能带来的影响,并在实际设计中通过仿真来确定最终的量化位数、寄存器长度等内容。本章在详细分析了字长效应在FPGA设计中的影响后,对几种常用的运算模块P核进行介绍,讨论了各P核控制参数的设置方法。IP核在FPGA设计中的应用十分普遍,尤其是在数字滤波器等信号处理领域,采用设计工具提供的IP核进行设计,不仅可以提高设计效率,而且可以保证设计的性能第3章从锁相环的组成讲起,深入细致地探讨锁相环关注的信号特性,全面阐述VCO和乘法鉴相器的工作方式。随后借用最简单的反馈电路等基础知识,逐步揭开锁相环跟踪信号相位的神秘面纱。最后通过 System View软件工具,详细仿真分析了一阶锁相环的工作过程,全方位地了解锁相环的工作机理。第4章讨论了一阶锁相环的FPGA实现方法。根据作者的学习经验,这个阶段最期望的一定不是再去理解什么原理公式,学习什么方法思路。好比初次接触到羽毛球时,在网上看了一段中规中矩的教学视频,又刚好买回一支炫丽的球拍,走进球场,实在没有心情再听老师讲什么挥拍动作和击球技巧,只想痛痛快快地上球场打上几拍了。这一章,我们将完成一个完整的一阶锁相环电路的FPGA设计及仿真测试过程第5章又回到理论知识上来。学习的过程通常是学习(理论)一实践(工程)一学习理论)一实践(工程)的循环反复过程,每一次循环都会带来一次提高。前几章,我们主要从环路基本概念的角度,对环路进行了分析和仿真,从而初步建立起对锁相环路工作机理的认识。要深入硏究锁相环技术,必须建立环路的系统模型,而后采用数学方法对模型进行精确的分析。这一章我们从最基本的线性时不变系统知识开始,逐步建立起锁相环路的数学模型,为后续的分析打下坚实的基础。在建立模型的过程中,我们会发现,所有的知识,所有的公式其实都是在大学的一些基础课程中学习过的。第δ章深入讨论锁相环中最关键的组成电路——环路滤波器。我们从最简单的环路滤波器——RC低通滤波器开始,逐步理解环路滤波器对锁相环路性能的决定性作用,并引出本书所研究的重点——由有源积分滤波器组成的理想二阶环路。为了直观说明环路滤波器对锁相环路性能的影响,以及锁相环路参数的设计方法,我们再次采用 System View搭建了锁相环路模型,并通过翔实的仿真数据来说明一些看似深奥的理论知识。第7章开始讨论工程上应用最多的理想二阶环路的FPGA实现。前两章讲了一大堆枯燥的锁相环原理,本质是说理想二阶环具有相当优异的性能。我们在第4章已经对一阶锁Ⅳ锁相环技术原理及FPGA实现相环的FPGA实现进行了详细的讨论,有了前面章节的基础,就可以开始设计二阶环的FPGA电路了,并且要通过FPGA设计后的仿真来验证理论的正确性。二阶锁相环路相比一阶环路来讲,仅仅是多了一个环路滤波器。正是这个环路滤波器,尤其是理想环路滤波器,极大地改善了锁相环路的性能。当我们深刻理解了环路的工作原理,并动手设计出传说中的理想二阶锁相环电路时,会发现整个设计过程原来如此!第8章再次回过头来,静心硏究前面设计过程中还没有解决的一些问题。经过第7章的学习,我们己经可以完成一个完整的理想二阶锁相环路的设计。但在设计过程中,仍有一些参数的取值没有明确的依据,例如环路的固有振荡频率ωn该如何取值?环路的捕获带宽与捕获时间如何设计?当环路中存在噪声时(前面章节的设计都还没有涉及这个问题,但噪声又是电子系统中无法避免的),又该如何设计并计算环路的抗干扰性能呢?因此,在完成数字二阶环的FPGA初步设计之后,我们需要再回过头来更深入分析一下锁相环路性能,最终找到锁相环路参数的设计依据。第9章是一个完整的应用锁相环实现信号解调的工程应用实例。经过前面章节的讨论,我们对锁相环的理论知识、仿真、设计及FPGA实现都有了比较充分的认识。在无线通信技术中,在接收端,应用锁相环获取相干载波是最为广泛的应用之一。本章以锁相环解调PSK调制信号为例,应用前面章节讨论得出的结论,完整地给出锁相环的参数设计、仿真测试,以及FPGA实现过程关于FPGA开发环境的说明众所周知,目前两大商 Xilinx和 Altera的产品占据全球90%以上的FPGA市场。可以说,在一定程度上正是由于两家FPGA公司的相互竞争态势,有力地推动了FPGA技术的不断发展。虽然HDL的编译及综合环境可以采用第三方公司所开发的产品,如 Modelsim、Synplify等,但FPGA器件的物理实现必须采用各自公司开发的软件平台,无法通用。 Xilinx公司目前最新的开发工具为 Vivado Design Suite套件, Altera公司目前的主流开发平台是Quartus系列套件。与FPGA开发平台类似,HDL也存两种难以取舍的选择:VHDL和Verilog hdl。如何选择开发平台以及HDL语言呢?其实,对于有志于从事FPGA技术开发的技术人员,选择哪种平台及HDL语言并不重要,因为两种平台具有很多相似的地方,精通一种HDL语言后,再学习另一种HDL语言也不是一件困难的事。通常来讲,可以根据周围同事朋友、同学或公司的主要使用情况进行选择,这样在学习的过程中,可以很方便地找到能够给你指点迷津的专业人士,从而加快学习进度。本书采用的是Aera公司的FPGA器件作为开发平台,采用 QuartusⅡ2.1作为开发环境,采用 Verilog hDl语言作为实现手段。由于 Verilog hdl语言并不依赖于某家公司的FPGA产品,因此本书的 Verilog HDL程序文件可以很方便地移植到 Xilinx公司的FPGA产品上。如果程序中应用了P核资源,两家公司的P核通常是不能通用的,这就需要根据IP核的功能参数,在另外一个平台上重新生成IP核,或编写 Verilog HDl代码来实现。有人曾经说过,“技术只是一个工具,关键在于思想。”将这句话套用过来,对于本书来讲,具体的开发平台以及HDL语言只是实现数字通信技术的工具,关键在于设计的思路和方法。因此,读者完全不必要过于在意开发平台的差别,相信只要掌握本书所讲述的设前言计思路和方法,加上读者已经具备的FPGA开发经验,采用任何一种FPGA平台都可以很快地设计出满足用户需求的产品。如何使用本书木书在讨论锁相环的基木概念及工作原理时,主要用到了 System View5.0版本软件。关于 System View5.0软件的特点及使用方法在本书第1章进行了简要介绍。 System View软件使用起来非常简单,书中的实例也只用到了一些基本功能。如果读者以前没有使用过这款软件的话,建议先用几个小时了解一下其基本用法,这样就可以动手对本书提供的实例程序运行仿真。当然,由于 System View仅用来说明锁相环的工作原理,因此,读者也可以完全不去运行这些实例程序,只要理解书中提供的仿真结果即可。相信大部分工科院校的学生和电子通信的从业人员对 MATLAB软件都会有一个基本的了解。由于它的易用性及强大的功能,已经成为数学分析、信号仿真、数字处理必不可少的工具。由于 MATLAB具有大量专门针对数字信号处理的常用函数,如滤波器函数、傅里叶分析函数等,十分有利于对一些通信的概念及信号进行功能性仿真,因此,在具体讲解某个实例时,通常会采用 MATLAB作为仿真验证工具。虽然书中的 MATLAB程序相对比较简单,主要应用一些数字信号处理函数进行仿真验证,如果读者没有 MATLAB的知识基础,建议最好还是先简单学习一下 MATLAB的编程概念及基本语法。考虑到程序及函数的兼容性,书中所有 MATLAB程序的开发验证平台均为 MATLAB R2014a版软件。在讲解具体的FPGA工程应用实例时,通常会先采用 MATLAB对所需设计的工程进行仿真,一方面仿真算法过程及结果,另一方面生成FPGA仿真所需要的测试数据;然后在QuartusⅡ平台上编写 Verilog hDL程序对实例进行设计实现,为便于讲述,通常会先讨论程序的设计思路,或者先给出程序清单,再对程序代码进行分析说明;完成程序编写后,需要编写 Test Bench测试激励文件,根据所需产生输入信号的种类,可以直接在 TestBench文件中编写代码来产生输入信号,也可以通过读取外部文本文件的方式来产生输入信号;接下来就可以采用 Modelsim工具对 Verilog HDL程序进行仿真,查看 Modelsim仿真波形结果,并根据需要将仿真数据写入外部文本文件中,通常还会对仿真波形进行讨论,分析仿真结果是否满足要求;如果 Modelsim波形不便于精确分析测试结果,则需要再次编写MATLAB程序,对 Modelsim仿真结果数据进行分析处理,最终验证FPGA设计的正确性。本书主要以工程应用实例的方式讲解锁相环技术的原理及FPGA实现方法和步骤。书中所有实例均给出了完整的程序清单,限于篇幅,不同工程实例中的一些重复或相似的代码没有完全列出,随书配套的网络光盘上收录了本书所有实例的源程序及工程设计资源并按章节序号置于光盘根目录下。本书在编写工程实例时,程序文件均放置在“D: PllPrograms”的文件夹下,读者可以先在本地硬盘下建立“D: PllPrograms”文件夹,而后将配套网络光盘中的程序压缩包解压至该文件夹下,大部分程序均可直接运行。需要说明的是,在部分工程实例中,需要由 MATLAB产生FPGA测试所需的文本数据文件,或者由 MATLAB读取外部文件进行数据分析,同时FPGA仿真的 TestBench文件通常也需要从指定的路径下读取外部文件数据,或将仿真结果输出到指定的路径下。对于 Modelsim仿真来讲,作为测试输入的文本文件必须放置在当前FPGA工程目录下的“ simulationmodelsim”路径下。因此,读者在用 MATLAB生成测试数据后,需要将生成的文件复制到指定的路径Ⅵ|锁相环技术原理及FPGA实现下,以获取正确的仿真结果。致谢有人说,每个人都有他存在的使命,如果他的使命迷失了,也就失去了他存在的价值。不只是每个人,每件物品也都有其存在的使命。对于一本书来讲,其存在的使命就是被阅读,并给阅读者带来收获作者在写作本书的过程中查阅了大量的资料,在此对资料的作者及提供者表示衷心的感谢。由于写作本书的缘故,重新阅读一些经典的数字通信理论书籍时,再次深刻感受到前辈们严谨的治学态度和细致的写作作风。在此,感谢父母,多年来一直陪伴在我的身边,由于他们的默默支持,使得我能够在家里专心致志地写作;感谢我的妻子刘帝英女士,她不仅是一位尽心尽职的优秀母亲,也是一位严谨细致的科技工作者,同时也是本书的第一位读者,在工作之余对本书进行了详尽而细致的校对;四年前初次编写数字通信的FPGA设计与实现系列图书时,女儿才刚上小学,转眼她已经上五年级了,她最爱看书和画画,小脑袋里装着越来越多的她自己的想法。FPGA技术博大精深,本书虽尽量详细讨论了锁相环技术的原理及FPGA实现相关内容,仍感觉到难以详尽阐述所有技术细节。相信读者在实际工程应用中经过不断的实践、思考及总结,一定可以快速掌握其工程设计方法,提高应用FPGA进行工程设计的能力。由于作者水平有限,不足之处在所难免,敬请读者批评指正。欢迎大家就相关技术问题进行交流,或对本书提出改进意见及建议为便于读者交流,并及时发布相关资料及信息,本书特开设了交流博客,读者也可以通过邮件与作者进行技术交流。交流空间:http://duyongcn.blog163.com,作者邮箱:duyongcn@sina.cn。杜勇2016年4月前言目录Contents第1章设计环境及开发平台介绍1.1FPGA基础知识····+1.1.基本概念及发展历程……………·,··,,2241.1.2FPGA的结构和工作原理……1.1.3FPGA在数字信号处理中的应用“·““““““………121.2 Altera器件简介…1213 Verilog HDL语言简介………………………………………151.3.1HDL语言简介…………151.3.2 Verilog HDL语言特点161.3.3 Verilog HDL程序结构…卡““为“节“““”““牛……………………1714 QuartusⅡ开发套件…………1814. I Quartus I开发套件简介……………………………………………………1814.2 Quartus II软件的用户界面191.5 Modelsim仿真软件…221.6 MATLAB软件……………………………………………………·241.6.1 MATLAB软件介绍………2416.2 MATLAB工作界面………………………………………241.6.3 MATLAB的特点及优势……251.64 MATLAB与 Quartus的数据交互………2717 System View软件…2817.1 System View简介……281.7.2 System View工作界面……291.8小结——欲善其事先利其器…32第2章FPGA数字信号处理基础……332.1FPGA中数的表示…2.1.1莱布尼兹与二进制……………………………………………………………342.1.2定点数表示352.1.3浮点数表示…………·444,4·,,+3622FPGA中数的运算……02.2.1加/减法运算…………………………………4022.2乘法运算……4322.3除法运算22.4有效数据位的计算目录IX23有限字长效应4723.1字长效应的产生因素4723.2AD转换的字长效应4823.3系统运算中的字长效应………………………………………………4924FPGA中的常用处理模块24.1加法器模块…………………………………………………5124.2乘法器模块……2.4.3除法器模块……4.44444、562.4.4浮点运算模块572.5小结—四个过桥人………59第3章锁相环为什么能够跟踪相位613.1锁相环的组成…………623.1.1关注信号的相位分量……………………………………623.1.2VCO是一个积分器件3.1.3正弦鉴相器还是余弦鉴相器653.1.4环路滤波器的作用…………683.2从负反馈电路理解锁相环…693.2.1反馈电路的概念3.2.2负反馈电路的控制作用703.2.3锁相环与基本负反馈电路的区别…………………………………713.2.4分析锁相环的工作状态…33最简单的锁相环………………………1733.3.1一阶锁相环的 System View模型733.3.2确定VCO输出的同相支路434锁相环的基本性能参数………………………………………………773.4.1捕获及跟踪过程3.4.2环路的基本性能要求..,…………………………783.5分析一阶环的基本参数…3.5.1数学方法求解一阶环…………………………793.5.2图解法分析一阶环工作过程……813.53工程设计与理论分析的差异…3.54遗忘的参数一鉴相滤波器截止频率……………………3.6小结——千条路与磨豆腐87第4章一阶锁相环的FPGA实现4.1一阶环的数字化模型…………4.1.1工程实例需求……………………………………………………………904.1.2数字鉴相器914.1.3数控振荡器…4.1.4计算环路增益…………944.2数字鉴相滤波器设计………………………………X锁相环技术原理及FPGA实现
- 2021-05-06下载
- 积分:1
-
matlab数字图像处理增强对比度
【实例简介】对图像进行数字图像处理,使图像增强对比度
- 2021-11-06 00:32:58下载
- 积分:1
-
c++笔试面试之网络和多线程
该文档是我总结的c++笔试面试通常会问的一些问题。另外可以从我的资源目录下找c++数据结构与算法,c++笔试面试基础两部分材料,综合这三个材料一起看,我相信大家一定尽快找到工作。ClientServerFIN WAIT 1IFIN MCLOSE WAITack M+1FIN WAIT 2LAST ACKFIN NTIME WAITACK=1 ack=K+CLOSEDm由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送个FIN来终止这·方向的连接,收到个FIN只是意味着这方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此第一次挥于Client发送个HN,用来关闭 Client到 Server的数据传送, Client进入 FIN WA1状第二次挥手Server收到FIN后,发送一个ACK给 Clien,确认序号为收到序号+1(与SN相同,一个FIN占用一个序号), Server进入 CLOSE WAIT状态。第三次挥手Server发送一个FIN,用来关闭 Server到 Client的数据传送, Server进入 LAST ACK状态。第四次挥手Client收到FIN后, Client进入 TIME WAIT状态,接着发送一个ACK给 Server,确认序号为收到序号+1, Server进入CL0SED状态,完成四次挥手。5.tcp为什么建立连接是三次握手,而关闭连接却是四次挥手呢?当主杋A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FN给主机B;主机B收到A发送的F⊥N,表示收到了,就会发送ACK回复;但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FⅣN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A:;A收到B发米的FIN,知道B的数据也发送完∫,回复ACK,A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。6.TCP头大小,包含字段?TCP协议头最少20个字节,包括TCP的源端口,目的端口,序列号,应答号等等。7.tcp与udp的区别?为什么TCP要叫做数据流?1).基于连接与无连接2).对系统资源的要求(TCP较多,UDP少)3).UDP程序结构较简单4).流模式与数据报模式5).TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证6).TCP有拥塞控和流量控制,UDP没有TCP提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丟弃重复数据,检验数据,沇量控制等功能,保证数据能从端传到另·端UDP是一个简单的面向数据报的运输层协议。∪DP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。山于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快8使用udp和tcp进程网络传输,为什么tcp能保证包是发送顺序,而udp无法保证?因为TCP发送的数据包是按序号发送,有确认机制和丢失重传机制,而udp是不可靠的发送机制,发送的对应端口的数据包不是按顺序发送的。9tcp三次握手的, accept发生在三次握手哪个阶段?三次握手:C--->SYNK>ACK K+1 SYN JC->ACK]+1DONELclient的 connect引起3次握于server在 socket,bind, listen后,阻塞在 accept,三次握手完成后, accept返回一个fd,TCP服务器端sackettTC客户端bindosten)connecto建立连接阻寒直到有客户端连接请求数据writereadr处理请求回应数据readr结束连接readr yclose10.流量控制和拥塞控制的实现机制数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制,以免数据丢失。流量控制是一种解决发送端与接收方吞吐量不匹配问题的机制。网络拥瘧现象是指到达通信了网中杲部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个冈络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机。11.滑动窗口的实现机制滑动窗凵机制是tcp流量控制的一种机制。滑动窗口分为发送窗凵和接收窗口,发送窗口会根据接受窗口返回的ack中的大小来确定发送数据多少,如果ack返回可接受为零时,发送窗口不发送数据,然后启动定时器,一定时间内给接收端发送探测报文。为了传递效率提扃,发送数据吋会尽量次发送多个字节,这里会通过算法控制接收窗口发送窗口接收窗口取决发送窗口取决于对于本段应用端接收窗囗应用应用接收窗口取决发送窗口取决于对于本段应用端接收舍口发送窗口接收窗口字节流方向窗囗关联方问发送窗口中的四个概念:已发送并收到确认;凵发送但未收到确认;允许发送但未发送;不允许发送。每次成功发送完数据后,发送窗口都会根据接受窗口返冋的ack大小来调整窗口大小后浩前沿前移收缩前移A的发送窗凵=20E区图国时国时网國國回回区画乎图已发送井不允许发送收到确认允许发送的序号B期望收到的序号图5-15根据B给出的窗口值,A构造出自己的发送窗口12. linux的五种I0模式/异步模式1)同步阻塞I/O2)同步非阻塞I/O(只能阻塞个io)3)同步I/O复用模型(可以阻塞多个i,用一个进程/线程调用多个io,其实是复用进稈/线程)4)同步信号驱动I/O5)异步I/O模型3.网络编程设计模式, reactor/ proactor/半同步半异步模式?reactor模式:同步阻塞I/O模式,注册对应读写事件处理器,等待事件发生进而调用事件处理器处理事件。 proactor模式:异步I/O模式。 Reactor和 Proactor模式的主要区别就是真正的读取和写入操作是有谁来完成的, Reactor中需要应用程序自己读取或者写入数据, Proactor模式中,应用程序不需要进行实际读写过程。Reactor是:主线程往epo‖l核上注册 socket读事件,上线程调用 epoll_wait等待 socket上有数据可读,当 socket上有数据可读的时候,主线程把 socket可读事件放入请求队列。睡眠在请求队列上的某个工作线程被唤醒,处理客户请求,然后往epo‖!内核上注册 socket写请求事件。主线程调用 epoll_wait等待写请求事件,当有事件可写的时候,主线程把 socket可写事件放入请求队刎。睡眠在请求队列上的工作线程被唤醒,处理客户请求。Proactor主线程调用 aio read函数向内核注册 socket上的读完成事件,并告诉内核用广读缓冲区的位置,以及读完成后如何通知应用程序,主线程继续处理其他逻辑,当 socket上的数据被读入用户缓冲区后,通过信号告知应用程序数据已经可以使用。应用程序预先定义好的信号处理凼数选择一个工作线程来处理客户请求。工作线程处理完客户请求之后调用ao wrⅰte函数向内核注册 socke写完成事件,并告诉内核写缓冲区的位置,以及写完成时如何通知应用程序。主线程处玛其他逻辑。当用户缓存区的数据被写入 socket之后内核向应用程序发送一个信号,以通知应用程序数据已经发送完毕。应用程序预先定义的数据处理函数就会完成工作。半同步半异步模式上:层的任务(如:数据库查询,文件传输)使用同步IO模型,简化了编写并行程序的难度而底层的任务(如网络控制器的中断处理)使用异步I/O模型,提供了执行效率14.1inux下io多路复用的方案 select、poll、epol1的区别select:利用一个数组结构(最大1024)来存储需要检测的描述符,每次调用需要清空数组结构后重新存入新的描述符文件,然后遍历需要操作的描述符。可以用仨检测单个描述符可以理解为拉取pol:也是利用数组结构存储,但是没有描述符个数限制,而且每次调用时不需要清空存储描述符结构数组。可以用于检测大量描述符的情况。可以理解为拉取epoll:是 select/po!的升级版本,它的机制是可以监视大量的描述符,当有需要连接时将改描述符存放到队列中,而epol只监视和执行队列中即可。可以用于大量并发连接中只有少量活跃的情况。可以理解为推送http://blog.csdnnet/lookatthestars/article/details/5210877315.epo11哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认epo‖有EPoL和 EPOLLET两种触发模式,LT是默认的模式,ET是高速"模式。LT模式下,只要这个fd还有数据可读,每次 epoll_wait都会返回它的事件,提醒用户稈序去操作,而在ET(边缘触发)模式中,它只会提示一次,直到下次再有数据流入之前都不会再提小」,无论fd中是否还有数据可读。所以在ET模式下,read一个fd的时候一定要把它的 buffer读光,也就是说一直读到read的返回值小于请求值。也就是说在LT模式的情况下‘定要确认收发的数据包的 buffer是不是足够大如果收发数据包大小大于 buffer的大小的时侯就可能会出现数据丢失的情况。16. Boost.asio、 libevent、1ibev简介。Boost.asio是一个跨平台的C++库,用于网络和底层I/0编程,可以在I/0对象(如socket)上执行同步和异步操作。 boost.asio的跨平台性原理是在win系统(支持I0CP)linux系统(支持epo11)。 boost:asio将整个异步平台抽象成 boost::asio: lo service,用work控制 1o service生命周期,通知它是否结束,只要对象work( 1o servi ce)存在,10 service就不会结束。利用 buffer类存储数据libevent是一个C语言与的网络库,官方主要支持的是类 linux操作系统,最新的版本添加了对 windows的I0CP的支持由于I0CP是异步I0,与 linux下的POL模型, EPOLL型,还有 freebsd的 KQUEUE等这些同步模型在用法上完全不一致,所以使用方法也不样,就好比ACE中的 Reactor和 Proactor模式一样,使用起来需要转变思路。如果对性能没有特别的要求,那么使用 Libevent中的 select模型来实现跨平台的操作, select模型可以橫跨 windows, linux,unix, solaris等系统。libel是一个C语言写的,只支持1inux系统的库,我以前研究的时候只封装了EPOL模型,不知道现在的新版有没有改进。使用方法类似 libevent,但是非常简洁,代码量是最少的一个库,乜貮几千行代码。显然这样的代码跨平台肯定是无法支持的了,如果你只需要在1inux下面运行,那用这个库也是可以的。17. connect可能会长时间阻塞,怎么解决?1.使用定时器;(最常用也最有效的·种方法2.采用非阻塞模式:设置非阻塞,返回之后用 select检测状态18. keepalive是什么东西?如何使用?keepalive,是在TCP中一个可以检测死连接的机制。1).如果主机可达,对方就会响应ACK应答,就认为是存活的。2).如果可达,但应用程序退岀,对方烑发RST应答,发送TCP撤消连接。3).如果可达,但应用程序崩溃,对方就发FIN消息。4).如果对方主杋不响应ack,rst,继续发送直到超时,就撤消连接。默认二个小时。19. socket什么情况下可读?1. socket接收缓冲区中己经接收的数据的字节数大于等于 socket接收缓冲区低潮限度的当前值;对这样的 socket的读操作不会阻塞,并返回一个大于0的值(准备好读入的数据的字节数)2连接的读一半关闭(即:接收到对方发过来的FIN的TCP连接)并且返回03.s0cket收到了对方的 connect请求已经完成的连接数为非0这样的 socket处于可读状态;4.异常的情况下 socket的读操作将不会阻塞,并且返同一个错误(-1)。20. socket编程,如果 client断电了,服务器如何快速知道?使用定时器(适合有数据流动的情况);使用sock吐t选项SO_ KEEPALIVE(适合没有数据流动的情况);1)、自己编写心跳包程序,简单的说就是自己的程序加入一条线程,定时向对端发送数据包,看是否有ACK,根据ACK的返回情况来管理连接。此方法比较通用,般使用业务层心跳处理,灵活可控,但改变了现有的协议2)、使用TCP的 keepalive机制,∪NX网络编程不推荐使用SO_ KEEPALIVE米做心跳检测。keepalive原理:TCP内嵌有心跳包,以服务端为例,当 serve检测到超过一定时间(/proc/sys/net/ipv4/tcp_ keepalive_ time7200即2小时)没有数据传输,那么会向client端发送一个 keepalive packet21.如果 select返回可读,结果只读到0字节,什么情况?某个套接字集合中没有准备好,可能会 select内存用 FD CLR清为0.22.网络中,如果客户端突然掉线或者重启,服务器端怎么样才能立刻知道?若客户端掉线或者重新启动,服务器端会收到复位信号,每一种tcp/ip得实现不一样,控制机制也不·样。23.TTL是什么?有什么用处,通常那些工具会用到它?ping? traceroute? ifconfig?netstat?TTL是 Time to live,每经过一个路由就会被减去一,如果它变成0,包会被丢掉。它的主要目的是防止包在有回路的网络上死转,浪费网络资源。ping和 traceroute用到它。24请说出http协议的优缺点1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务吋,只需传送请求方法和路径,通信速度很快。3.灵活:HTTP允许传输任意类型的数据对象。4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断廾连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,导致每次连接传送的数据量增大。缺点就是不够安全,可以使用hps完成使用25大规模连接上来,并发模型怎么设计Epol1+线程池(epo11可以采用 libevent处理)26.tcp怎么做到不丢包。TCP提供超时重发(每一个seq后都有ack,计时时间到后重发seq),丢重复数据(通过判断seq和ack的大小,如果seq比ack小说明发过了),检验数据(通过tcp的伪首部),流量控制(利用滑动窗口实伣流量控制)等功能,保证数据能从一端传到另一端。27.TCP的确认重发机制A发—B/a向b发送数据B确认-A//b收到数据后发送给a确认包A-在重发数据中将发送成功的数据删掉28.I0CP和epo1l的联系与区别?联系:两者都是高效的io模型,都是基于事件驱动。区别:TOCP用在 Windows上,epo11用在1inux上;IQCP本质是异步非阻塞的,而epo1l是同步非阻塞的;1OCP是当事件完成时再通知,而 epoll是当事件满足处理要求是通知处理。boost中的asio网络模块的跨平台性原理是在win系统(支持IOCP),1inuκ系统(支持epollhttps://yg.aliyun.com/articles/53621进程与线程1.进程之间的通信无名管道:单向通信,只能亲戚关系才能传递,般用在父了进程之间有名管道:单向通信,可以用在任意两个进程之间通信。信号量:是一种计数器,主要用于资源共亨,用在多个进程或者进程内多个线程之间同步手段共享内存:一个进程创建共多个进程使用,和信号一起使用在进程同步与通信。信号:比较复朵的·种通信。套接字:消息队列:客服信号传递信息少,管道缓冲区受限。2.线程同步临界区,互斥对象,事件,信号量3.多线程和多进程的区别1)进程数据是分丌的:共享复岽,需要用IPC,同步简单;多线程共享进程数据:共享简单,同步复杂2)进程创建销毁、切换复杂,速度慢:线程创建销毁、切换简单,速度快3)进程占用内存多,CPU利用率低;线程占用内存少,CPU利用率高4)进程编程简单,调试简单;线程编程复杂,调试复杂5)进程间不会相互影响;线程个线程挂掉将导致整个进程挂抻6)进程适应于多核、多机分布;线程适用于多核线程所私有的:线程jd、寄存器的值、栈、线程的优先级和调度策略、线程的私有数据、信号屏蔽字、ero变量。4.多线程锁的种类有哪些?a.互斥锁( mutex)b.递归锁C.自旋锁d.读写锁5.自旋锁和互斥锁的区别?白旋锁中当锁被其他线程占用时,其他线程并不是睡眠状态,而是不停的消耗CPU,获取锁;互斥锁则不然,保持睡眠,直到互斥锁被释放溦活。自旋锁,递归调用容易造成死锁,对长时间才能获得到锁的情况,使用自旋锁容易造成CPU效率低,只有内核可抢占式或SMP情况下才真正需要自旋锁6.多线程程序架构,线程数量应该如何设置?应尽量和CPU核数相等或者为CPU核数+1的个数7.有一个计数器,多个线程都需要更新,会遇到什么问题,原因是什么,应该如何做?如何优化?有可能一个线程更新的数据已经被另外一个线程更新了,更新的数据就会出现异常,可以加锁,保证数据史新只会被一个线程完成
- 2020-11-27下载
- 积分:1
-
智能车道路边缘追踪算法
全国智能车比赛摄像头组别道路边缘提取算法,全局扫描和边缘追踪都有
- 2020-11-03下载
- 积分:1
-
C# UDP NAT
【实例简介】VS2015,基于.net 4.0开发,含NAT服务端、客户端源码。
本程序仅做UDP NAT穿透通信示例,应用到项目中还需要自己再封装,做其他处理。
- 2021-11-06 00:32:45下载
- 积分:1
-
基于模板匹配的人脸检测-教程-matlab代码
基于模板匹配的人脸检测-教程-matlab代码,包括m文件,图片
- 2020-12-03下载
- 积分:1