视频信息处理与传输实验3

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

实验三 TCP

一、实验目的

1、认识TCP 协议的相关内容;

2、掌握TCP 模块的C 语言编程; 二、实验内容

1、创建一个头文件,用C 语言实现TCP 模块所需的所有常量;

2、完成TCP 首部的说明;

最大报文段长度MSS(Maximum Segment Size)是TCP 报文段中的数据字段的最大长度。MSS 告诉对方TCP :“我的缓存所能接收的报文段的数据字段的最大长度是MSS 个字节。”

窗口扩大因子,用于长肥管道。

时间戳,可用于测量往返时延RTT 。

3、完成TCP 报文段的说明;

图1 TCP 报文结构

源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。 序号字段——占4字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。 确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

数据偏移——占4bit ,它指出TCP 报文段的数据起始处距离 CP 报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit 字(4字节为计算单位)。 保留字段——占6bit ,保留为今后使用,但目前应置为0。

紧急比特URG ——当URG =1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

确认比特ACK ——只有当ACK =1时确认号字段才有效。当ACK =0时,确认号无效。

复位比特RST(Reset) —— 当RST =1时,表明TCP 连接中出现严重差错

URG 紧急数据 (一般不用) ACK 序号有效 立即提交数据 RST, SYN, FIN: 连接建立(建立和拆连)SYN :是握手信号 FIN :拆除连接

接收方允许 的字节数

对数据字节计数(并

非对报文段计数!)

(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接

接受报文。

终止比特FIN(FINal)——用来释放一个连接。当FIN=1时,表明此报文段

的发送端的数据已发送完毕,并要求释放运输连接。

窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。

TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对

方以确定对方的发送窗口的上限。

检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在

计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后

一个字节的序号。

选项字段——长度可变。TCP首部可以有多达40字节的可选信息,用于把

附加信息传递给终点,或用来对齐其它选项。

填充字段——这是为了使整个首部长度是4字节的整数倍。

4、用C语言写出TCP有限状态机的实现函数。

TCP从建立到终止整个过程中,存在11中状态,TCP的有限状态机给出了

TCP连接从一个状态转换到另一个状态的规则。

客户进程

服务器进程

非正常状体转换

图2 TCP有限状态机

三、实验过程

1、TCP头文件:

#ifndef _TCP_H

#define _TCP_H

#ifndef _GLOBAL_H

#include "global.h"

#endif

#ifndef _MBUF_H

#include "mbuf.h"

#endif

#ifndef _IFACE_H

#include "iface.h"

#endif

#ifndef _INTERNET_H

#include "internet.h"

#endif

#ifndef _IP_H

#include "ip.h"

#endif

#ifndef _NETUSER_H

#include "netuser.h"

#endif

#ifndef _TIMER_H

#include "timer.h"

#endif

#define DEF_MSS 512 /* Default maximum segment size */

#define DEF_WND 2048 /* Default receiver window */

#define RTTCACHE 16 /* # of TCP round-trip-time cache entries */ #define DEF_RTT 5000 /* Initial guess at round trip time (5 sec) */

#define MSL2 30 /* Guess at two maximum-segment lifetimes */ #define MIN_RTO 500L /* Minimum timeout, milliseconds */

#define TCP_HDR_PAD 70 /* mbuf size to preallocate for headers */

#define DEF_WSCALE 0 /* Our window scale option */

#define geniss() ((int32)msclock() << 12) /* Increment clock at 4 MB/sec */ /* Number of consecutive duplicate acks to trigger fast recovery */

#define TCPDUPACKS 3/* Round trip timing parameters */

#define AGAIN 8 /* Average RTT gain = 1/8 */

#define LAGAIN 3 /* Log2(AGAIN) */

#define DGAIN 4 /* Mean deviation gain = 1/4 */

#define LDGAIN 2 /* log2(DGAIN) */

#define TCPLEN 20 /* Minimum Header length, bytes */

#define TCP_MAXOPT 40 /* Largest option field, bytes */

2、TCP首部

struct TCP_header{

unsigned short SPortAddr

u_char ver_ihl; // 版本(4 bits) + 首部长度(4 bits) == 8

u_char tos; // 服务类型(Type of service)

u_short tlen; // 总长(Total length)

相关文档
最新文档