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

合集下载

解码仪的使用实验报告

解码仪的使用实验报告

一、实验目的1. 了解解码仪的基本原理和功能。

2. 掌握解码仪的使用方法。

3. 通过实验验证解码仪在数据传输、信息处理等方面的应用。

二、实验器材1. 解码仪一台2. 信号发生器一台3. 传输线若干4. 示波器一台5. 实验台一套三、实验原理解码仪是一种将数字信号转换为模拟信号的设备,广泛应用于通信、测控、数据采集等领域。

解码仪的主要功能是将输入的数字信号进行解码,还原出原始的模拟信号。

实验中,我们将通过解码仪将信号发生器产生的数字信号转换为模拟信号,并利用示波器观察模拟信号的变化。

四、实验步骤1. 将解码仪、信号发生器、传输线、示波器连接到实验台上,确保各设备连接正确。

2. 打开信号发生器,设置合适的频率、幅度和波形(如正弦波、方波等)。

3. 将信号发生器的输出端连接到解码仪的输入端。

4. 打开解码仪,选择合适的解码模式(如直通模式、解码模式等)。

5. 将解码仪的输出端连接到示波器的输入端。

6. 打开示波器,观察解码仪输出的模拟信号。

7. 修改信号发生器的参数,观察解码仪输出模拟信号的变化。

8. 记录实验数据,分析实验结果。

五、实验数据及分析1. 实验数据(1)信号发生器输出频率:1kHz(2)信号发生器输出幅度:5V(3)解码仪解码模式:直通模式(4)解码仪输出信号幅度:4.5V(5)解码仪输出信号频率:1kHz2. 实验分析(1)在直通模式下,解码仪能够将输入的数字信号转换为模拟信号,且信号幅度与输入信号幅度相近。

(2)通过修改信号发生器的参数,解码仪输出的模拟信号也随之发生变化,说明解码仪在信号处理方面具有较好的性能。

(3)实验过程中,解码仪输出的模拟信号与输入的数字信号在波形、频率、幅度等方面基本一致,验证了解码仪在数据传输、信息处理等方面的应用。

六、实验结论1. 解码仪能够将输入的数字信号转换为模拟信号,具有较好的信号处理性能。

2. 解码仪在数据传输、信息处理等领域具有广泛的应用前景。

多媒体信息处理与传输 教学大纲

多媒体信息处理与传输  教学大纲

多媒体信息处理与传输一、课程说明课程编号:090375Z10课程名称:多媒体信息处理与传输/ Multimedia Information Processing and Transmission课程类别:专业教育课程(专业选修课)学时/学分:32/2先修课程:计算机与程序设计语言基础,信息论与编码,计算机网络原理适用专业:电子信息工程教材、教学参考书:[1] 蔡安妮,等. 多媒体通信技术基础(第三版). 北京:电子工业出版社,2012.[2] 王汝言. 多媒体通信技术. 西安:西安电子科技大学出版社,2014[3] 朱志祥,等. IP网络多媒体通信技术及应用. 西安:西安电子科技大学出版社,2007二、课程设置的目的与意义本课程是面向电子信息工程专业的高年级本科生开设的一门专业课,主要目的是让学生掌握多媒体信息处理与传输的基础知识与关键技术,使他们能够从系统或整体的角度深入理解所学的多方面专业知识与技术在现实世界中的综合应用,同时扩大专业知识面、培养一定的自主探索新技术的能力。

现代信息系统大部分都需要综合处理图文声像等多媒体信息,现代通信业务也正朝着多媒体业务的方向发展,多媒体化、智能化、网络化是现代电子设备的必然发展趋势。

多媒体通信技术是音视频处理技术、计算机技术与网络通信技术有机结合的产物,涉及到的理论与技术比较广。

通过本课程的学习,学生不仅能进一步加深对已学过的多门专业基础课的认识,而且还能开阔视野、扩大知识面,学习到多媒体通信技术研究与应用开发的一些新理论与新技术,有助于培养开放思维和创新精神,从而增强对时代发展和未来工作的适应能力。

三、课程的基本要求知识:理解多媒体相关的基本概念,掌握多媒体信息处理的基础知识;理解多媒体信息传输过程中可能存在的问题及其解决办法;了解多媒体通信的数据压缩技术、网络技术、同步技术和流媒体技术的基本原理;了解多媒体通信系统设计应遵循的主要标准、典型应用系统的结构及工作原理。

H263编解码等等

H263编解码等等

实验一H263编解码一、实验目的1.了解DSP/BISO程序的结构、运行顺序和注意事项。

2.学习使用DSP/BISO程序设计环境。

3.学习使用RF-5(Reference Framework 5)设计框架构造应用程序。

4.了解在RF-5平台上调用H.263编码、解码库。

二、实验原理实验程序在目标板上实现D1格式的H.263编码和解码。

程序将摄入的视频图像首先进行编码,产生H.263码流,再由解码程序处理此码流,生成目标视频送显示设备显示。

1.数据流图2.数据流程:(1)输入设备提供的一帧图像被采集到输入缓存。

(2)获得的数据由YUV 4:2:2格式进行重抽样变为YUV 4:2:0格式。

(3)提供图像数据给H.263编码库程序。

(4)H.263编码程序完成对输入帧的编码。

(5)H.263编码程序输出编码码流。

(6)产生的编码码流被传输到H.263解码模块。

(7)H.263解码模块解码传入的码流,输出解码的一帧图像。

(8)解码模块解码产生的图像经过重新抽样由YUV 4:2:2格式变为YUV4:2:2格式。

(9)显示设备显示输出的图像。

三、实验仪器微型计算机,TMS320系列DSP实验箱四、实验内容1、熟悉试验箱2、程序设计(1)实验程序采用RF-5来整合H.263的编码、解码库。

程序使用了三个任务模块。

在进入DSP/BISO的调度程序之前,程序初始化了多个要使用的模块。

包括:①处理器和系统板的初始化,②RF-5模块的初始化,③建立摄入和显示通道,④建立编码解码运算实例。

(2)在完成初始化工作之后,系统进入DSP/BISO调度程序管理下的三个任务系统。

三个任务通过RF-5的SCOM模块互相发送消息。

①输入任务:输入任务从输入设备驱动程序获得视频图像,②处理任务:处理任务对图像数据进行编码,传送编码码流到解码模块,解码图像后传输到输出模块。

③输出任务:输出任务将图像显示在显示设备上。

五、预习和实验报告要求1.预习课本有关内容。

视频传输原理

视频传输原理

视频传输原理视频传输是指将视频信号从一个地方传输到另一个地方的过程。

视频传输原理涉及到信号的采集、编码、传输和解码等多个环节,是实现视频通信的基础。

本文将从视频信号的采集、编码、传输和解码等方面进行介绍,帮助读者深入了解视频传输的原理。

首先,视频信号的采集是视频传输的第一步。

视频信号可以通过摄像头、摄像机等设备进行采集,将现实世界中的图像转换成电信号。

采集到的视频信号经过模拟/数字转换器转换成数字信号,以便后续的数字处理和传输。

接下来是视频信号的编码。

在视频编码过程中,视频信号会经过压缩处理,以减小数据量,提高传输效率。

常见的视频编码标准包括MPEG-2、MPEG-4、H.264等。

这些编码标准通过采用不同的压缩算法,实现对视频信号的高效压缩,从而减小数据量,保证视频传输的流畅性和清晰度。

然后是视频信号的传输。

视频信号的传输可以通过有线或无线方式进行。

有线传输主要包括光纤传输和同轴电缆传输,无线传输则包括无线局域网、蓝牙、红外线等方式。

在传输过程中,视频信号会经过调制处理,将数字信号转换成适合传输的模拟信号或数字信号,以便在传输过程中保持信号的稳定性和可靠性。

最后是视频信号的解码。

接收端会对传输过来的视频信号进行解码处理,将压缩的视频信号还原成原始的视频数据。

解码过程中需要使用与编码相对应的解码算法,以确保视频信号的质量和清晰度。

解码后的视频信号可以通过显示器、投影仪等设备进行显示,让用户观看到高质量的视频画面。

