uip源码分析(9)

2019-08-26 18:23

定义于uipopt.h中的297行. 引用于uip_process().

15. #define UIP_PINGADDRCONF 设定ping IP地址.

如果设定此项,则uip使用ping包来设定其IP地址.此时uip启用时会只有一个空的Ip地址,而把收到的第一个ping包设为自己的地址. 注意:

此项只有在UIP_FIXEDADDR设为0时才可用. 定义于uipopt.h中的114行.

16. #define UIP_REASSEMBLY打开IP包重组.

uip支持碎片IP包的重组.此项特性需要多余的RAM来盛放重组缓冲区.重组代码大小约为700字节.重组缓冲区的大小与uip_buf的大小(由UIP_BUFSIZE配置)相同. 注意:

IP包重组并未经过严格测试. 定义于uipopt.h的156行.

17. #define UIP_RECEIVE_WINDOW 通告的接收器窗口.

如果处理器对输入数据处理能力较慢,则应设得低些(uip_buf的大小),否则应设得高些(32768字节). 定义于uipopt.h的317行.

18. #define UIP_RTO 3 以时钟脉冲计算的重传超时计数. 此项不应改变.

定义于uipopt.h的280行. 引用于uip_process().

19. #define UIP_STATISTICS 决定是否将统计功能加入编译.

统计功能对于调试和显示用户是非常有帮助的. 定义于uipopt.h的393行.

20. #define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) TCP最大数据段大小.

此值不应大于UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. 定义于uipopt.h的305行.

21. #define UIP_TIME_WAIT_TIMEOUT 120一个连接应该停留在TIME_WAIT状态的最长时间. 此配置选项没有真正的实现,所以不应理会. 定义于uipopt.h的328行. 引用于uip_process().

22. #define UIP_TTL 64 uip发送的IP包的生存时间(TTL) 通常此项不应更改. 定义于uipopt.h的141行.

23. #define UIP_UDP_CHECKSUMS 是否使用UDP校验和. 注意:

对UDP校验和的支持目前并不包含于uIP,故此项无用. 定义于uipopt.h的195行.

24. #define UIP_URGDATA TCP紧迫数据通告功能是否编译.

紧迫数据(带外数据)在TCP中很少用到, 所以很少需要. 定义于uipopt.h的273行.

25. typedef uint16_t u16_t 16位数据类型.

这个类型定义定义了通贯uip所使用的16位数据类型. 应用例程:

dhcpc.c, dhcpc.h, resolv.c, resolv.h, smtp.c, smtp.h, telnetd.c, and uip-conf.h. 定义于uip-conf.h的76行.

26. typedef uint8_t u8_t8位数据类型. 此类型定义定义了通贯uIP中使用的8位数据类型. 应用例程:

dhcpc.c, dhcpc.h, resolv.c,smtp.h, telnetd.c, telnetd.h, and uip-conf.h. 定义于uip-conf.h的67行.

27. typedef unsigned short uip_stats_t 统计数据类型.

此类型定义定义了通贯uIP使用的统计数据类型. 定义于uip-conf.h的86行.

28. typedef uip_tcp_appstate_t

此种类型的应用状态将会被存储于uip_conn结构中. 它通常被typedef为一种保存应用状态信息的结构. 应用例程:

smtp.h, telnetd.h, and webclient.h. 定义于smtp.h的98行.

29. typedef uip_udp_appstate_t

此种类型的应用状态将会被存储于uip_conn结构中. 它通常被typedef为一种保存应用状态信息的结构. 应用例程: dhcpc.h.

定义于resolv.h的47行.

30. void uip_log ( char * msg ) 打印uip日志信息.

此函数必须为使用uIP的模块实现,uIP每产生一条日志信息就会调用一次这个函数.

UIP中文文档第八 uIP应用程序

详细说明:

uIP的发行版中包含了大量的应用程序.它们既也可以直接使用,也可以用来学习写uIP应用程序.

相关模块:

DNS resolver DNS服务器,用于查找主机名,并将其映射到IP地址.

SMTP E-mail sender RFC821定义的简单邮件传输协议,它是在因特网上发送和传输邮件的标准方法. Telnet server uIP Telnet服务器.

