计算机网络课程设计报告-TCP数据包的发送与接收_第1页
计算机网络课程设计报告-TCP数据包的发送与接收_第2页
计算机网络课程设计报告-TCP数据包的发送与接收_第3页
计算机网络课程设计报告-TCP数据包的发送与接收_第4页
计算机网络课程设计报告-TCP数据包的发送与接收_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机网络课程设计报告题目TCP数据包的发送与接收一、问题描述TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP协议在网络层IP协议的基础上,向应用层用户进程提供可靠的、全双工的数据流传输。本课程设计的目的就是设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议以及IP协议的关系,使我们对TCP协议的工作原理有更深入的认识。二、概要设计1.设计原理互联网络层是TCP/IP协议参考模型中的关键部分。当多信息的传输要求比较高时,我们才用TCP来实现数据的传输。本程序是在windows环境下实现了发送TCP数据包的功能。主要包括定义IP头部、TCP头部、和伪头部的数据结构,填充IP头部,计算IP头部校验和,构造TCP伪头部,填充TCP头部,计算TCP头部校验和,发送TCP数据报。接着是对客户端程序的开发,程序结构与服务端程序类似,也包括定义IP头部、TCP头部、和伪头部的数据结构。当应用进程需要通过TCP发送时,它就将此应用层报文传送给执行TCP协议的传输实体。TCP传输实体将用户数据加上TCP报头,形成TCP数据包,在TCP数据包上增加IP头部,形成IP包。TCP协议的数据传输单位称为报文段,报文段报头的长度是20B-60B,选项部分长度最多为40B。TCP报文段主要包括:(1)端口号:端口号字段包括源端口号和目的端口号。每个端口号的长度是16位,分别表示发送该TCP包的应用进程的端口号和接收该TCP数据包的应用进程端口号 。(2)序号:长度为32位。由于TCP协议是面向数据流的,它所传送的报文段可以视为连续的数据流,因此需要给每一个字节编号。序号字段的“序号”指的是本报文段数据的第一个字节的序号。(3)报文长度:该字段长度为4位。TCP报文长度是以4B为一个单元来计算的,实际上报文长度在20B-60B之间,因此这个字段的值在5-15之间。(4)TCP头部数据:包括源端口号、序号、确认号、报文长度、保留URG、ACK、PSH,数据包头部的格式RST、SYN目的端口号。(5)FIN:紧急指针,保留长度16位,留作以后使用,目前全部置0。保留控制:这个字段定义了6种不同的标识,每一个标志占一位或多位。URG位为1时,表明应尽快把数据传送给应用程序,否则表明允许数据在缓存中存放一段时间。RST位为1时,表明要强制切断连接。SYN位1时,表明有确立连接的请求,这时,把序号字段的初始值作为序号字段的值,以便开始通信。FIN位为1时,表明发送方已经没有数据发送了,长度为16位,指向必须紧急处理的位置,只有当标志URG=1时紧急指针才生效。从TCP报头后面的报文数据开始,到紧急指针所指出长度的数据,就是必须紧急处理的数据。(5)FIN:紧急指针,保留长度16位,留作以后使用,目前全部置0。保留控制:这个字段定义了6种不同的标识,每一个标志占一位或多位。URG位为1时,表明应尽快把数据传送给应用程序,否则表明允许数据在缓存中存放一段时间。RST位为1时,表明要强制切断连接。SYN位1时,表明有确立连接的请求,这时,把序号字段的初始值作为序号字段的值,以便开始通信。FIN位为1时,表明发送方已经没有数据发送了,长度为16位,指向必须紧急处理的位置,只有当标志URG=1时紧急指针才生效。从TCP报头后面的报文数据开始,到紧急指针所指出长度的数据,就是必须紧急处理的数据。2.IP头部、TCP头部、和伪头部的数据结构图示:(1)TCP数据包和IP的关系图:TCP报头TCP报头TCP数据IP数据IP报头(2)TCP协议的传输单元称为报文段格式:TCP头部TCP头部数据源端口号目的端口号序号确认号报文长度保留URGACKPSHRSTSYNFIN窗口大小校验和紧急指针选项及填充(3)伪头部的格式:08162431源IP地址目的IP地址00000000协议号(6)TCP长度三、详细设计1.程序流程图:2.计算校验和为了计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。校验和(checksum),在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验的过程中看作数字的其它字符串。3.源代码服务器端:importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.*;import.*;importjavax.swing.*;publicclassMyServer3extendsJFrameimplementsActionListener{//下面是简易界面所需的组件 JLabeljlb1,jlb2,jlb3,jlb4; JTextAreajta2=null; JTextFieldjtf=null; JButtonjb=null; JPaneljp1,jp3; JScrollPanejsp=null; PrintWriterpw=null; publicstaticvoidmain(String[]args){ MyServer3mm=newMyServer3(); } publicMyServer3()//构造函数 { jta2=newJTextArea(); jsp=newJScrollPane(jta2); jtf=newJTextField(20); jb=newJButton("发送"); jb.addActionListener(this); jlb1=newJLabel("自己的端口号:"); jlb3=newJLabel("自己的IP地址:"); jlb2=newJLabel("对方的端口号:"); jlb4=newJLabel("对方的IP地址:"); jp1=newJPanel(newGridLayout(2,2)); jp1.add(jlb1); jp1.add(jlb3); jp1.add(jlb2); jp1.add(jlb4); jp3=newJPanel(); jp3.add(jtf); jp3.add(jb); this.add(jp1,"North"); this.add(jsp,"Center"); this.add(jp3,"South"); this.setSize(400,250); this.setTitle("TCP全双工通讯Server"); this.setLocation(400,200); this.setVisible(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); try{ ServerSocketss=newServerSocket(8088);//创建套接字 //等待客户端连接 Sockets=ss.accept(); InetAddressinet=s.getInetAddress(); jlb1.setText("自己的端口号:"+s.getLocalPort()+""); jlb3.setText("自己的IP地址:"+s.getLocalAddress()); jlb2.setText("对方的端口号:"+s.getPort()+""); jlb4.setText("对方的IP地址:"+inet.getHostAddress()); InputStreamReaderisr=newInputStreamReader(s.getInputStream()); BufferedReaderbr=newBufferedReader(isr); pw=newPrintWriter(s.getOutputStream(),true); while(true) { Stringinfo=br.readLine(); jta2.append("客户端:"+info+"\r\n"); } }catch(Exceptione){ //TODO:handleexception } } @Override publicvoidactionPerformed(ActionEvente){ //TODOAuto-generatedmethodstub if(e.getSource()==jb) { //把服务器在jtf写的内容发送给客户端 Stringinfo=jtf.getText(); jta2.append("服务器:"+info+"\r\n"); pw.println(info); //清空 jtf.setText(""); } }}客户端:importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.*;import.*;importjavax.swing.*;publicclassMyClient3extendsJFrameimplementsActionListener{ JLabeljlb1,jlb2,jlb3,jlb4; JTextAreajta=null; JTextFieldjtf=null; JButtonjb=null; JPaneljp1,jp2; JScrollPanejsp=null; PrintWriterpw=null; publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub MyClient3mm=newMyClient3(); } publicMyClient3() { jta=newJTextArea(); jsp=newJScrollPane(jta); jtf=newJTextField(20); jb=newJButton("发送"); jb.addActionListener(this); jp1=newJPanel(); jp1.add(jtf); jp1.add(jb); jlb1=newJLabel("自己的端口号:"); jlb3=newJLabel("自己的IP地址:"); jlb2=newJLabel("对方的端口号:"); jlb4=newJLabel("对方的IP地址:"); jp2=newJPanel(newGridLayout(2,2)); jp2.add(jlb1); jp2.add(jlb3); jp2.add(jlb2); jp2.add(jlb4); this.add(jp2,"North"); this.add(jsp,"Center"); this.add(jp1,"South"); this.setSize(400,250); this.setTitle("TCP全双工通讯Client"); this.setLocation(400,200); this.setVisible(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); try{ Sockets=newSocket("",8088); InetAddressinet=s.getInetAddress(); jlb1.setText("自己的端口号:"+s.getLocalPort()+""); jlb3.setText("自己的IP地址:"+s.getLocalAddress()); jlb2.setText("对方的端口号:"+s.getPort()+""); jlb4.setText("对方的IP地址:"+inet.getHostAddress()); InputStreamReaderisr=newInputStreamReader(s.getInputStream()); BufferedReaderbr=newBufferedReader(isr); pw=newPrintWriter(s.getOutputStream(),true); while(true) { Stringinfo=br.readLine(); jta.append("服务器:"+info+"\r\n"); } }catch(Exceptione){ //TODO:handleexception } } @Overri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论