TCP协议实验.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TCP协议实验

网络课第四次上机实验报告 ------TCP协议实验实验内容实验内容主要包括:设计保存TCP 连接相关信息的数据结构(TCB);TCP 协议的接收处理和封装发送;TCP 协议提供的Socket 函数接口。实验过程设计保存TCP 连接相关信息的数据结构(TCB)用数据结构TCB为每一个TCP连接维护socketfd,srcAddr,dstAddr, srcPort, dstPort, seq, ack, windowSize, state这些状态信息。以链表形式组织多个连接,nextTcb指向下一个连接的数据结构。TCP 分组接收函数stud_tcp_input( )首先,检查校验和;然后通过字节序转换获取相应的信息,检查序列号。如果序列号不正确,则调用tcp_DiscardPkt;最后将报文交由输入有限状态机处理,有限状态机对报文进行处理,转换状态。根据当前的状态并调用stud_tcp_output 函数完成tcp 建连、数据传递时返回ACK、tcp 断连等工作TCP 分组发送函数stud_tcp_output ( )判断需要发送的报文类型,根据报的类型对包中的相应字段进行设置,判断是否可以发送(发送窗口不为0)。构造TCP 数据报文并发送。填写TCP 报文各字段的内容和数据,转换字节序,计算校验和,然后调用发送流程的下层接口函数sendIpPkt( )发送。stud_tcp_socket ( )函数分配相应的socketfd并且新建TCB表项,并对成员变量进行初始化stud_tcp_connect ( )函数设定目的IPv4 地址和端口,源IPv4 地址和端口;初始化TCB 结构中的相关变量;设定TCB 中的输入状态为SYN-SENT,及其它相关变量,准备发送SYN 报文;调用发送流程的下层接口函数stud_tcp_output ( )发送SYN 报文(发送类型为PACKET_TYPE_SYN);等待“三次握手”完成后返回,建立连接成功;或者出错返回。stud_tcp_send ( )函数判断是否处于ESTABLISHED 状态;将应用层协议的数据拷贝到TCB 的输入缓冲区;调用stud_tcp_output ( )发送TCP 的数据报文(发送类型为PACKET_TYPE_DATA);同时等待ACK以实现停等式协议stud_tcp_recv ( )函数判断是否处于ESTABLISHED 状态;从TCB 的输入缓冲区读出数据;将数据交给应用层协议。stud_tcp_close ( )函数在正常情况下(ESTABLISHED 状态),进行相应状态转换,非正常情况下(SYN-SENT 状态),直接删除TCB 结构后退出;调用发送流程下层接口函数stud_tcp_output ( )发送FIN 报文(发送类型为PACKET_TYPE_FIN);等待回应的ACK 报文,收到后成功返回,或者出错返回;删除相应的TCB表项。实验总结通过本次实验,加深了对TCP 协议的原理和设计实现的机制的了解,对TCP协议有了更具体的认识,对概论课的学习有很大的帮助!附:上机代码(注释)#include sysInclude.hextern void tcp_DiscardPkt(char *pBuffer, int type);extern void tcp_sendReport(int type);extern void tcp_sendIpPkt(unsigned char *pData, UINT16 len, unsigned int srcAddr, unsigned int dstAddr, UINT8ttl);extern int waitIpPacket(char *pBuffer, int timeout);extern unsigned int getIpv4Address();extern unsigned int getServerIpv4Address();#define BUFFER_SIZE 1024#define TIMEOUT 5enum status{CLOSED,SYN_SENT,ESTABLISHED,FIN_WAIT_1,FIN_WAIT_2,TIME_WAIT}; //状态int gSrcPort = 2007;int gDstPort = 2006;int gSeqNum = 1;int gAckNum = 0;struct TCB {int socketfd;UINT32 srcAddr;UINT32 dstAddr;UINT16 srcPort;UINT16 dstPort;UINT32 seq;UINT32 ack;UINT16 windowSize;UINT8 state;TCB *nextTc

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档