Hello, world 一个小例程,用于讲述如何使用原始套接字写应用. Web client 此例程是一个HTTP客户端,可以网络服务器上下载网页和文件. Web server 一个非常简单的网络服务器实现.

相关变量:

char telnetd_state::buf [TELNETD_CONF_LINELEN] char telnetd_state::bufptr u8_t telnetd_state::numsent u8_ttelnetd_state::state

就这么多,结束~完成使命~

TCP/IP协议简单分析(流程分析)

首先 TCP 和 IP 是两种不同的协议,它们来七层网络模型中分别在不同的层次, IP 协议是网络层的协议, TCP 是更高一层的传输层的协议, TCP 是建立在 IP 协议之上的,所以一般把 TCP 和 IP 连在一起说 TCP/IP 协议。 Windows 系统的 TCP 协议栈的数据包默认是 1460 字节大小,如果一次传输的数据大于这个长度,会把分割成几个长度都不大于 1460 字节的 TCP 数据包,每个数据包都会被赋予一个 sequnce number (相当于每个数据包的顺序号,凭这个接收端可以知道数据包的前后顺序)之后 TCP 的数据包再被包裹上一层 IP 的数据的头,形成 IP 数据包在网上传输(其实最后还要包一层以太网数据包,网络上最终传输的都是以太网数据包)。

IP 数据包到了目的地后,接收端首先把 IP 数据包的包头去掉,取出 TCP 的包。接收端每收到一个 TCP 的数据包都需要返回给发送端一个 ACK 的数据包告诉发送端已接到此数据包,如果接收端在一定的时间内没有收到某个数据包的 ACK 响应,会再次发送这个数据包,这样就保证了数据都能被接收端接收到(因特网上丢数据包是很正常的事,如果没有数据包重发机制,很难保证发送的数据都能被接收端完整的收到)。

每个 TCP 数据包也是由包头和实际数据组成,包头包含如下主要内容: 1、Source port ( 2 字节) 发送端的端口号

2、Destination port ( 2 字节) 接收端的端口号

TCP 包头中只包含双方的端口号,双方的 IP 地址在 IP 包的包头,所以在 TCP 数据包的包头中没有 IP 地址。 3、equence number ( 4 字节) 数据的顺序号,表示当前数据包中的数据起始顺序号,比如前一个数据包的 SEQ 为十六进制的: df d5 aa 3d ,数据包的实际数据长度为 16 字节,那么下一个数据包的 SEQ 就要在前一个数据包的 SEQ 基础上加上 16 ,为: df d5 aa 4d 4、 Acknowledgement number ( 4 字节)

接收到对方的某个数据包后的回应顺序号。如果接收到了对方主动发送来的某个数据包,必须要返回对方一个 ACK 回应数据包,数据包的头部的 Acknowledgement number 部分根据对方发送数据的 SEQ 和实际数据长度,返回 SEQ + 实际数据长度,表示已经接收到这个数据包。对方收到这个回应,根据数值计算后知道这个数据包已经被对方接收。如果接收不到 ACK 的回应,就意味着这个数据包已经在网上被丢失,需要重新发送此数据包。 5、Header length ( 1 字节)

表示 TCP 数据包的包头长度,整个 TCP 数据包的长度减包头长度就能得到 TCP 数据包的实际传送的数据长度。 6、Flags ( 1 字节)

标志字节,每一位都是一个标志,以下是几个主要标志:

ACK – 表示数据包是个 ACK 回应数据包,表示接收到了对方的某个数据包,具体哪个包由包头的 Acknowledgement number 部分指示。 PSH – 表示这是个有实际数据的包。

SYN – 表示这是个建立连接的数据包,通讯双方要通讯,总是由客户端先发送 SYN 数据包到服务端以建立 TCP 的连接。 FIN – 表示通讯结束,拆除连接的数据包。

下面描述一次 TCP 传送数据的完整过程,以一个客户端向服务端发送一些数据为例。

一次完整的 TCP 通讯的过程/ 1、 建立连接


uip源码分析(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:空气弹簧资料 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: