现代通信技术实验TCP通信实验.docx
《现代通信技术实验TCP通信实验.docx》由会员分享,可在线阅读,更多相关《现代通信技术实验TCP通信实验.docx(18页珍藏版)》请在冰豆网上搜索。
![现代通信技术实验TCP通信实验.docx](https://file1.bdocx.com/fileroot1/2023-4/24/94681e4e-fc36-4767-b9c4-8f1ea820ce6f/94681e4e-fc36-4767-b9c4-8f1ea820ce6f1.gif)
现代通信技术实验TCP通信实验
现代通信技术试验报告
(二)TCP通信实验
学院:
计算机学院
班级:
24010107班
学号:
*************
姓名:
***
日期:
2015.05.14
TCP通信实验
一、【实验目的】
1.掌握TCP网络的基本原理;
2.掌握使用Socket进行TCP网络开发的基本方法。
二、【实验设备】
1.装有Linux系统或装有Linux虚拟机的PC机一台;
2.物联网多网技术综合教学开发设计平台一套;
3.串口线一条或USB线(A-B)。
三、【实验要求】
编写程序在实验箱上实现一个TCP服务器,实现接收网络数据并将收到的网络数据发送给客户端的功能。
四、【实验原理】
1.TCP/IP协议TCP/IP协议(TransmissionControlProtocol/InternetProtocol)叫做传输控制/网际协议,又叫网络通信协议,这个协议是Internet国际互联网络的基础。
TCP/IP是用于计算机通信的一组协议,我们通常称它为TCP/IP协议族。
它是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的INTERNET是目前国际上规模最大的计算机网络,正因为INTERNET的广泛使用,使得TCP/IP成了事实上的标准。
TCP/IP是网络中使用的基本的通信协议。
虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。
TCP/IP由四个层次组成:
数据链路层、网络层、传输层、应用层,其分层模型及协议如表1所示:
表1-TCP/IP分层模型
网络接口层(Network)网络接口层是TCP/IP网络体系的最低层,负责通过网络发送IP数据报,或者从网络上接收物理帧,抽出IP数据报,交给IP层。
网络层(Internet)网络层负责相邻计算机之间的通信。
其功能包括三方面:
嵌入式网关实验
1)处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口;
2)处理输入IP数据报:
首先检查其合法性,然后进行寻径——假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报;
3)处理路径、流控、拥塞等问题。
传输层(Transport)传输层提供应用程序间的通信。
其功能包括:
1)格式化信息流;
2)提供可靠传输。
为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。
应用层(Application))应用层向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。
远程登录使用TELNET协议提供在网络其它主机上注册的接口。
TELNET会话提供了基于字符的虚拟终端。
文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。
2.TCP协议简介
TCP(TransmissionControlProtocol)协议是TCP/IP协议栈中的传输层协议,它通过序列确认以及包重发机制,提供可靠的数据流发送和到应用程序的虚拟连接服务。
与IP协议相结合,TCP组成了因特网协议的核心。
由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的网络终端上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。
这是通过使用TCP的“端口号”完成的。
网络IP地址和端口号结合成为唯一的标识,称为“套接口”或“端点”。
TCP在端点间建立连接或虚拟电路进行可靠通信。
TCP服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用等技术。
TCP通过面向连接的、端到端的可靠数据报发送来保证可靠性。
TCP在字节上加上一个递进的确认序列号来告诉接收者发送者期望收到的下一个字节。
如果在规定时间内,没有收到关于这个包的确认响应,TCP将重新发送此包。
TCP的可靠机制允许设备处理丢失、延时、重复及读错的包。
超时机制允许设备监测丢失包并请求重发。
同时,TCP提供了有效流控制。
当向发送者返回确认响应时,接收TCP进程就会说明它能接收并保证缓存不会发生溢出的最高序列号。
3.Linux下的Socket编程
Socket是TCP/IP协议传输层所提供的接口(称为套接口),供用户编程访问网络资源,它是使用标准UNIX文件描述符和其他程序通信的方式。
Linux的套接口通信模式与日常生活中的电话通信非常类似,套接口代表通信线路中的端点,端点之间通过通信网络来相互联系。
Socket接口被广泛应用并成为事实上的工业标准。
它是通过标准的UNIX文件描述符和其他程序通信的一个方法。
按其应用,套接口主要有以下两种分类:
流式套接口(StreamSocket)数据报套接口(DatagramSocket)流式套接口采用TCP协议通信,而数据报套接口采用UDP协议通信。
4.本次实验实验原理:
本实验需要实现一个TCP服务器,该服务器将一直监听某一端口,等待客户端发起的连接请求。
当客户端与实验箱的服务器端建立TCP连接后,客户端如果向服务器端发送数据,则服务器端收到数据后会将数据重新发送给客户端。
TCP服务器的程序流程如图1所示。
图1-TCP服务器程序流程图
五、【实验步骤】
1.按照实验原理的描述编写程序,并保存为.c后缀的源程序文件,文件名为:
ex07_TCPEchoSever.c;
2.准备设置PC端的环境,准备工作包括:
实验箱与PC的硬件连接、串口通信软件设置、网络环境设置;
(1)实验箱与PC的硬件连接:
一般情况下,实验箱同时需要两种方式与PC建立连接:
串口和以太网。
首先使用标准9针串口线,
将实验仪的UART0与PC的串口相连;然后,使用实验箱附带的网线,将实验箱的以太网接口与PC的网卡直接相连,或者将实验箱与路由器相连。
这样就完成了硬件连接,如图2所示。
图2-实验箱与PC的基本硬件连接
(2)串口通信软件设置
在PC端需要使用串口通信软件来对实验箱进行控制。
通常情况下,使用Windows系统自带的“超级终端”工具即可(或者用户也可以使用其他同类型的软件,这里仅针对“超级终端”做详细设置说明)。
首先在“开始”菜单中,找到“程序”—>“附件”—>“通讯”—>“超级终端”,如图3所示。
图3-打开超级终端
>1、设置超级终端名称,任意名称即可,如图4:
图4-设置连接名称
>2、选择串口COM1,如图5:
图5-选择连接的串口
>3、设置串口属性,每秒位数设置为115200,数据流控制选择无,如图6:
图6-设置所选的串口的属性
>4、将物联网多网设计平台的电源打开,A8实验仪的拨动开关拨至“ON”,并按下实验仪上的“Power”键,可以在超级终端中看到图7所示的启动提示信息:
图7-U-boot启动界面
>5、待系统正常启动之后,可以看到“SAPP210.XXXXlogin:
”的提示,等待用户登录,如图8所示:
图8-Linux启动完成
>6、按下Enter键,进入登陆,输入用户名“root”,密码“111111”,成功登录到系统:
图9-登陆到linux成功
(3)、网络环境设置
使用手动配置实验仪IP地址的方法必须设置电脑为静态IP:
点击打开网上邻居的属性,查看本地连接的属性,点击查看“Internet协议(TCP/IP)”的属性:
图10-查看“Internet协议(TCP/IP)”
在弹出的“Internet协议(TCP/IP)属性”对话框中,按照如图11设置IP,单击“确定”按钮,为电脑设置好静态IP:
192.168.87.1,如图11:
图11-设置电脑的静态IP
(4)配置实验仪IP地址
在超级终端中,执行命令“ipconfigeth0-i192.168.87.130-m255.255.255.0-g192.168.87.1”,为实验箱手动配置IP地址,如图12所示:
图12-手动配置实验箱的IP地址
设置完成后,需要执行“servicenetworkrestart”命令重启网络服务,使设置生效,如图13所示。
需要注意的是,实验箱的IP地址需要设置为与电脑同一个网段:
图13-重启网络服务
查看当前实验箱的IP地址为,执行命令“ifconfigeth0”,查看结果如图14:
图14-查看实验箱当前IP地址
3.在Ubuntu的环境下,编译嵌入式C程序,打开Ubuntu终端工具,输入编译命令“arm-linux-gcc-0ex07TCPEchoSeverex07_TCPEchoSever.c”,编译实验程序,如图15:
图15-Ubuntu编译目标程序
查看编译结果,生成新的文件:
ex07_TCPEchoServer文件;
将编译好的可执行程序文件从Ubuntu中复制到Windows系统,然后打开“我的电脑”,在地址栏中输入“ftp:
//192.168.87.1”,并将上面生成的ex07_TCPEchoServer文件拷贝到该目录下,如图16所示:
图16-拷贝执行文件到对应目录
4、为执行文件增加权限并执行该文件如图17:
图17-增加权限并执行
5、在PC的windows环境下,开始->运行,输入cmd回车后,进入到命令行模式,输入“telnet192.168.87.1308000”命令,TCP访问实验箱运行的ex07_TCPEchoServer运行程序,如图18所示:
图18-远程telnet访问实验箱8000端口的TCP服务器
6、在telnet客户端内输入字符具体现象如图19所示:
图19-TCP实验运行结果
六、【实验中的问题小结及实验总结】
问题:
(1)、在设置电脑的静态IP的过程中,出现本地连接internet协议属性打不开的情况,后来关掉实验室教学管理系统,就正常了;
(2)、在Ubuntu下终端工具输入编译命令,编译嵌入式源文件时提示不存在该文件,后来发现是因为没有进入到源文件所在的目录下面,使用cd命令进入之后,编译命令可以正常执行。
(3)在设置实验箱的IP地址时,第一次设置失败,后来改变了后几位主机号部分,避免了与网络中其他实验箱的IP重合;
(4)在执行命令telnet访问TCP服务时出现失败的情况,后来发现是windows的telnet功能没有开启,开启之后运行正常。
总结:
通过本次TCP通信实验的完成,了解了TCP网络的基本原理,和使用Socket进行TCP网络开发的基本方法;对于Ubuntu系统有了一定的了解,掌握了对于使用Ubuntu编译执行嵌入式c程序的方法;通过实验的完成,也对于嵌入式开发环境的搭建有了一定了解,掌握了搭建开发环境的基本步骤和配置方法等;
七、【源程序】
#include
#include
#include
#include
#include
#include
staticunsignedshortport=8000;//定义端口号为8000
intmain(intargc,char*argv[])
{
char*recvBuffer=(char*)malloc(4002);//非配数据接收内存
intrecvLen;
intlistenfd,connfd;
structsockaddr_inserverAddr,clientAddr;
intclientAddrSize;
printf("TCPEchoServerStarted\n");
//CreateaTCPsocketconnection
listenfd=socket(AF_INET,SOCK_STREAM,0);//将套接口由主动转为被动
if(listenfd==-1)
{
printf("Invalidsocket\n");
exit
(1);
}
//socket地址赋值
bzero(&serverAddr,sizeof(serverAddr));
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(port);
serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);
printf("Bindingserversockettoport%d\n",port);
//为本地协议地址绑定socket端口
if(bind(listenfd,(structsockaddr*)&serverAddr,sizeof(structsockaddr))==-1)
{
printf("Badbind\n");
exit
(1);
}
if(listen(listenfd,1)==-1)//Allow1queuedrequests
{
printf("Badlisten\n");
exit
(1);
}
printf("Acceptingconnections(Max1connections)...\n");
for(;;)
{
clientAddrSize=sizeof(structsockaddr_in);
//阻塞等待客户端的连接
connfd=accept(listenfd,(structsockaddr*)&clientAddr,&clientAddrSize);
if(connfd==-1)
{
printf("Badaccept\n");
exit
(1);
}
//接收PC机发来的数据并发送回去
while((recvLen=recv(connfd,recvBuffer,4000,0))>0)
{
send(connfd,recvBuffer,recvLen,0);
}
printf("Connectionclosed.\n");
close(connfd);
}
return0;
}