




已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 传输层与网络编程 1 ISO OSI和TCP IP协议模型 信息对抗 2 传输层的概念 传输层中有两个不同的协议 无连接的用户数据报协议 UDP 和面向连接的传输控制协议 TCP 3 5 1 1传输层的概念 传输层的端到端通信过程 4 5 1 2传输层的功能 传输层为应用层的应用进程之间提供端到端的逻辑通信 需要实现以下几个功能 1 应用进程之间的寻址2 提供数据的可靠传输3 流量控制4 拥塞控制 5 5 1 3QoS服务质量 服务质量 QoS 的好坏可以使用一组参数来描述 传输层的一个主要功能是增强网络层提供的服务质量 典型的服务质量参数包括以下一些 连接建立延迟 连接建立失败的概率 吞吐率 传输延迟 残余误码率 安全保护 优先级 恢复功能 6 5 2 1端口 端口用来惟一的标识主机中的每一个进程 是传输层中进程的地址 7 常用端口号 8 5 2 1端口 在TCP IP协议中 端口是一种软件结构 是传输层协议和应用层协议交互时的接口 每个端口有个惟一的端口号端口和应用进程是一一对应的 9 5 2 1端口 在TCP IP体系结构中 传输层建立连接时采用了客户 服务器模式 主动发起连接建立的进程称为客户 Client 而被动等待连接建立的进程称为服务器 Server 在通信时 服务器进程先运行 然后等待客户进程的请求 对于常用的服务 如Web服务 FTP服务等 这些服务使用的传输层协议和端口号都是固定的 通常把这类端口称为常用端口 其中 0 1023被分配给一些最常用的应用层程序 对于客户进程 操作系统通常会随机给它分配一个大于1024的端口号 10 表5 1常用端口号和功能 11 TCP协议工作原理 为应用进程提供可靠的 全双工的 端到端的 面向连接的基于字节流的服务 12 连接 两个对等实体为实现数据通信而进行的一种结合 面向连接是在一个应用程序开始传送数据到另一个应用程序之前 它们之间必须相互沟通 也就是它们之间需要相互传送一些必要的参数 以确保数据的正确传送 13 TCP协议概述 面向连接的服务具有连接建立 数据传输和连接释放三个阶段 14 TCP连接的建立与终止 1 TCP连接的建立在TCP协议中 建立连接使用 三次握手 机制来完成 这种三次握手机制可以由一方发起同步握手过程 而另一方响应该同步过程 也可以是由通信双方同时发起连接的同步握手 15 建立连接 假设主机A想与主机B建立TCP连接 主机A就发送连接请求 CR 及其初始报文号给主机B 这个消息段封装在IP数据包中 然后发送到因特网 主机B接收到连接请求后之后就分配接收缓存和发送缓存给这个TCP连接 然后就给主机A回送一个确认连接 含B的初始报文号 对A的初始报文的确认号 主机A接收到这个回送消息段之后也分配接收缓存和发送缓存 然后就给主机B回送确认报文 这时主机A和主机B之间就建立了TCP连接 它们就可在这个连接上相互传送数据 由于主机A和主机B之间连接要连续交换3次消息 因此把这种TCP连接建立的方法称为三次握手 16 确认和重传 假设主机A和主机B之间有一个TCP连接 当主机A发送一个包含数据的报文时 它启动一个定时器后就等待主机B对这个报文的响应 主机A在发送报文之后期待在一定的时间范围里接收到B的响应 这个期待的时间称为传输等待时间 如果在等待时间之内没有接收到确认报文 主机A就重发包含数据的消息段 17 TCP连接的建立与终止 2 TCP连接的终止由于TCP连接是一个全双工的数据通道 一个连接的终止必须由通信双方共同完成 当通信的一方没有数据要发送给对方时 可以向对方发送关闭连接请求 这时 它虽然不再发送数据 但并不排斥在这个连接上继续接收数据 只有当通信的对方也递交了终止连接的请求后 这个TCP连接才会完全终止 在终止连接时 既可以由一方发起而另一方响应 也可以双方同时发起 无论怎样 收到终止连接请求的一方必须使用ACK字段给予确认 实际上 TCP连接的关闭过程也是一个三次握手的过程 18 TCP报文结构 TCP报文是TCP层传输的数据单元由标题和数据组成 19 源端口和目的端口 发送方和接收方的TCP端口号 源端口的16位用来识别本机TCP 目的端口的16位用来识别远程机器的TCP 序号 该报文数据在发送方的数据流中的位置 当前时间值计算出一个数值作为起始序号 顺序号 32位的顺序号用来指示当前数据块在整个消息中的位置确认号 32位的确认号用来指示下一个数据块顺序号 也可间接表示最后接收到的数据块顺序号 顺序号域和确认号域由TCP收发两端主机在执行可靠数据传输时使用 TCP报文首部格式 20 TCP报文首部格式 首部长度 表示TCP报文首部信息的长度 由于首部可能含有选项内容 因此TCP首部的长度是不确定的 首部长度的单位是32比特 首部长度也指示了数据区在报文段中的起始偏移值 码元比特 6比特 URG ACK PSH RST SYN FIN 21 TCP报文首部格式 窗口 窗口通告值 发送方根据接收的窗口通告值调整窗口大小 校验和 与UDP校验和计算方法相同 同样需要包含伪首部 伪首部中的协议类型值为6 选项 用于TCP连接双方在建立连接时协商最大的报文段长度MSS 填充 为了使选项字段对齐32比特 可能采用若干位0作为填充数据 22 TCP数据的可靠性传输 TCP是一个可靠的传输层协议TCP建立在无连接 不可靠的IP协议基础之上 IP分组在传输过程中可能出错 丢失 乱序或重复 为了保证数据的可靠传输TCP必须通过差错控制来提供可靠性 23 UDP协议工作原理 UDP 用户数据报协议 UDP提供一种面向无连接的服务不保证可靠的数据传输 不具有确认 重传等机制 而是依靠应用层协议来处理数据的可靠传输问题 24 UDP协议工作原理 1 UDP工作原理UDP工作过程 25 UDP报文格式 源端口和目的端口 16比特 源端口是可选的 目的端口必须填写 若源端口不选 则取值为0 长度字段 UDP数据报的总长度 包括UDP首部和用户数据 长度以八位组为单位 校验和字段 校验和计算可选 该字段全0 则表示不计算校验和 用于高效率传输 UDP使用全1来表示校验和值为0 26 UDP协议工作原理 UDP协议很简单 只在IP服务之上增加了端口和有限的差错检测功能 UDP从应用进程得到数据后 附加上源端口号和目的端口号字段 以及其他两个小字段 然后将形成的报文段交给网络层 网络层将该报文段封装到一个IP分组中 然后尽力而为地将此分组发送给接收主机 分组到达接收主机后 UDP使用目的端口号将报文段中的数据交付给相应的应用程序进程 27 UDP协议 提供协议端口以便区分在一台计算机上运行的多个程序它提供与IP一样的不可靠 无连接的数据报交付服务 UDP报文可能出现丢失 重复或乱序到达等现象 28 UDP特性1 无连接协议UDP是一个无连接协议 即发送数据之前不需要建立连接 因此减少了开销和发送数据之前的时延 当它想传送时就简单地去抓取来自应用程序的数据 并尽可能快地把它扔到网络上 在发送端 UDP传送数据的速度仅仅是受应用程序生成数据的速度 计算机的能力和传输带宽的限制 在接收端 UDP把每个消息段放在队列中 应用程序每次从队列中读一个消息段 UDP尽最大努力进行数据传输 即不保证可靠传输 29 UDP特性2 由于传输数据不建立连接 因此主机不需要维持具有许多参数的 复杂的连接状态表 一台服务机可同时向多个客户机传输相同的消息 UDP支持一对一 一对多 多对一和多对多的交互式通信 30 UDP特性3 UDP信息包的标题很短 只有8个字节 相对于TCP的20个字节信息包的额外开销很小 31 5 5传输层的流量控制方法 流量控制的目的是为了充分利用网络资源 防止网络拥塞与死锁 达到尽可能大的网络吞吐率 拥塞是网络中数据流量过大而引起的网络性能下降 死锁则是由于数据量过大使得网络中局部或整体的数据传输陷入停顿 造成拥塞或死锁的原因有 网络处理速度过低 存储区有限 线路容量有限 传输出错 误码等 32 发送窗口 发送窗口就是发送端允许不等确认而连续发送的帧的序号表 允许连续发送的帧的数量称为发送窗口尺寸 表示为W l l W W j 发送方 33 5 5 1滑动窗口协议流量控制技术 2 滑动窗口工作原理 34 接收窗口 接收窗口是接收端允许接收的帧的序号表 允许接收的帧的数量称为接收窗口尺寸 对接收端收到的帧的序号落在接收窗口外的帧被直接丢弃 只有落在接收窗口内的帧才会被接收端进行校验处理 若校验正确 当接收的帧不是接收窗口后沿帧时 必须暂存在输入缓冲区 不能交给网络层 当接收到接收窗口后沿帧时 会将其连同后面连续的若干个检验过的正确帧按顺序交给网络层 在发回确认帧的同时将接收窗口向前滑动相应的数量 l l W i 接收方 W 35 滑动窗口概念 接收窗口驱动发送窗口的转动 36 滑动窗口协议 0123456701234567 已成功发出的数据帧 将发出的数据帧 窗口后沿 窗口前沿 帧序号 发送方缓冲区 0123456701234567 已正确接收的数据帧 将收到的数据帧 帧序号 接收方缓冲区 窗口后沿 窗口前沿 37 滑动窗口示例 0123456701234567 0123456701234567 0123456701234567 0123456701234567 0123456701234567 0123456701234567 0123456701234567 0123456701234567 0123456701234567 0123456701234567 0 1 2 ACK3 3 4 5 6 ACK4 38 5 2 2套接字 在TCP IP网络中 可用IP地址标识每一个主机 再用端口号标识主机中的进程 考虑到网络中多协议的特点 要惟一标识一个进程 还应加上协议类型 套接字 Socket 协议类型 IP地址 端口号 39 5 6基于传输层的网络编程 Socket定义了许多函数和例程 可以用它们来开发TCP IP网络应用程序 大多数计算机网络应用层程序都使用Socket 套接字 进行网络通信 很多操作系统都提供了这种基于TCP IP网络的应用程序接口 40 5 6 1WindowsSockets规范 1 WindowsSockets套接字Sockets是在UNIX系统上提出来的 Microsoft公司在此基础上建立了WindowsSockets规范 在Windows环境中 Winsock接口成为了一个与特定协议无关的接口 WindowsSockets规范给应用程序开发者提供了一套简单的API 应用程序接口 此外 WindowsSockets也定义了一个二进制接口 保证WindowsSocketsAPI应用程序能在任何符合WindowsSockets规范的网络软件上进行工作 41 5 6 1WindowsSockets规范 1 WindowsSockets套接字 42 基于UDP协议的编程 1 UDP连接方式的通信规程UDP是面向无连接的协议 即在发送数据之前不必建立连接 只需要将Winsock绑定到一个端口上 其他无连接协议的Winsock如果向本机发送数据 就需要指出地址和端口号 43 基于UDP协议的编程 1 UDP连接方式的通信规程UDP协议不需要建立连接 但是在创建UDP应用程序时 必须调用Bind方法 Bind方法的作用是为控件 保留 一个本地端口 以使其他应用程序不能使用该端口进行通信 在客户与服务器之间发送数据 需要完成以下三步工作 连接的双方 一是将RemoteHost属性设置为对方计算机的名称或IP地址 二是将RemotePort属性设置为对方计算机Winsock控件所的LocalPort属性 三是调用Bind方法 指定使用的LocalPort 44 基于UDP协议的编程 使用UDP协议时 可以任意改变RemoteHost和RemotePort属性 同时保持绑定在同一个LocalPort上因为一个UDP应用程序既可以作为服务器也可以作为客户端 所以两台计算机的地位可以看成是 平等 的 这种应用程序也称为点到点程序 而TCP协议与此不同 在改变RemoteHost和RemotePort属性之前 必须先关闭连接 45 5 6 1WindowsSockets规范 2 Winsock控件的属性 方法和事件以VisualBasic 以下简称VB 为例 说明网络编程的基本方法 VB提供了一个Winsock控件 Winsock控件是用于将WindowsSockets接口简化成易于使用的VB内部接口 Winsock使用十分方便 当然 Winsock控件并不能完全取代Socket函数 它有一些不足之处 如不支持广播和组播特性 但在基本的网络通信中 Winsock控件仍然是一个很好的工具 46 5 6 1WindowsSockets规范 2 Winsock控件的属性 方法和事件 1 Winsock控件的属性 47 5 6 1WindowsSockets规范 2 Winsock控件的属性 方法和事件 2 Winsock控件的方法Accept方法Bind方法Close方法GetData方法Listen方法PeekData方法SendData方法 48 5 6 1WindowsSockets规范 2 Winsock控件的属性 方法和事件 3 Winsock控件的事件Close事件Connect事件ConnectionRequest事件DataArrival事件SendComplete事件SendProgress事件Error事件 49 5 6 1WindowsSockets规范 4 Winsock控件的使用方法使用Winsock控件时 由网络应用程序决定使用UDP协议还是TCP协议 利用VB设计网络应用程序时 可在VB的工具箱中找到Winsock控件图标 在控件 属性 窗口中单击 Protocol 在右边栏目中选择 sckTCPProtocol 或 sckUDPProtocol 使用程序代码来设置Winsock控件的Protocol属性 例如 Winsock1 Protocol sckTCPProtocol 50 5 6 2基于UDP协议的编程 1 UDP连接方式的通信规程UDP是面向无连接的协议 即在发送数据之前不必建立连接 只需要将Winsock绑定到一个端口上 其他无连接协议的Winsock如果向本机发送数据 就需要指出地址和端口号 51 5 6 2基于UDP协议的编程 1 UDP连接方式的通信规程UDP协议不需要显式 设置连接 连接 但是在创建UDP应用程序时 必须调用Bind方法 Bind方法的作用是为控件 保留 一个本地端口 以使其他应用程序不能使用该端口进行通信 在客户与服务器之间发送数据 需要完成以下三步工作 连接的双方 一是将RemoteHost属性设置为对方计算机的名称或IP地址 二是将RemotePort属性设置为对方计算机Winsock控件所的LocalPort属性 三是调用Bind方法 指定使用的LocalPort 52 5 6 2基于UDP协议的编程 1 UDP连接方式的通信规程使用UDP协议时 可以任意改变RemoteHost和RemotePort属性 同时保持绑定在同一个LocalPort上 而TCP协议与此不同 在改变RemoteHost和RemotePort属性之前 必须先关闭连接 因为一个UDP应用程序既可以作为服务器也可以作为客户端 所以两台计算机的地位可以看成是 平等 的 这种应用程序也称为点到点程序 53 5 6 2基于UDP协议的编程 2 A计算机UDP聊天程序设计 1 在VB中创建新的标准EXE工程 54 5 6 2基于UDP协议的编程 2 A计算机UDP聊天程序设计 2 Winsock控件的程序源代码启动程序 装载表单时设置Winsock控件属性 源代码如下 PrivateSubForm Load WithwinSockA 设置Winsock控件的相关属性 Protocol sckUDPProtocol 设置UDP协议 RemoteHost wlgc d3 设置远程计算机名 RemotePort 8000 设置远程计算机端口号 Bind9000 绑定本地端口号 EndWithEndSub 55 5 6 2基于UDP协议的编程 2 A计算机UDP聊天程序设计 3 在接收文本框输入数据时 由Winsock控件立即将数据发送 源代码如下 PrivateSubtxtSend Change winSockA SendDatatxtSend Text 在键入文本时 立即发送出去 EndSub 4 Winsock收到数据后 将其放入数据到达文本框显示 源代码如下 PrivateSubwinSockA DataArrival ByValbytesTotalAsLong DimstrDataAsStringwinSockA GetDatastrData 接收输入的数据 txtArr Text strData 在文本框显示接收的数据 EndSub 56 5 6 2基于UDP协议的编程 2 A计算机UDP聊天程序设计 5 要退出程序 关闭winsock控件 解除端口绑定 源代码如下 PrivateSubCommand1 Click winSockA Close 关闭winsock控件 解除端口绑定 UnloadMe 退出程序 EndSub 57 5 6 2基于UDP协议的编程 3 B计算机UDP聊天程序设计B端的的程序与A端的几乎一样 只是控件的名称不一样 另外特意在Winsock控件RemoteHost中使用了IP地址 各控件的源代码如下 各语句的作用与A端的程序中一样 PrivateSubCommand1 Click winSockB CloseUnloadMeEndSub 58 5 6 2基于UDP协议的编程 3 B计算机UDP聊天程序设计B端的的程序与A端的几乎一样 只是控件的名称不一样 另外特意在Winsock控件RemoteHost中使用了IP地址 59 5 6 2基于UDP协议的编程 聊天程序设计将以上两个程序编译成EXE文件 分别安装到不同的机器上 即可进行两个计算机之间的通信 实际上在同一台计算机上也可以进行通信 只要使用不同的端口号就可以 60 5 6 3基于TCP协议的编程 TCP协议是面向连接的 在服务器和客户端必须建立连接后才能传输数据 服务器端首先要为Winsock控件设置一个端口号 然后通过调用Winsock控件的Listen方法 使服务器程序在该端口监听客户端的连接请求 客户端首先也要在Winsock控件中 设置好服务器端的IP地址和端口号 还要设置客户端本地的端口号 当客户端向服务器发出连接请求后 服务器在ConnectionRequest事件中调用Accept方法接受请求 从而建立与客户端的连接 只有双方的连接建立后 才能进行数据的互相传输 61 5 6 3基于TCP协议的编程 1 服务器端程序设计1 在VB中创建新的 标准EXE 工程 放置程序需要的控件 在Form表单添加6个控件 2个label 用作提示信息 2个text 1个为接收数据 1个为发送数据 2个command 1个为发送数据命令cmdSend 1个为退出运行命令cmdQuit 还一个重要的Winsock 控件 命名为sockServer 各控件的程序源代码如下 62 5 6 3基于TCP协议的编程 1 服务器端程序设计 1 启动程序 装载表单时设置Winsock控件属性 源代码如下 PrivateSubForm Load sockServer Protocol sckTCPProtocol 设置TCP协议 sockServer LocalPort 5000 服务器端口号 最好大于1000 sockServer Listen 开始侦听 EndSub 63 5 6 3基于TCP协议的编程 1 服务器端程序设计 2 退出 命令按钮的click事件 源代码如下 PrivateSubcmdQuit Click UnloadMeEndSub 3 发送 命令按钮的click事件 源代码如下 PrivateSubcmdSend Click sockServer SendDataText2 TextEndSub 64 5 6 3基于TCP协议的编程 1 服务器端程序设计 4 表单卸载时要关闭winsock控件 PrivateSubForm Unload CancelAsInteger sockServer CloseEndSub 5 Winsock控件的close事件 源代码如下 PrivateSubsockServer Close sockServer CloseEndSub 65 5 6 3基于TCP协议的编程 1 服务器端程序设计 6 客户端的连接请求到达时 会触发Winsock控件的ConnectionRequest事件 事件处理源代码如下 PrivateSubsockServer ConnectionRequest ByValrequestIDAsLong 当收到连接请求时 Winsock处于侦听状态 此时应该使用Close方法关闭Winsock 然后使用Accept方法接受连接请求 sockServer ClosesockServer AcceptrequestID 表示客户请求连接的ID号 EndSub 66 5 6 3基于TCP协议的编程 1 服务器端程序设计 7 客户端的数据到达时 触发winsock的DataArrival事件 源代码如下 PrivateSubsockServer DataArrival ByValbytesTotalAsLong DimdataAsStringsockServer GetDatadata 接收来自客户端的数据 Text1 Text data 将接收的数据放入文本框显示 EndSub 67 5 6 3基于TCP协议的编程 2 客户端程序设计相对于服务器 客户端的程序代码要简单些 只需建立连接就可以传送数据了 本客户端程序的控件与服务器端一样 其相应代码如下 68 5 6 3基于TCP协议的编程 2 客户端程序设计 1 程序启动时 装载表单时设置Winsock控件的相关属性 源代码如下 PrivateSubForm Load sockClient
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 下传统节日作文清明节(8篇)
- 赤壁怀古:古诗文意象解读教案
- 科技之光与时代力量:初中八年级科普说明文阅读指导教案
- 时间和位移的课件
- 一年级日记看电影100字15篇
- 贵金属交易风险披露书及合同书
- 吉林省松原市前郭县2024-2025学年八年级下学期期末考试物理试题(含答案)
- 早期阅读犟龟课件
- 观少年派有感1500字(10篇)
- 纪检业务培训课件模板
- 安全生产标准化基本规范评分表
- 《机械常识(第2版)》中职技工全套教学课件
- 咖啡学概论智慧树知到期末考试答案章节答案2024年华南理工大学
- 工字钢承重表
- 2023房屋安全鉴定服务规范
- 矿山用电安全知识培训课件
- 床垫营销方案
- 《落实主体责任》课件
- 收到美因基因检测报告痛风
- 2024年贵州水投水务集团有限公司招聘笔试参考题库含答案解析
- 《品质改善报告》课件
评论
0/150
提交评论