竭诚为您提供优质文档/双击可除
tcp协议实验报告
篇一:Tcp实验报告
Tcp实验报告
一、实验目的
1.深入理解Tcp原理,掌握连接状态控制、可靠传输等重要机制;
2.为应用层提供网络编程接口,即socket接口。
二、实验要求
1.理解Tcp的主要原理,针对客户端角色的、“停-等”模式的Tcp,设计接收和发送流程。
2.编程实现Tcp段的接收流程,重点是段接收的有限状态机
3.编程实现Tcp段的发送流程,完成Tcp段的封装处理。
4.编程实现客户端socket接口函数
三、编程实现
1.停-等协议的实现
停-等协议主要体现在stud_tcp_send()函数和
stud_tcp_recv()和函数中。
实现的主要思路是:
a)调用stud_tcp_send()发送一个数据包时,直到收到ack包并把ack交给stud_tcp_input()处理才退出
b)调用stud_tcp_recv()接收一个数据包成功后,紧接着发送一个相应的ack包才退出
上述两个设计保证了发送和接收窗口大小为1
2.接收流程的有限状态机
首先检查校验和与序号是否正确,只有当这两者都无误之后才进入状态机部分。
状态机基于switch结构实现,根据当前Tcb的状态分情形讨论状态的变化。
处理流程如下
3.发送时的封装和有限状态机
a)查看当前的Tcb是否为空,为空则创建当前的Tcbb)封装数据
i.
ii.
iii.
iv.
v.
vi.拷贝数据设置源端口和目的端口设置包序列和ack 序号设置包头长度设置flag设置windowsize和urgentpointer
c)改变状态
d)变换字节序
将字节序从本地序变成网络序
4.各接口函数的实现
a)stud_tcp_socket()
b)
stud_tcp_connect()
c)stud_tcp_send()
d)
stud_tcp_recv()
e)stud_tcp_close()
5.校验和的计算
与Ip包的校验类似,但是要求对伪首部进行校验伪首部由以下部分组成:
a)32位Ip源地址
b)32位Ip目的地址
篇二:Tcp协议实验
网络课第四次上机实验报告
实验内容
实验内容主要包括:
?设计保存Tcp连接相关信息的数据结构(Tcb);
?Tcp协议的接收处理和封装发送;
?Tcp协议提供的socket函数接口。
------Tcp协议实验
实验过程
?设计保存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()函数