综上所述,视频传输原理涉及到视频信号的采集、编码、传输和解码等多个环节。

通过对这些环节的深入了解,可以更好地理解视频传输的工作原理,为视频通信技术的发展和应用提供理论支持。

希望本文能够帮助读者对视频传输原理有更深入的认识。

多天线实验指导书

多天线实验指导书

实验十二多天线一、实验目标本实验主要是利用LabVIEW软件和USRP硬件来搭建 2x2多输入多输出(MIMO)系统。

通过对多天线收发原理的掌握,编写出空时分组编码(STBC)的编解码程序,实现视频和图片的传输,从而加深对多天线技术相关内容的理解以及通信过程中的符号同步、帧同步、载波同步和信道估计等技术的认识。

二、实验介绍多输入多输出(MIMO)技术是无线通信领域的重大突破,它利用空间中增加的无线传输信道,在发送端和接收端采用多天线同时收发信号。

由于各发射天线同时发送的信号占用同一个频带,所以并未增加带宽,因而能够成倍的提高系统的容量和频谱利用率。

多输入和多输出既可以来自于多个数据流,也可以来自于一个数据流的多个版本,因此各种多天线技术都可以算作MIMO技术,如图1所示。

图1 MIMO技术分类1、STBC编码空时编码技术是一种建立在MIMO技术的基础上来提高系统性能的编码技术,最早源于Alamouti提出的基于两发射天线的空时发射分集方案,其实质上是将同一信息经过正交编码后从多根天线上发射出去,所形成的多路信号由于具有正交性,因此接收端就能够将这些多路独立的信号区分出来,只需要做简单的线性合并就可以得到满分集增益。

假设发送两个符号1x ,2x ,将其按(1)方式编码,经编码后的符号分别从两根天线上发送出去:在第一个发射周期里,分别从第一根天线和第二根天线上同时发送符号1x ,2x ;在第二个发射周期中,从第一根天线和第二根天线上同时发送符号2x *-,1x *,。

也就是说,x 的第一列表示第一时刻从不同天线发送出去的信号,x 的第一行表示从第一根天线在不同时刻发送出去的信号,依次类推。

1221x x x x x **⎡⎤-=⎢⎥⎣⎦(1) 2、STBC 接收本实验的空时分组译码方案是利用最大比值合并接收方法进行空时分组译码,其原理是:假设天线端发送的数据a,b ;经过空时分组编码后为:-[]a b x b a **= (2)假设估计出的信道参数矩阵为:11122122[]h h h h h = (3)ijh 表示第i 根接收天线收到第j 根发送天线数据的传输信道参数。

多媒体技术应用实验报告

多媒体技术应用实验报告

一、实验背景随着信息技术的飞速发展,多媒体技术已成为现代生活中不可或缺的一部分。

多媒体技术是将文本、图像、音频、视频等多种信息载体集成在一起,通过计算机技术进行处理、存储、传输和展示的一种技术。

为了更好地理解和掌握多媒体技术,我们开展了此次实验。

二、实验目的1. 了解多媒体技术的基本概念和组成要素;2. 掌握多媒体制作工具的使用方法;3. 熟悉多媒体文件格式及其特点;4. 学会使用多媒体技术进行简单的多媒体作品制作。

三、实验内容1. 多媒体制作工具的使用(1)文字处理软件(如Microsoft Word)实验步骤:① 打开Microsoft Word,创建一个新的文档;② 输入文字内容,设置字体、字号、颜色等格式;③ 添加图片、表格等元素,调整其位置和大小;④ 保存文档。

(2)图像处理软件(如Photoshop)实验步骤:① 打开Photoshop,创建一个新的图像文件;② 使用各种工具对图像进行编辑,如调整亮度、对比度、色彩饱和度等;③ 使用图层功能对图像进行合成;④ 保存图像文件。

(3)音频处理软件(如Audacity)实验步骤:① 打开Audacity,导入音频文件;② 使用各种工具对音频进行编辑,如剪切、复制、粘贴、添加效果等;③ 保存音频文件。

