`
- 浏览:
14850 次
- 性别:
-
TCP:传输控制协议
- TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。
- TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
- 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
- TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。
- 总结:TCP提供了一种可靠的面向连接的字节流运输层的服务,TCP是将用户数据打包构成报文段,它发送数据后启动一个定时器,另一端对收到的数据进行确认,对失序的数据进行重新排序,丢弃重复数据;TCP提供端到端的流量控制,并计算和验证一个强制性的端到端检验和.
- TCP首部示意图:
UDP:用户数据报协议
- UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
- UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象,实际应用中要求在程序员编程验证。
- UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。
- 欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。
- 总结:UDP是一个简单的协议,它的正式规范是RFC768[Pastel 1980],只包含了三页内容,它向用户进程提供的服务位于IP层之上,包括端口号和可选的检验和.我们用UDP来检查检验和并观察分片是如何进行的.
- UDP首部示意图:
IP:网际协议
- IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
- 高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。
- IP首部示意图:
数据格式:
- 数据帧:帧头+IP数据包+帧尾 (帧头包括源和目标主机MAC地址及类型,帧尾是校验字)
- IP数据包:IP头部+TCP数据信息(IP头包括源和目标主机IP地址、类型、生存期等)
- TCP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校验字等)
数据进入协议栈时封装的过程:
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
标题“初涉通信”暗示了这篇博文可能是关于通信技术的基础介绍,特别可能涉及通信系统的基本原理、协议或者通信软件的开发。由于标签包含了“源码”和“工具”,我们可以推测内容可能涉及到通信软件的源代码分析,...
USB(Universal Serial Bus)是一种广泛应用于现代电子设备的接口标准,允许设备与计算机进行...随着对USB协议的深入理解,开发者可以创建自定义的USB设备,实现特定功能。通过逐步学习和实践,USB编程将不再那么棘手。
3. 网络协议栈:支持各种网络协议,如TCP/IP,使得Linux具备网络通信能力。 4. 虚拟文件系统(VFS):提供一个统一的接口,屏蔽不同文件系统的差异。 5. 设备驱动(DD):与硬件设备交互,控制硬件设备的运作。 ...
在小型网络环境中,由于网络拓扑结构相对固定,所以配置静态路由能够有效地控制数据流量,避免了动态路由协议可能带来的额外开销。 在宽带接入日益普及的今天,家庭和小企业常常需要通过局域网共享宽带,随着局域网...
STM32_USB_HID_学习心得:基于STM32 的USB程序开发笔记、修改STM32的USB例程为自己所用、初涉USB,初学者USB入门总结——枚举。 STM32_固件库说明文档:STM32_USB_Demo例子的中文说明文档。 STM32F107 鼠标USB改 HID...
《TCP/IP详解卷123合集》是网络通信领域极具权威的一套经典教程...无论你是初涉网络编程的新手,还是已经在该领域有一定经验的开发者,这套书都能提供宝贵的指导,助你进一步提升专业水平,攀登程序员进阶之路的高峰。
总之,"FSL_LIN_2.x_STACK_Package_4.5.9.7z"是一份全面的NXP LIN通信开发资源,无论你是初涉LIN通信还是寻求优化方案,都能从中受益。通过深入学习和实践,你可以更好地掌握NXP芯片在LIN通信中的应用,提升你的...
STM32_USB_HID_学习心得:基于STM32 的USB程序开发笔记、修改STM32的USB例程为自己所用、初涉USB,初学者USB入门总结——枚举。 STM32_固件库说明文档:STM32_USB_Demo例子的中文说明文档。 STM32F107 鼠标USB改 ...
无论你是初涉Python网络编程,还是已经在开发复杂的网络应用,了解和掌握`sprockets.http`都将对你大有裨益。通过这个库,你可以更好地理解和利用HTTP协议,提升你的项目效率,构建出更强大的网络应用程序。
总的来说,libmodbus-3.1.0是理解和应用Modbus协议的强大工具,无论你是资深的系统集成商,还是初涉工业通信的新手,都能从中受益匪浅。通过深入研究和利用这个库,你可以轻松地将Modbus通信功能集成到你的项目中,...
综上所述,《C#网络应用高级编程》是一份覆盖广泛、深度适宜的学习资源,无论你是初涉网络编程还是寻求提升,都能从中受益。通过深入学习和实践这些章节中的内容,你将能够熟练掌握C#在网络应用开发中的各种高级技巧...
《TCP/UDP程序调试助手——网络程序开发调试的得力伙伴》 在计算机网络编程领域,TCP(传输控制...无论你是经验丰富的程序员还是初涉网络编程的新手,都能从中受益,提升工作效率,更好地理解和掌控网络通信的世界。
这本书面向具有中级至高级水平的Python程序员,无论你是初涉网络编程,还是寻求提升现有技能,这本书都是不可或缺的参考资料。书中的源代码可以在网上找到,同时还有配套的电子书供读者参考和实践。 总之,《Python...
无论你是初涉爬虫领域的探索者,还是希望提升技能的开发者,本教程都将为你提供一盏明灯,照亮你通往数据世界深处的道路。让我们一起在PHP的世界里,编织出一张张捕捉信息的网,开启数据驱动决策的新篇章。
对于那些初涉GCode工具或者想要提升雕刻和写字机控制体验的人来说,GrblController361中文版无疑是一个理想的选择。 首先,我们需要理解什么是Grbl。Grbl是一个开源的、轻量级的CNC控制器固件,它能够接收来自...
总而言之,《Java网络高级编程》这本书全面覆盖了Java在网络编程领域的各个方面,无论你是希望提升现有技能的开发者,还是初涉网络编程的新手,都能从中获益匪浅。通过深入学习,你将能够利用Java的强大功能,构建出...
总的来说,tinyhttpd是一个理想的起点,无论你是初涉网络编程,还是希望巩固你的HTTP和C++知识,都能从这个项目中受益。通过实际操作和修改tinyhttpd,你可以更深入地理解网络服务的工作原理,为构建更复杂的Web应用...
对于那些初涉通讯编程的开发者来说,这是一个非常实用的话题。 首先,让我们理解串口通信的基础。串口通信(Serial Port Communication)是一种在计算机及其外围设备之间通过串行数据传输的方式进行通信的技术。在...
在C#网络编程中,`System.Net.Sockets`命名空间扮演着核心角色,它提供了对Windows...无论你是熟悉Winsock API还是初涉网络编程,C#的`Socket`类都能提供一个结构化的、易于理解的框架,帮助你实现复杂的网络通信需求。