lwip中各种函数,标志位的总结(3)

2019-08-30 22:15

唯一确定一个TCP连接。一个IP地址和一个端口号也称为一个插口(socket)

32位序号字段用来标识从TCP发送端到TCP接收端的数据字节流,用它来标识这个文段中的第一个数据字节的序号。当建立一个新的连接时,SYN标志置1,序号字段包?由这个发送主机选择的该连接上的初始序号ISN(Initial Sequence Number)。该主机要发送数据的第一个字节序号为ISN+1 32 位确认序号只有ACK标志为1时才有效,它包?发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加 1。当一个TCP连接被正确建立后,ACK字段总是被设置为1的。

在T C P首部中有6个标志比特。URG紧急指针(urgent pointer)有效标识;ACK确认序号有效标识;PSH 接收方应该尽快将这个报文段交给应用层;RST重建连接;SYN同步序号,用来发起一个连接;FIN 发端完成发送任务 最长报文大小,又称为 MSS PACK_STRUCT_BEGIN struct tcp_hdr {

PACK_STRUCT_FIELD(u16_t src); // 源端口 PACK_STRUCT_FIELD(u16_t dest); // 目的端口 PACK_STRUCT_FIELD(u32_t seqno); // 序号 PACK_STRUCT_FIELD(u32_t ackno); // 确认序号

PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); // 首部长度+保留位+标志位

PACK_STRUCT_FIELD(u16_t wnd); // 窗口大小 PACK_STRUCT_FIELD(u16_t chksum); // 校验和 PACK_STRUCT_FIELD(u16_t urgp); // 紧急指针 } PACK_STRUCT_STRUCT; PACK_STRUCT_END

它首先打开某个端口,进入LISTEN状态以侦?客户端的连接请求。当服务器收到客户端的SYN连接请求,则进入SYN_REV状态,并向客户端返回一个ACK及自身的SYN包,此后,服务器等待客户端返回一个确认包,收到该ACK包后,服务器进入ESTABLISHED状态,并可以和服务器进行稳定的数据交换过程。

当服务器收到客户端发送的一个断开数据包FIN时,则进入CLOSE_WAIT状态,并向上层应用程序通告这个消息,同时向客户端返回一个ACK包,此时客户端到服务器方向的连接断开成功;此后,当服务器上层应用处理完毕相关信息后会向客户端发送一个FIN包,并进入LASK_ACK状态,等待客户端返回一个ACK包,当收到返回的ACK包后,此时服务器到客户端方向的连接断开成功,服务器端至此进入初始的CLOSED状态

TCP控制块

struct tcp_pcb {

IP_PCB; //这是一个宏,描述了连接的IP相关信息,包括双方IP地址,TTL等信息

struct tcp_pcb *next; //用于连接各个TCP控制块的链表指针

enum tcp_state state; //TCP 连接的状态,即为状态图中描述的那些状态

u8_t prio; //该控制块的优先级 void *callback_arg;//

u16_t local_port; //?地端口 u16_t remote_port; //远程端口

u8_t flags;// 附加状态信息,如连接是快速恢复、一个被延迟的 ACK 是否被发送等

#define TF_ACK_DELAY (u8_t)0x01U /* Delayed ACK. *///这些宏定义是为flags字段

#define TF_ACK_NOW (u8_t)0x02U /* Immediate ACK. *///定义的掩码

#define TF_INFR (u8_t)0x04U /* In fast recovery. */

#define TF_RESET (u8_t)0x08U /* Connection was reset. */

#define TF_CLOSED (u8_t)0x10U /*

Connection was sucessfully closed. */

#define TF_GOT_FIN (u8_t)0x20U /* Connection was closed by the remote end. */ #define TF_NODELAY (u8_t)0x40U /* Disable Nagle algorithm */ // 接收相关字段

u32_t rcv_nxt; //期望接收的下一个字节,即它向发送端ACK的序号

u16_t rcv_wnd; //接收窗口

u16_t rcv_ann_wnd; //通告窗口大小,较低版?中无该字段

u32_t tmr; // 该字段记录该PCB被创建的时刻

u8_t polltmr, pollinterval; // 三个定时器,后续讲解

u16_t rtime; //重传定时,该值随时间增加,当大于rto的值时则重传发生

u16_t mss; //最大数据段大小

//RTT估计相关的参数

u32_t rttest; //估计得到的500ms滴答数 u32_t rtseq; //用于测试RTT的包的序号 s16_t sa, sv; //RTT 估计出的平均值及其时间差

u16_t rto; // 重发超时时间,利用前面的几个值计算出来

u8_t nrtx; // 重发的次数,该字段在数

据包多次超时时被使用到,与设置rto的值相关// 快速重传/恢复相关的参数u32_t lastack; // 最大的确认序号,该字段不解

u8_t dupacks; // 上面这个序号被重传的次数

// 阻塞控制相关参数

u16_t cwnd; //连接的当前阻塞窗口 u16_t ssthresh; // 慢速启动阈值

// 发送相关字段

u32_t snd_nxt, // 下一个将要发送的字节序号

snd_max, // 最高的发


lwip中各种函数,标志位的总结(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:智能监狱信息化建设系统方案分析

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

马上注册会员

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