读书笔记.doc

TCPIP 套接字编程的分析与实现

收藏

压缩包内文档预览:
预览图 预览图 预览图 预览图
编号:6350486    类型:共享资源    大小:550.58KB    格式:RAR    上传时间:2017-12-11 上传人:毕****做 IP属地:江苏
12
积分
关 键 词:
获取更多毕业论文/毕业设计 请登录360毕业设计网 www.bysj360.com 或加qq:604664738量身定做!
资源描述:
TCPIP 套接字编程的分析与实现,获取更多毕业论文/毕业设计,请登录360毕业设计网,,或加qq:604664738量身定做!
内容简介:
江苏大学本科毕业论文- 1 -毕 业 论 文TCP/IP 套接字编程的分析与实现学生姓名 沈志贤 班级学号 通信 001 班 13 号 专 业 通信工程 所在院系 计算机科学与通信工程学院 指导教师 谢建菲 论文提交时间 2004 年 6 月 论文答辩时间 2004 年 6 月 答辩委员会主席 _评阅人 _2004 年 月 日江苏大学本科毕业论文- 2 -摘要TCP/IP 参考模型是目前最为成熟的网络参考模型。它为今天网络技术的迅速发展立下了汗马功劳。20 世纪 80 年代早期,远程规划局(ARPA)资助加利福尼亚大学的一个研究组,将 TCP/IP 第一次实现在 UNIX 系统上,这就是广为人知的套接字 socket 接口。网络编程的基石是套接字,一个套接字是通信的一端。在这一端上你可以找到与其对应的一个名字,一个正在被使用的套接字都有它的类型和与其相关的任务。关键字TCP/IP 套接字 客户端/服务器 防火墙AbstractTCP/IP model is the most mature refernced model in these days. It make the great contribution to the nettech today. In the eatly days of 20 Cen. 80 days, with the satke of ARPA, a workgroup in California University realize the TCP/IP on UNIX system the first time, which is the famous Socket interface. Socket is the headstone of the networkware programme, and a socket is a side of the communication. A opposite name could be found at the side, and a socket which is used has its style and its opposite mission.KeywordsTCP/IP Socket Client/Server Firewall江苏大学本科毕业论文- 3 -目 录摘要 .2Keywords .2前言 .4第一章 NAT/防火墙网络环境下的 VoIP 应用 .41.1 概述 .41.2 技术背景 .41.2.1 H.323 VoIP.51.2.2 防火墙简介 .111.2.3 NAT 简介 .121.2.4 如何在 H323 中穿越防火墙和 NAT.13第二章 socket 编程 .151.1 Socket 基础 .151.2 TCP/IP 协议族 .151.3 Socket 常用的数据结构 .151.4 客户机/服务器模型 .171.5 Socket 编程接口的系统调用 .19第三章 为实现代理功能 底层 socket 编程的详细设计 26第四章 程序调试及心得 .404.1 程序调试 .404.2 个人心得 .42致 谢 .42参考书目 .42江苏大学本科毕业论文- 4 -前言VoIP 是指利用 IP 网络传送话音的技术,也称网络电话或 IP 电话。而 VoIP 网关是整个VoIP 系统中的关键设备,它负责在传统的电话交换网络和 Internet 之间架起一坐桥梁,它可提供包括 NO1 信令、SS7 信令、H.323、ISDN、CO 环路等多种接入方式。本文主要介绍 VoIP 网关软件系统中的低层 socket 模块的设计过程,并对 VoIP 网关进行了详尽的描述,由于本文的意图是讨论在 H323 协议下的通过代理功能来实现打 ip 电话,所以 H.323 协议栈也是本文介绍的重点。本文的第一章是对 VoIP 技术和 VoIP 网关进行相应的描述和介绍;第二章是对 sock 的基础理论知识和具体的信令流程进行描述。第三章是对代理底层 socket 的详细设计(系统的实现是依赖于其它的模块支持的基础上的,所以在这也对其它相关的模块进行了简单的描述,阐述了本模块在系统中的地位和与其它模块的关系) ;第四章是在调试过程中所遇到的具体问题和整个系统设计后的一些个人心得。所有的代码都包含在附录中,整个模块的代码在 KVP6033 的硬件系统基础上运行得以通过。本文所编写的代码均采用 C 语言描述,因为经过编译后的代码是运行在 vxworks 操作系统下的,所以它其中调用了 vxworks 操作系统里的一些库函数,vxworks 操作系统是一种多任务的实时嵌入式系统,而采用的编译环境是在 Tornado 下进行编译的,有关vxworks 操作系统和 Tornado 编译环境在这很少提到,读者想了解其详细细节,可以查阅其它的一些相关资料。由于时间和精力有限,本文主要只涉及到上层软件部分,有关一些芯片的底层驱动只是略有涉及。也由于作者的知识和阅历非常有限,所以文章中肯定有不少错误和遗漏之处,肯请读者批评指正。第一章 NAT/防火墙网络环境下的 VoIP 应用1.1 概述随着 H.323、SIP、MGCP 等相关协议体系的不断发展和逐渐完善,VoIP 以其固有的多方讨好的姿态,正在获得越来越多的用户、服务供应商、以及设备制造商的青睐。VoIP 是在无 QoS 保证的 IP 网络上传输语音信息、以实现端到端语音通信的一系列技术、协议及应用的统称。这里所说的 IP 网络可以是 LAN、MAN,也可以是基于多项复杂技术由多个 LAN、MAN 互联而形成的 WAN,甚至可以是 Internet。任意两个端点之间只要可以通过 IP 协议进行互联,就应该可以实现 VoIP 的应用。下面主要描述在带有 NAT 或防火墙的 IP 网络环境下实现 VoIP 应用的相关问题及技术细节,并提出相关建议和解决方法。1.2 技术背景近年来,出于安全性和 IPv4 地址空间缺乏的考虑,大多数服务供应商和企业都在自己的网络边缘部署了防火墙并使用了 NAT 技术。在这样的网络环境下实现 VoIP 应用,需要考虑很多方面的问题。下面简单介绍 VoIP、防火墙以及 NAT 的技术原理,并指出在这样的环江苏大学本科毕业论文- 5 -境下 VoIP 面临的难题。1.2.1 H.323 VoIPVoice over IP,即在 IP 网络上的语音系统。通俗的讲,就是通过 IP 网络打电话目前,在 IP 网络上实现语音通信主要有以下几个协议体系:H.323、SIP、MGCP。其中SIP 和 MGCP 的体系结构还不够完善,所以在 VoIP 中的应用还不是很广泛。但是 SIP 的开放、简单、易实现等特性使得该体系有着强大的生命力,并有取代 H.323 的趋势。H.323 体系由 ITU-T 提出,并发表了一系列建议。H.323 系列建议定义了在无业务质量保证的 Internet 或其它分组网络上实现多媒体通信的协议及规程。H.323 体系的完善以及ITU-T 浓厚的传统语音通信的技术背景使得该体系成为目前最为广泛部署的 VoIP 技术体系。本文档主要讨论 H.323 体系。在带有 NAT 或防火墙的 IP 网络环境下实现 VoIP 应用的讨论上,SIP、MGCP 与 H.323 面临同样的问题。)H.323 系统组件H.323 系统的组件主要包括终端 Terminals、网关 Gateways、网守 Gatekeepers、多点控制器 Multipoint Controllers、多点处理器 Multipoint Processors、以及多点控制单元 Multipoint Control Units。H.323 终端提供了在点到点或多点会议中进行语音和可选视频和数据通信的能力,与其它 H 系列终端、GSTN 或 ISDN 语音终端、GSTN 或 ISDN 数据终端的通信通过网关来实现。网守主要完成许可控制和地址翻译功能。多点控制器、多点处理器以及多点控制单元提供多点会议支持。H.323 终端设备互连如下图所示: T1604210-97 (Note) H.310 terminal operating in H.321 mode NOTE A gateway may suport one or more of the GSTN, N-ISDN and/or B-ISDN conections. Packet Based Network V.70 Terminal H.324 Terminal Spech Terminal H.32 Terminal Spech Terminal H.320 Terminal H.321 Terminal H.321 Terminal Scope of H.323 B-ISDN Guaranted QOS LAN N-ISDN GSTN Terminal H.323 Terminal H.323 Gateway H.323 Gatekeper H.323 Terminal H.323 MCU H.323 H323 终端设备互连示意图)H.323 协议栈H.323 很大程度上基于 ITU-T 以前有关多媒体通信的建议,其编码机制、协议范围和基本操作类似于 ISDN 的 Q.931 信令协议的简化版本,并采用了比较传统的电路交换的方式。相关的协议包括用于建立连接的 H.225.0、用于呼叫控制的 H.245、用于大型会议的H.332、用于补充业务的 H.450.1、H.450.2 和 H.450.3、用于安全控制的 H.235、用于与电路交换业务互操作的 H.246、用于控制各类多媒体网关的 H.248 等。江苏大学本科毕业论文- 6 -一个典型的 H.323 协议栈如下图所示H.3AV Ap. Terminal Control and Management Data G.7X H.26 H.225.0 Cal Signaling H.245 T.125 T.124 RTP RTCP RAS Unreliable Transport (UDP) Reliable Transport (TCP) T.123 Network Layer (IP) Link Layer Physical Layer 23 协议是一个庞大的协议族,包括许多相关的协议,它们形成了一个协议栈。- 在 H.323 协议栈结构中,下三层是分组网的底层协议,其中的网络层在 IP 网络中就是 IP 协议。 - 语音压缩编码采用 ITU-T 的 G 系列建议。一般情况下,人的话音在采样编码(模数转换)后未压缩前生成的是 64Kbps 的比特流,为了提高网络带宽的利用率,需要对编码后的语音进行压缩。早期的语音压缩采用波形编码的方式,如 G.711、G.726、G.727 和 G.722 等,最多只能将语音压缩至 16Kbps。现在则主要采用参数编码的方式,如 G.729A 和 G.723.1 等。这种方式的原理是模拟讲话者的发声声道,构造话音生成模型,再加上静音压缩机制(即在不讲话的情况下仅发送很少的比特流) ,至少能将语音压缩至 8Kbps。一般情况下,该方式能将比特流的速率降至 24Kbps,而且话音质量仍保持良好水平(可以分辨出讲话者) 。 - 视频压缩编码和数据通信分别采用 ITU-T 的 G.260 系列建议和 T.120 系列建议,不再赘述。 - 实时传输协议/实时传输控制协议(Real-time Transport Protocol/ Real-time Transport Control Protocol,RTP/RTCP)是 IETF 建议的,它并非专为 IP 电话设计的,而是适用于一般的多媒体通信的技术。RTP 协议为音频、视频等实时数据提供端到端的传递服务,可以向接收端点传送恢复实时信号必需的定时和顺序信息, RTCP 协议能向收发双方和网络运营者提供 QoS 的监测手段。 - H.225.0 和 H.245 是 H.323 系统的核心协议,前者主要用于呼叫控制,后者用于媒体信道控制 。一次呼叫可以包含多种媒体信息,如可视电话就包含了音频和视频流。H.225.0 还定义了注册、呼叫接纳和状态协议(Registration Admission and Status,RAS) ,RAS 协议的作用是为网守(GateKeeper) ,即网络管理点提供确定端点地址和状态、进行呼叫接纳控制等服务。H.323 协议栈示意图)H.323 典型呼叫过程一次典型的 H.323 呼叫涉及多个交互的过程,下图显示了 H.323 信令交互过程:江苏大学本科毕业论文- 7 -Media RTP Stream RTCP Stream Admision Request H.323 Gateway H.245 Open Logical Chanel Gatekeper H.25 (Q.931) Setup Conect Open Logical Chanel Acknowledge Capabilities Exchange Admision Confirm RAS RTP Stream H.323 Gateway V V 图 3 H.323信 令 交 互 过 程 根据 H.323 系列建议,一次典型的呼叫过程(通过网守)由下图所示: ARQ ( 1)ACF ( 6)RQ ( 5)ALERTING ( 7)CO ( 8)CAL PROCEDING ( 4) SETUP ( 3)CF ( 2)H.25 Signali MesagRA es呼叫建立过程江苏大学本科毕业论文- 8 -TerminalCpbiltySet ( 9)H.245 MesagOpenLogicalChnel ( 16)OpenLogicalChnel ( 15)eicalel Ack ( 4) OpenLogicalChnel( 13)TrmialbiltySt Ack ( 2)TerminalCpbiltySet ( 1)rililtt Ack( 0)控制通道过程 RTP Media Strem ( 17)RTP Media Strem and RTP MesagRTCP Mesag ( 20) RTCP Mesag ( 19)RTP Media Strem ( 18)媒体传输过程江苏大学本科毕业论文- 9 -End Sesion Cmand ( 21)H.25 Signali MesagDRQ ( 24)Relas Complet( 3) End Sesion Cmand( 2)DRQ ( 24)CF ( 25)CF ( 25).4 esaRA会话结束过程上图四个示意图显示了一次 H.323 VoIP 呼叫所经历的典型过程,对照下图 Telephone1呼叫 H323 Terminal1 的情形,全部过程描述如下:V IP Cloud Gateway Telephone1 H.323 Terminal1 Gatekeeper 图 8 实 际 网 络 示 意 图 a) 为 Telephone1 连接在 Gateway1 上的端口配置一个 E.164 号码 1,而 H323 Terminal1 的 E.164 号码为 2;b) 在 Telephone1 上拨号 2 时,Gateway1 在发起呼叫前首先需要得到 Gatekeeper1的许可,因此向 Gatekeeper1 发送 ARQ 消息;c) Gateway1 得到 ACF 回应后再向 H323 Terminal1 的 H.225 侦听端口(缺省为1720TCP 端口)发送 Setup 消息;d) H323 Terminal1 得到 Setup 消息后,立刻向对方发送 Call Proceeding 消息通知本方正在处理对方的请求;e) H323 Terminal1 在本地对呼叫验证通过,准备接受请求前也需要得到 Gatekeeper的许可,所以向 Gatekeeper1 发送 ARQ 消息;f) H323 Terminal1 在得到 ACF 消息后向对方发送 Alerting 消息;g) H323 Terminal 的用户接听该呼叫后,向 Gateway1 发送 Connect 消息。这时,在呼叫信令上,一次呼叫就已接通。被叫方收到 Setup 消息后,在回应消息中需要带有 H.245 控制通道的传输地址,主叫方以 TCP 连接该传输地址后即可开始控制通道协商过程。最简单的协商过程主要包含能力交换和打开逻辑通道。能力交换主要用来协商通话的各方所采用的媒体编码方式如G.711、G.729、H.261 等;打开逻辑通道是在进行语音或视频传输时建立传输通道用的。江苏大学本科毕业论文- 10 -在此以后就可以开始正常的媒体传输。在语音或视频的媒体传输过程中,使用 RTP 协议承载数据,RCTP 来监测传输质量。当需要结束会话过程时,可以由建立了逻辑通道的各方之间互相传输 EndSession 的H.245 消息,提示关闭逻辑通道。随后由主动结束会话过程的一方向对方发送 H.225 的ReleaseComplete 消息。EndSession 消息是可选的。最后如果一个 H323 设备希望断开与 Gatekeeper 的连接,则可以向 Gatekeeper 发送DRQ 消息,得到回应后,断开,Gatekeeper 可以认为该设备已关机。Cisco 语音设备一次典型的 H.323 VoIP 呼叫如下图所示(图 9): Terminal A 415-57-11 GK1 1) Terminal A dials the phone number 408-67-11 for Terminal B 2) GWA sends GK1 an ARQ, asking permision to cal Terminal B 3) GK1 does a lok-up and finds Terminal B registered; returns an ACF with the IP adres of GWB 4) GWA sends a Q.931 Cal-Setup to GWB with Terminal Bs phone number 5) GWB sends GK1 an ARQ, asking permision to answer GWAs cal 6) GK1 returns an ACF with the IP adres of GWA 7) GWB sets up a POTS cal to Terminal B at 408-67-11 8) When Terminal B answers, GWB sends Q.931 Conect to GWA GWA GWB Terminal B 408-67-11 1 5 3 7 6 4 2 8 图 9 Cisco H.323 VoIP呼 叫 过 程 )H.323 呼叫通道如上文所述,一次典型的 H.323 呼叫流程需要建立四种通道:RAS 信令及 RAS 信令通道、H.225.0 呼叫信令及 H.225.0 呼叫信令通道、H.245 呼叫控制及 H.245 呼叫控制通道、逻辑通道(语音通道) 。RAS 信令通道用于传递 RAS 信令,以完成终端与网守之间的登记注册、授权许可、带宽改变、状态和脱离等过程。H.225.0 呼叫信令通道用于传递 H.225.0 呼叫信令,以建立两个终端之间的连接。该信令使用 Q.931 消息来控制呼叫的建立和拆除。当系统中没有网守时,呼叫信令信道在呼叫涉及的两个终端之间打开;当系统中包括一个网守时,由网守决定在终端与网守之间还是在两个终端之间建立呼叫信令信道。H.245 控制信令通道用于传递 H.245 控制信令,以传送终端到终端的控制消息,包括主从判别、能力交换、打开和关闭逻辑通道、模式参数请求、流控消息和通用命令与指令等。H.245 控制信令信道建立于两个终端或一个终端与一个网守之间。H.323 信令结构如下图所示:江苏大学本科毕业论文- 11 -呼 叫 控 制 通 道 呼 叫 信 令 通 道 RAS通 道 音 频 /视 频 通 道 H.245 H.25.0 RTP TCP UDP IP 底 层 传 输 H.323 信令及通道结构如上图所示,信令消息、控制消息、以及语音流分别在各自的通道中传递,这些通道的建立依赖于 TCP 或 UDP 协议。H.225.0 呼叫信令使用 TCP 连接,端口号 1720;H.245 呼叫控制使用 TCP 连接,端口号动态;RAS 信令使用 TCP 连接,端口号 1718、1719;RTP 语音流使用 UDP,端口号动态。如上图所示,信令消息、控制消息、以及语音流分别在各自的通道中传递,这些通道的建立依赖于 TCP 或 UDP 协议。H.225.0 呼叫信令使用 TCP 连接,端口号 1720;H.245 呼叫控制使用 TCP 连接,端口号动态;RAS 信令使用 TCP 连接,端口号 1718、1719;RTP 语音流使用 UDP,端口号动态。比如说要传递 H.245 呼叫控制消息,首先必须由高层实体(如会话层、应用层)在两个端点间建立呼叫控制通道,而该通道的建立依赖于 TCP 连接的建立,要建立 TCP 连接必须要知道对方端点的传输层地址(IP 地址和端口号) ,对方传输层地址的获得则依赖于前一次对方回应的 H.225.0 消息中包含的 H.245 传输地址(消息段格式如 h245Address = ipAddress ip = 4 octets 0b 01 01 01port = 20014) ,该地址实际上就是对端的 IP地址和守护进程端口号。而这一段 H.225.0 消息是在对端 TCP/IP 模型的会话层产生的,要在 IP 网上传递则必须封装相应的 TCP 层、IP 层、链路层的头然后传递到本端。所以,IP 网络上的一个 VoIP 报文不仅仅在 IP 报文头部包含了用于路由的源、目的 IP地址,而且还有可能在 IP 报文的数据部分即高层(如 5 到 7 层)也包含了用于建立连接的IP 地址,而该地址一般不会被互联网上的设备所识别(互联网设备一般工作于第三层) 。1.2.2 防火墙简介出于安全考虑,很多企业或运营商会在自己内部网与外部网的交界处部署防火墙,以防止外部用户非法入侵内部网,从而避免可能的攻击,同时提供安全的 Internet 和远程访问连接。绝大多数防火墙还可以保护一个和多个边界网络,即非军事区(DMZs) 。内部网、外部网以及边界网之间的连接由防火墙控制。为了有效地利用防火墙来保护内部网,用户必须规划一个安全策略,以确保所有内部网与外部网之间的数据流都通过该防火墙。目前,根据应用,防火墙的实现主要有以下几种:基于包过滤、基于代理服务器、基于状态。基于包过滤的防火墙一般集成在路由器当中,通过手工设置访问列表来限制特定的数据包流向,工作于 OSI 模型的第 3、4 层,缺点是暴露用户的 IP 地址、无状态、基于规则容易犯错。基于代理服务器的防火墙一般通过运行于 Unix 平台的代理软件来实现,工作在 OSI 模型的第 37 层,缺点是高成本、低效率。基于状态的防火墙可以动态反映用户江苏大学本科毕业论文- 12 -的连接状态,可以通过多种技术实现安全目的,如ACL、NAT、ALG、VPN、IPSEC、AAA、IDS 等,同时可以实现 OSI 高层的安全特性。Internet Router Internet acesible server Router Firewal Perimeter Inside Outside WEB Server Mail Server Protected Client Protected Server 防火墙典型应用如上图,当外出的数据包到达防火墙的内部接口时,防火墙检查先前是否有来自这一内部主机的数据包。如果没有,防火墙则在它的状态表中为此新连接创建一个传输通道,其中包括了一个内部 IP 地址、一个外部全局唯一 IP 地址。然后,防火墙将数据包的源地址替换为全局唯一的地址、修改校验和及其它相应字段,并将修改后的数据包发往相应的外部接口。当外部进入内部网络的数据包到达的外部接口时,它必须首先经过防火墙的安全验证。如果数据包通过了安全验证,则防火墙移去该数据包的目标 IP 地址,插入相应的内部 IP 地址,并在修改过相应字段后将该数据包发往内部接口。一般来说,防火墙会检查从外部进来的每个数据包的 IP 地址和目的端口号。防火墙的一个典型配置是:如果防火墙内部的一台计算机 A 向防火墙外部的一台计算机 B 主动发出请求,防火墙会让外部计算机 B 的响应数据包通过,当且仅当该响应数据包的目的地址和端口号与防火墙内发起请求的计算机 A 的地址和端口号相同时;如果计算机 B 发来的数据包仅仅目的地址是防火墙内发起请求的计算机 A 的地址,而端口号不是计算机 A 发出请求的那个端口号,防火墙也将会丢弃那个外来的数据包。防火墙总是被配置为过滤掉所有不请自到的数据包,有一个例外是在防火墙内提供Web Server 供外部访问。在这种情况下,公司会配置防火墙允许目的地址是 Web Server的 IP 地址且目的端口号为 80 的数据包通过,这就使得外部用户可以主动向内部的 Web Server 发起请求,以获得其上的数据。1.2.3 NAT 简介NAT 主要用于解决互联网 IP 地址缺乏的问题,它是一种允许一个组织的 IP 网络从外部看上去使用很少的全局 IP 地址空间而不是它实际使用的地址空间的特性。所谓全局 IP地址就是在公网中被承认的地址,即公网路由器有路由指向的地址。所谓实际使用的 IP 地址就是设置在路由器接口或内部主机的地址,也叫局部地址。这样,路由器通过将这些局部地址转换为全局可路由的地址,就可以允许一个具有非全局可路由地址的组织连接到Internet。NAT 允许企业内部网使用私有地址,并通过设置合法地址集使内部网与 Internet 进行通信,从而可以达到节省合法注册地址的目的。同时,这些私有地址可以被多个公司或组织使用而不会产生冲突。江苏大学本科毕业论文- 13 -NAT 隐藏了一个公司或组织的实际 IP 地址,这使得该公司或组织的内部网免于暴露自己真实的 IP 地址于外部互联网空间,减少了被黑客攻击的机会。NAT 的缺点是使得网络时延增大、无法实现 IP 的端到端跟踪、可能会使某些要使用内嵌 IP 地址的应用不能正常工作。NAT 往往集成在路由器或防火墙中,其典型应用及工作原理如下图所示:NAT Table Protocol Inside Source Adres:Port Outside Souce Adres:Port Outside Dest Adres:Port TCP 10.2.2.1 : 1024 171.69.89.1 : 1024 171.69.2.1 : 23 TCP 10.3.3.1 : 1723 171.69.89.1 : 1723 171.69.3.1 : 23 External Client1 171.69.2.1 Router Inside Outside Internal Client2 10.2.2.1 Internal Client1 10.3.3.1 Internet External Client1 171.69.3.1 内 部 私 有 地 址 空 间 外 部 公 有 地 址 空 间 Interface E0 171.69.20.1 Interface E1 10.3.3.1 NAT Pol 171.69.89.1 NAT 典型应用如上图所示,Internal Client1 要与 External Client1 建立一个 telnet 会话,首先Internal Client1 向 Router 发送一个源地址为 10.3.3.1、目的地址为 172.69.3.1、TCP源端口号为 1723、TCP 目的端口号为 23 的 IP 数据包。Router 从 E1 接口收到该数据包,检查 IP 头,根据路由表以及预先设定的 ACL 规则判断该通信需要启用 NAT(先路由后 NAT),然后该路由器检查 NAT 翻译表看是否表中已有相应条目,如果没有,路由器将用 NAT 地址池里的地址 172.69.89.1 替换该数据包的源 IP 地址,TCP 端口号保持不变,目的地址与目的端口号不作改动,并将该地址翻译条目添加到NAT 翻译表中。路由器将修改后的 IP 包从 E0 口发出。External Client1 收到该数据包后经由上层处理返回一个响应数据包,该响应数据包的源地址是 172.69.3.1,目的地址是 172.69.89.1,源端口任意,目的端口是 1024。该数据包经由互联网路由最终到达 Router 的 E0 接口。Router 从 E0 口收到该响应报文后首先检查 IP 头,发现目的地址是 172.69.89.1、目的端口是 1024,该路由器检查 NAT 表(先 NAT 后路由),发现有该 Socket 的 NAT 地址转换条目,于是开始 NAT 地址替换,将 172.69.89.1 替换为 10.2.2.1,最后根据路由表将修改后的报文发到 E1 接口。这样,一次报文交互就完成了。从上面的报文交互过程可以看出,NAT 仅仅工作在 IP 层,它只完成 IP 报文 IP 头的源、目的地址转换功能,而不关心 IP 数据字段的内容。尽管它也使用了类似于 TCP/UDP 中的Socket 端口功能,但该端口功能只是为了用于在 NAT 转换表中建立相应条目,以实现多个内部终端同时使用一个全局地址与外部终端通信的目的。江苏大学本科毕业论文- 14 -1.2.4 如何在 H323 中穿越防火墙和 NAT事实上,要彻底解决上述 VoIP 所面临的问题,最好的办法就是避免使用防火墙和NAT。当然这是一种消极的方法,对大多数企业或运营商来说,这样太冒险,网络安全没有保证,而且要得到足够多的可路由的 IP 地址需要付出非常昂贵的代价,甚至不太可能。从上文分析的情况来看,一种比较直观的积极的解决方法就是:a) VoIP 设备必须知道 NAT 的全局地址;b) NAT 设备必须配置成使用静态地址转换,即一个全局地址对应一个局部地址;c) VoIP 设备必须将其 H.225.0 信令消息、H.245 控制通道消息中包含的地址转换成NAT 所使用的全局地址;d) 为了实现外部主动与内部建立通话,NAT 或防火墙设备必须设置静态映射,同时要结合 VoIP 设备的 H.323 源地址绑定(防止外部网关或 H.323 终端随便选取自己任意一个接口的地址) 。上述方法需要 VoIP、NAT 或防火墙同时支持,并且牺牲了一些安全特性。目前比较多的解决方法主要有修改 NAT 或防火墙设备、借助于第三方软件等,单纯修改 VoIP 设备无法解决问题。下面列举了一些方法。)让 NAT 或防火墙设备集成网关功能这种方法将 VoIP 网关功能直接集成在 NAT/防火墙设备上,典型的设备如一个支持VoIP、NAT、防火墙的路由器。该路由器由 NAT 或防火墙将内部网与外部网隔离,一般的数据通信由 NAT 或防火墙功能实现,而语音通信则直接由路由器上所带的语音模块以及支持的网关功能来实现。这样,VoIP 就避免了 NAT 或防火墙的限制。但是该方法只能够支持普通电话或 PBX 设备与外部通信,而无法实现内部 H.323 终端与外部的通信。)让 NAT 或防火墙设备支持高层应用这种方法也叫应用层网关(ALG) 。具有该功能的 NAT 或防火墙设备不再只是简单地察看 IP 包头信息来决定数据包是否可以通过,它还会分析和处理高层数据字段的内容。如前面分析的,H.323 和 SIP 协议都在高层数据字段中放了重要的控制信息,如地址和端口号。通过分析哪一个端口需要打开,防火墙动态地打开那些被应用的端口,而所有别的端口依然安全地保持关闭状态。而 NAT 则需要修改这些地址或端口号。)使用 H.323 代理H.323 代理用于解决 NAT 或者同时解决 NAT 和防火墙问题,这取决于代理如何配置。代理其实是一种特殊类型的网关,在代理两边使用的是相同的协议。代理使终端到终端的呼叫过程看起来像两个分离的呼叫:一个是从私有网上的终端到代理,另一个是从代理到公众网上的终端,代理通过对这个呼叫进行中转解决了 NAT 问题。H.323 代理一般结合标准的网守功能和 RTP/RTCP 多媒体流代理功能。这种方法典型应用是在防火墙后放一个 H.323 代理,代理需要被分配公有 IP 地址。防火墙被配置允许代理和外部进行多媒体通讯。有时候沿着网络路径在许多位置都应用了 NAT 设备,这时就需要在每一个使用 NAT 的地方放置代理。)建立 VPNVPN 是一种在公网上建立两个机构之间的专用隧道的技术,该两个机构部署自己私有IP 地址空间,互相直接使用对方的私有地址进行通信。这样正好解决了 VoIP 的问题。但是该方法的缺点主要是:一、只能实现 VPN 隧道两端之间的 VoIP 通信,无法与位于公网的终端用户进行通信;二、当使用一些加密技术如 IPSEC 时,VoIP 通信面临挑战。)客户/服务器代理方式一般企业网用户都不想升级或者改动他们的防火墙和 NAT 设备的配置,也不想让内外江苏大学本科毕业论文- 15 -的通信绕过这些设备,客户/服务器代理方式也许是一个很好的选择。目前有 Ridgeway 公司、亚软公司 eProxy 系统均基于该方法。该方法由两个组件构成:Server 软件和 Client 软件。Client 放在防火墙内的私有网,它同时具有网守功能和代理功能,私有网内的终端注册到 Client 上,它和防火墙外的Server 创建一个信令和控制通道,可以把所有的注册和呼叫控制信令转发到 Server,也把音视频数据转发到 Server,在转发时它把内部终端发送的和外部发往终端的数据包的地址和端口号替换为自己的。Server 放在防火墙外的公众空间,可以位于服务提供商网络或者位于企业网的 DMZ 区域,Server 扮演网守代理的角色,从 Client 收到的所有注册和呼叫信令都被 Server 转发到中心网守。Server 和 Client 之间的通讯主要通过两个固定的端口来传输数据,这两个端口是2776 和 2777 端口,被 IANA 机构分配给 Ridgeway 的系统。当私网内 Client 启动时:a) 它与 Server 上的 2776 端口建立一个固定连接用来传送控制和状态信息;b) 它监听私网内 H.323 网守注册和请求信息。当一个终端启动时:a) 终端通过 Client/Server 之间的连接发送注册信息到中心网守;Server 分配给每一个注册的终端一个唯一的端口号(与 Server 的 IP 地址对应) 。当一个终端呼叫防火墙外的另一个终端时,所有的数据包都通过 Client 路由到Server,返回的数据也从 Server 通过 Client 路由回到终端。当呼叫被建立后,Client 确保所有必需的经过防火墙的音视频通道保持开放,这样音视频数据可以通过这些防火墙上开放的通道进行传输。使用这种方法 IP 地址信息被很好的屏蔽,因为所有的数据包通过 Server 来路由转发,每个终端好像看来在直接地和 Server 进行通信,而不是和别的终端,这保证了终端的 IP地址在网络外不可得到。而且这种方法在大多数情况下不用对防火墙配置进行任何修改。对于那些防火墙设置限制打开向外的端口的情况,管理员可以创建简单的原则来允许从Client 到 Server 上两个固定的端口 2776 和 2777 的向外的连接。这个方法不仅仅局限于企业应用,服务提供商可以把 Server 放在 ISP 网络的中枢向小企业和用户提供防火墙和 NAT 穿越服务。不管是企业用户还是服务提供商应用,呼叫终端变得如此简单,仅需下载一个 Client 软件装在 PC 上,而且不用关心在呼叫建立的路径上存在多少个防火墙或 NAT 设备。这个方法最大的缺点是所有经过防火墙的通讯都必须经由 Server 来进行中转,这会引起潜在的瓶颈,这个经由 Client 和 Server 的过程会增加少于 5ms 的延迟。但是这又是必须的,因为 Server 是防火墙唯一信任的设备。第二章socket 编程TCP/IP 参考模型是目前最为成熟的网络参考模型。它为今天网络技术的迅速发展立下了汗马功劳。20 世纪 80 年代早期,远程规划局(ARPA)资助加利福尼亚大学的一个研究组,将 TCP/IP 第一次实现在 UNIX 系统上,这就是广为人知的套接字 socket 接口。网络编程的基石是套接字,一个套接字是通信的一端。在这一端上你可以找到与其对应的一个名字,一个正在被使用的套接字都有它的类型和与其相关的任务。江苏大学本科毕业论文- 16 -1.1 Socket 基础1.流(Stream) 、连接(Connection) 、阻塞(Block)、非阻塞(Non-block)2.两种字节顺序:NBO 与 HBO1)网络字节顺序 NBO(Network Byte Order):按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。2)主机字节顺序(HBO,Host Byte Order):不同的机器 HBO 不相同,与 CPU 设计有关例如:Motorola 68k 系列,HBO 与 NBO 相同,Intel x86 系列,HBO 与 NBO 相反1.2 TCP/IP 协议族TCP(Transmission Control Protocol)传输控制协议,基于连接的服务 UDP(User Datagram Protocol)用户数据报协议,无连接的服务 IP(Internet Protocol)Internet 协议,信息传递机制 1.3 Socket 常用的数据结构struct sockaddr unsigned short sa_family; /* address family, AF_xxx */char sa_dat
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:TCPIP 套接字编程的分析与实现
链接地址:https://www.renrendoc.com/p-6350486.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2024  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!