tcp.h

 
#ifndef _TCP_H
#define _TCP_H

#include "m.h"
#include "type.h"

/*表示tcp11种连接状态的宏定义*/
#define CLOSED 0
#define LISTEN 1
#define SYN_RCV 2
#define SYN_SENT 3
#define ESTABLISHED 4
#define CLOSE_WAIT 5
#define FIN_WAIT_1 6
#define FIN_WAIT_2 7
#define CLOSING 8
#define TIME_WAIT 9
#define LAST_ACK 10


/*控制位宏定义*/
#define FIN 0x00000001
#define SYN 0x00000002
#define RST  0x00000004
#define PSH 0x00000008
#define ACK 0x00000010
#define URG 0x00000020


/*拥塞状态宏定义*/
#define SS 1               /*拥塞避免状态*/
#define CA 2               /*慢启动状态*/ 

#define MAXCONNECTS 100        /*最大连接数,还需与socket块协商*/
#define TCP_HEAD 0x00000001

/*接受窗口结构体TCP_rcvwin*/
typedef struct{  
 INT32U rcv_base;            /*接收基序号*/

 INT32U rcvN;             /*接收窗口长度N*/
}TCP_rcvwin; 


/*发送窗口结构TCP_sendwin*/
typedef struct{
 INT32U send_base;           /*发送基序号*/

 INT32U sendN;             /*发送窗口长度N*/

 INT32U send_nxt;            /*表示下一个还未发送的可用序号*/
 }TCP_sendwin;

 

typedef struct tcp_head{
 INT16U th_sport;            /*源端口号*/
 
 INT16U th_rport;            /*接收方端口号*/
 
 INT32U th_seq;             /*序号*/
 
 INT32U th_ack;             /*确认号*/

 INT16U th_tt;

 INT8U th_controlbit;           /*tcp控制位*/

 INT16U th_win;             /*接收窗口大小*/

 INT16U th_sum;            /*互联网检验和*/

 INT16U th_urp;             /*紧急数据指针*/
}TCP_head;


          /*空间的tcb链表*/ 


/*tcp协议控制块结构体TCP_tcb*/
typedef struct tcp_tcb{

 /*用于管理连接的两个成员*/
 INT32U tt_state;            /*记录连接的状态,默认为Close状态*/
 
 INT8U tt_controlbit;           /*记录发送数据时需要的控制位*/


 /*用于控制发送速率的成员*/
 
 INT32U tt_mss;             /*记录最大报文段长度*/
 
 INT16U tt_rrcvwin;           /*接收方接收窗口大小,接收数据时进行记录,控制发送数据大小*/
 
 INT16U tt_srcvwin;           /*发送方接收窗口大小,发送数据时填充tcp首部*/
 
 INT32U tt_rcvseq;            /*接收序号,接收数据时记录tcp首部中的序号*/
 
 INT32U tt_rcvack;            /*接收确认号,接收数据时记录tcp首部中的确认号*/

 

 /*用于进行拥塞控制的成员*/

 INT32U tt_congwin;           /*拥塞窗口大小*/

 INT32U tt_threshold;           /*拥塞窗口阈值*/

 INT32U tt_timeout;           /*记录是否有超时发生,从而进行拥塞控制*/

 INT32U tt_threeACK;           /*记录是否收到3次ACK,从而进行拥塞控制*/

 INT32U tt_blockstate;          /*拥塞状态*/


 /*tcp发送和接收缓存*/
 Mbuf*  tt_rcvque;            /*接收队列*/
 Mbuf*  tt_sendque;           /*发送队列*/

 struct tcp_tcb* pt_next;          
 
 TCP_rcvwin tt_rcvwin;          
 TCP_sendwin tt_sendwin; 
}TCP_tcb;

typedef struct pcb{
     INT16U domain;
  INT32U sockFD;
  INT32U type;
  INT32U protocol;
  INT16U srcPort;
  INT16U desPort;
  ip_addr srcAddr;
  ip_addr desAddr;
  Mbuf* sendbuf;
  Mbuf* rcvbuf;
  INT8U sin_zero[8];
  TCP_tcb * s_tcb;
 }Socket;
TCP_tcb TCP_TCBTbl[MAXCONNECTS];     /*向系统请求分配的TCP_tcb数组*/
TCP_tcb* TCBFreeList; 


#endif


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值