文档介绍:. -
- -可修编.
网络课第四次上机实验报告
------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 ( )函数
判断是否处于ESTABL