| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> ZYNQ -Lwip和TCP/IP简介 -> 正文阅读 |
|
[网络协议]ZYNQ -Lwip和TCP/IP简介 |
TCP/IPTCP/IP 通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。浏览器与服务器都在使用 TCP/IP 协议, E-Mail 使用 TCP/IP 协议,电子邮件也通过 TCP/IP 协议来发送和接收邮件。因特网地址是 TCP/IP 协议。因特网地址比如 “42.120.45.233” 就是一个 TCP/IP 协议。 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
TCP 使用固定的连接TCP 用于应用程序之间的通信。当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。UDP 和 TCP 很相似,但是更简单,同时可靠性低于 TCP。 IPIP 是无连接的,IP 用于计算机之间的通信。IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。这样,IP 就降低了对网络线路的需求。每条线可以同时满足许多不同的计算机之间的通信需要。通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。IP 负责将每个包路由至它的目的地。 IP地址每个计算机必须有一个 IP 地址才能够连入因特网。每个 IP 包必须有一个地址才能够发送到另一台计算机。IP 地址包含 4 组数字:TCP/IP 使用 4 组数字来为计算机编址。每个计算机必须有一个唯一的 4 组数字的地址。每组数字必须在 0 到 255 之间,并由点号隔开,比如:192.168.1.60。32 比特 = 4 字节TCP/IP 使用 32 个比特来编址。一个计算机字节是 8 比特。所以 TCP/IP 使用了 4 个字节。一个计算机字节可以包含 256 个不同的值,现在,应该知道了为什么 TCP/IP 地址是介于 0 到 255 之间的 4 组数字。 LWIP简介LWIP 是瑞典计算机科学院(SICS)的 Adam Dunkels 等开发的一个小型开源的 TCP/IP 协议栈,是 TCP/IP的一种实现方式。 LWIP 是轻量级 IP 协议,有无操作系统的支持都可以运行。 LWIP 实现的重点是在保持TCP 协议主要功能的基础上减少对 RAM 的占用,它只需十几 KB 的 RAM 和 40K 左右的 ROM 就可以运行 , 这 使 LWIP 协 议 栈 适 合 在 低 端 的 嵌 入 式 系 统 中 使 用 。
编程接口方式lwip(xilinx中的lib)提供二种用户编程接口方式: raw API 和 socket API。 TCP和UDPlwIP支持的传输层协议包括:
设计程序前,我们首先要选择使用UDP还是TCP。 **UDP:**优点是开销更少,设计者自己选择消息大小;缺点是没有提供安全的通信路径,该协议不能通知用户对方是否收到了消息。 **TCP:**优点是提供了一个安全的通信路径,当对方成功收到消息时用户会收到通知;缺点是开销更大,还会自动选择消息大小。 UDP:确保传递的数据块不会小于网络所允许的最大数据包,比如在标准以太网中,使用udp_send一次发送1472个字节,以最大化一个包中数据字节和报头字节的比,同时最小化网络中包间的间隔。 **TCP:**虽然TCP可以将多个tcp_write调用的数据合并到一个包中,但由于这个包被分割到多个pbuf中,可能会降低性能。由于TCP需要将数据包存储起来重新传输,直到远程主机发出应答信号,所以在tcp_write/tcp_output返回后花费几秒的时间。如果要发送小块数据,应该关掉nagle算法,让堆栈立即发送数据,而不是等待更多数据形成更大的数据包后才发送数据。应该避免发送小块数据,总是等待应答会降低性能。 TCP编程 LWIP配置步骤使用lwIP的程序,无论TCP还是UDP,在进入while(1)循环前,都会有这样一个配置流程:
TCP编程RAW API函数一览表初始化在使用任何TCP函数前,必须先调用**lwip_init()函数。此后必须每隔TCP_TMR_INTERVAL(通常取250ms)调用一次tcp_tmr()函数。某些版本的lwIP只需要将sys_check_timeouts()**函数添加到主循环中,它会处理栈中所有协议的定时器。Xilinx中还是需要通过配置处理器的定时器来调用tcp_tmr()。 TCP连接步骤一个TCP连接由一个协议控制块(Protocol Control Block,PCB)做标识。有两种建立连接的方法。 被动连接(监听)方法,相当于作为服务端(server):
主动连接方法,相当于作为客户端(client):
发送TCP数据在TCP连接上发送数据的步骤如下:
接收TCP数据TCP数据接收是基于回调的,当新数据到达时,将调用应用程序指定的回调函数。TCP协议设定了一个窗口(window),该窗口告诉发送主机它可以在连接上发送多少数据。所有连接的窗口大小都是lwipopts.h中设置的TCP_WND值。当应用程序处理了传入的数据后,必须调用tcp_recved()函数,以指示TCP可以增加接收窗口。 lwIP 会话建立顺序图由于 raw TCP 实现主要通过回调执行, 因此其操作往往与各个消息的接收和处理密切相关。因此,熟
当接收回调函数返回时,lwIP栈会自动启动数据的发送,远程客户端的前一个数据包的应答将于第一个传出的数据段相结合。如果在其它地方调用tcp_write,则可能需要调用tcp_output来启动数据传输。 下面再给出一个lwIP作为客户端连接远程服务器的序列图:
references
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 13:15:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |