tcp协议实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

竭诚为您提供优质文档/双击可除

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()函数

相关文档
最新文档