(4)视频处理软件(如Adobe Premiere Pro)实验步骤:① 打开Adobe Premiere Pro,导入视频文件;② 使用各种工具对视频进行剪辑、调整画面、添加转场效果等;③ 保存视频文件。

2. 多媒体文件格式及特点(1)文本格式:如TXT、DOC等,适用于文字内容的存储和传输;(2)图像格式:如JPG、PNG等,适用于图像内容的存储和传输;(3)音频格式:如MP3、WAV等,适用于音频内容的存储和传输;(4)视频格式:如AVI、MP4等,适用于视频内容的存储和传输。

3. 多媒体作品制作(1)设计多媒体作品主题和内容;(2)根据主题选择合适的制作工具;(3)收集和整理所需素材;(4)按照设计要求进行多媒体作品制作;(5)对作品进行测试和修改,直至达到预期效果。

视频信息处理技术

视频信息处理技术
⑵ 视频传输协议
视频传输协议用于将视频信号从采集设备传输至存储设备,常见的视频传输协议包括RTSP、RTP等。
⒊视频预处理
⑴ 视频去噪与增强
视频去噪与增强技术能够提取视频中的有用信息并去除图像中的噪声,改善图像质量。
⑵ 视频帧率控制
视频帧率控制技术用于调整视频帧率,可实现快速播放或慢动作播放效果。
⒋视频编码与解码
视频信息处理技术
正文:
⒈概述
视频信息处理技术是指通过对视频内容进行分析、提取和处理,从中获取有价值的信息并实现相关功能的技术。视频信息处理技术广泛应用于视频监控、视频编码、视频搜索等领域,对于提高图像质量、实现目标检测与跟踪、视频内容分析等方面具有重要意义。
⒉视频采集与传输
⑴ 视频采集设备
视频采集设备包括摄像机、摄像头等,用于将实时场景转化为数字视频信号。
⒍视频搜索与检索
⑴ 视频内容描述与索引
视频内容描述与索引技术用于对视频进行标签化描述和索引,以实现基于内容的视频搜索。
⑵ 视频相似度计算
视频相似度计算技术用于衡量不同视频之间的相似度,以实现视频检索和推荐。
附件:本文档附带了一份详细的视频信息处理技术相关的实例代码和算法,具体使用请参考代码文档。
法律名词及注释:
⒈版权专利权、商标权、著作权等权利。
⒊隐私权:是指个人拥有的不愿被他人知晓的个人信息和个人权益。
⑴ 视频编码
视频编码技术用于将视频信号进行压缩编码,以减小存储空间和传输带宽。
⑵ 视频解码
视频解码技术用于将压缩后的视频信号解码还原为原始图像,以实现视频播放。
⒌视频分析与识别
⑴ 视频目标检测与跟踪
视频目标检测与跟踪技术用于在视频中自动检测和跟踪感兴趣的目标,如人脸、车辆等。

视频数字信息处理技术

视频数字信息处理技术

