1 / 11
文档名称:

TCP协议实验.docx

格式:docx   大小:35KB   页数:11页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

TCP协议实验.docx

上传人:飞行的大米 2021/12/15 文件大小:35 KB

下载得到文件列表

TCP协议实验.docx

文档介绍

文档介绍:TCP协议实验
TCP协议实验
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 ( ) 函数
TCP协议实验
TCP协议实验
TCP协议实验
分配相应的 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 ""
extern 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, UINT8 ttl);
extern int waitIpPacket(char *pBuf