4.3 数字视频的获取
在多媒体计算机系统中,视频处理一般是借助于一些相 关的硬件和软件,在计算机上对输入的视频信号进行接收、 采集、传输、压缩、存储、编辑、显示、回放等多种处理。 数字视频素材,可以通过视频采集卡将模拟数字信号转 换为数字视频信号,也可以从光盘及网络上直接获取数字 视频素材。
4.3 数字视频的获取
4.1 视频基础知识
4.1.2 电视信号及其标准 4. 彩色电视信号的类型 电视频道传送的电视信号主要包括亮度信号、色度信 号、复合同步信号和伴音信号,这些信号可以通过频率域 或者时间域相互分离出来。电视机能够将接收到的高频电 视信号还原成视频信号和低频伴音信号,并在荧光屏上重 现图像,在扬声器上重现伴音。 根据不同的信号源,电视接收机的输入、输出信号有 三种类型: (1)分量视频信号与S-Video (2)复合视频信号 (3)高频或射频信号
4.1 视频基础知识
4.1.2 电视信号及其标准 2. 彩色电视信号制式 (4)数字电视(Digital TV) 1990年美国通用仪器公司研制出高清晰度电视HDTV, 提出信源的视频信号及伴音信号用数字压缩编码,传输信 道采用数字通信的调制和纠错技术,从此出现了信源和传 输通道全数字化的真正数字电视,它被称为“数字电视”。 数字电视(DTV)包括高清晰度电视HDTV、标准清 晰度电视SDTV和VCD质量的低清晰度电视LDTV。 随着数字技术的发展,全数字化的电视HDTV标准将 逐渐代替现有的彩色模拟电视。
4.2 视频的数字化
4.2.2 常见的数字视频格式及特点
1. AVI AVI(Audio Video Interleave) 是微软公司开发的一种符合RIFF 文件规范的数字音频与视频文件格式。 AVI格式允许视频和音频交错记录、同步播放,支持256色和RLE 压缩,是PC机上最常用的视频文件格式,其播放器为VFW(Video For Windows)。 在AVI文件中,运动图像和伴音数据是以交替的方式存储,播放时, 帧图像顺序显示,其伴音声道也同步播放。以这种方式组织音频和视像 数据,可使得在读取视频数据流时能更有效地从存储媒介得到连续的信 息。 AVI文件还具有通用和开放的特点,适用于不同的硬件平台,用户 可以在普通的MPC上进行数字视频信息的编辑和重放,而不需要专门 的硬件设备。 AVI文件可以用一般的视频编辑软件如Adobe Premiere进行编辑和 处理。
  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 SPortAddru_char ver_ihl; // 版本(4 bits) + 首部长度(4 bits) == 8u_char tos; // 服务类型(Type of service)u_short tlen; // 总长(Total length)u_short identification; // 标识(Identification)u_short flags_fo; // 标志位(3 bits) + 段偏移量(Fragment offset) (13 bits)u_char ttl; // 存活时间(Time to live)u_char proto; // 协议(Protocol)u_short crc; // 首部校验和(Header checksum)ip_address saddr; // 源地址(Source address)ip_address daddr; // 目的地址(Destination address)u_int op_pad; // 选项与填充(Option + Padding)}ip_header;3、TCP报文段struct TCP_Segment{struct TCP_Header tcpHeader;uint16 source; /* Source port */uint16 dest; /* Destination port */int32 seq; /* Sequence number */int32 ack; /* Acknowledgment number */uint16 wnd; /* Receiver flow control window */uint16 checksum; /* Checksum */uint16 up; /* Urgent pointer */uint16 mss; /* Optional max seg size */uint8 wsopt; /* Optional window scale factor */uint32 tsval; /* Outbound timestamp */uint32 tsecr; /* Timestamp echo field */struct {unsigned int congest:1; /* Echoed IP congestion experienced bit */unsigned int urg:1;unsigned int ack:1;unsigned int psh:1;unsigned int rst:1;unsigned int syn:1;unsigned int fin:1;unsigned int mss:1; /* MSS option present */unsigned int wscale:1; /* Window scale option present */unsigned int tstamp:1; /* Timestamp option present */ tcpData;}};4、TCP有限状态机#include "global.h"#include "timer.h"#include "mbuf.h"#include "netuser.h"#include "internet.h"#include "tcp.h"#include "ip.h"voidtcp_output(tcb)register struct tcb *tcb;{struct mbuf *dbp; /* Header and data buffer pointers */struct tcp seg; /* Local working copy of header */uint16 ssize; /* Size of current segment being sent,* including SYN and FIN flags */uint16 dsize; /* Size of segment less SYN and FIN */int32 usable; /* Usable window */int32 sent; /* Sequence count (incl SYN/FIN) already* in the pipe but not yet acked */int32 rto; /* Retransmit timeout setting */if(tcb == NULL) return;switch(tcb->state){case TCP_LISTEN:case TCP_CLOSED:return; /* Don't send anything */}for(;;){memset(&seg,0,sizeof(seg));/* Compute data already in flight */sent = tcb->snd.ptr - tcb->snd.una;usable = min(tcb->snd.wnd,tcb->cwind);if(usable > sent) usable -= sent; /* Most common case */else if(usable == 0 && sent == 0) usable = 1; /* Closed window probe */else usable = 0; /* Window closed or shrunken */ssize = min(tcb->sndcnt - sent,usable);ssize = min(ssize,tcb->mss);if(!tcb->flags.force && sent != 0 && ssize < tcb->mss&& !(tcb->state == TCP_FINWAIT1 && ssize == tcb->sndcnt-sent)){ ssize = 0;}if(!tcb->flags.synack && !Tcp_syndata){if(tcb->snd.ptr == tcb->iss) ssize = min(1,ssize); /* Send only SYN */else ssize = 0; /* Don't send anything */}if(tcb->flags.force && tcb->snd.ptr != tcb->snd.nxt) ssize = 0;if(ssize == 0 && !tcb->flags.force)break; /* No need to send anything */tcb->flags.force = 0; /* Only one forced segment! */seg.source = tcb->conn.local.port;seg.dest = tcb->conn.remote.port;seg.flags.ack = 1; /* Every state except TCP_SYN_SENT */seg.flags.congest = tcb->flags.congest;if(tcb->state == TCP_SYN_SENT)seg.flags.ack = 0; /* Haven't seen anything yet */dsize = ssize;if(!tcb->flags.synack && tcb->snd.ptr == tcb->iss){/* Send SYN */ seg.flags.syn = 1;dsize--; /* SYN isn't really in snd queue *//* Also send MSS, wscale and tstamp (if OK) */seg.mss = Tcp_mss;seg.flags.mss = 1;seg.wsopt = DEF_WSCALE;seg.flags.wscale = 1;if(Tcp_tstamps){seg.flags.tstamp = 1;seg.tsval = msclock();}}if(ssize == 0) seg.seq = tcb->snd.nxt;else seg.seq = tcb->snd.ptr;tcb->last_ack_sent = seg.ack = tcb->rcv.nxt;if(seg.flags.syn || !tcb->flags.ws_ok) seg.wnd = tcb->rcv.wnd; else seg.wnd = tcb->rcv.wnd >> tcb->rcv.wind_scale;dbp = ambufw(TCP_HDR_PAD+dsize);dbp->data += TCP_HDR_PAD; /* Allow room for other hdrs */if(dsize != 0){int32 offset;offset = sent;if(!tcb->flags.synack && sent != 0) offset--;dbp->cnt = extract(tcb->sndq,(uint16)offset,dbp->data,dsize);if(dbp->cnt != dsize){/* We ran past the end of the send queue;*/ seg.flags.fin = 1;dsize--;}}if(dsize != 0 && sent + ssize == tcb->sndcnt) seg.flags.psh = 1;if(tcb->snd.ptr < tcb->snd.nxt)tcb->resent += min(tcb->snd.nxt - tcb->snd.ptr,ssize);tcb->snd.ptr += ssize;if(seq_gt(tcb->snd.ptr,tcb->snd.nxt)) tcb->snd.nxt = tcb->snd.ptr; if(tcb->flags.ts_ok && seg.flags.ack){seg.flags.tstamp = 1;seg.tsval = msclock();seg.tsecr = tcb->ts_recent;}/* Generate TCP header, compute checksum, and link in data */htontcp(&seg,&dbp,tcb->conn.local.address,tcb->conn.remote.address)if(ssize != 0){/* Set round trip timer. */rto = backoff(tcb->backoff) * (4 * tcb->mdev + tcb->srtt);set_timer(&tcb->timer,max(MIN_RTO,rto));if(!run_timer(&tcb->timer))start_timer(&tcb->timer);/* If round trip timer isn't running, start it */if(tcb->flags.ts_ok || !tcb->flags.rtt_run){tcb->flags.rtt_run = 1;tcb->rtt_time = msclock();tcb->rttseq = tcb->snd.ptr;tcb->rttack = tcb->snd.una;}}if(tcb->flags.retran) tcpRetransSegs++;else tcpOutSegs++;ip_send(tcb->conn.local.address,tcb->conn.remote.address,TCP_PTCL,tcb->tos,0,&dbp,len_p(dbp),0,0);}}四、实验小结通过本次实验,认识到自己对于理论知识学习的不足以,所以在以后的学习中继续努力。

相关文档
最新文档