东莞建设网站的公司简介,天河网站建设技术,将网站发布到微信小程序怎么做,企业宣传片常用背景音乐Linux高级编程——BSD socket的网络编程 宗旨#xff1a;技术的学习是有限的#xff0c;分享的精神是无限的。 一网络通信基础 TCP/IP协议簇基础#xff1a;之所以称TCP/IP是一个协议簇#xff0c;是因为TCP/IP包含TCP 、IP、UDP、ICMP等多种协议。下图是OSI模型与TCP/IP模…Linux高级编程——BSD socket的网络编程 宗旨技术的学习是有限的分享的精神是无限的。 一网络通信基础 TCP/IP协议簇基础之所以称TCP/IP是一个协议簇是因为TCP/IP包含TCP 、IP、UDP、ICMP等多种协议。下图是OSI模型与TCP/IP模型的对比TCP/IP将网络划分为4层模型应用层、传输层、网络层和网络接口层有些书籍将其分为5层即网络接口层由链路层和物理层组成 1网络接口层模型的基层负责数据帧的发送已接收帧是独立的网络信息传输单元。网络接口层将帧格式的数据放到网络上或从网络上把帧取下来。
2互联网网络层互联协议将数据包封装成IP数据包并运行必要的路由算法有效的找到达到目的主机最优的路径树。这里有四种互联协议
网际协议IP负责在主机和网络之间路径寻址和路由数据包。目前主要为IPV4地址IPV6已经在教育网中广泛使用。
地址解析协议ARP获得同一物理网络中的主机硬件地址
网际控制消息协议ICMP发送消息并报告有关数据包的传送错误
互联组管理协议IGMP用来实现本地多路组播路由器报告
3传输层传输协议在主机之间提供通信会话。传输协议的选择根据数据传输方式而定
主要有以下两种传输协议
传输控制协议TCP为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况并适用于要求得到响应的应用程序。
影虎数据包协议UDP提供了无连接通信且不对传送包进行可靠性确认。适合于一次传送小量数据一般小于520字节可靠性则由应用层来完成。
4应用层应用程序通过这一层访问网络主要包括常见的FTP,HTTP,DNS和TELNET协议
ELNET提供远程登录服务
FTP提供应用级的文件传输服务
SMTP电子邮件协议
SNMP简单网络管理协议
DNS域名解析服务将域名映像成IP地址的协议
HTTP超文本传输协议web服务器所采用的协议 二 IPv4协议基础 TCP/IP中IP地址在逻辑上唯一的标识了网络中的一台主机连接到公网上的主机地址是唯一的一个IP地址对应一台主机。 IP地址两种表示形式二进制表示法和点分十进制表示法。每个IP地址由两部分组成网络号和主机号。TCP/IP通讯过程 传输层及其以下的机制由内核提供应用层由用户进程提供后面将介绍如何使用socket API编写应用程序应用程序对通讯数据的含义进行解释而传输层及其以下处理通讯的细节将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时每层协议都要加上一个数据首部header称为封装Encapsulation如下图所示TCP/IP数据包的封装 不同的协议层对数据包有不同的称谓在传输层叫做段segment在网络层叫做数据报datagram在链路层叫做帧frame。数据封装成帧后发到传输介质上到达目的主机后每层协议再剥掉相应的首部最后将应用层数据交给应用程序处理。上图对应两台计算机在同一网段中的情况如果两台计算机在不同的网段中那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器跨路由器通讯过程 其实在链路层之下还有物理层指的是电信号的传递方式比如现在以太网通用的网线双绞线、早期以太网采用的的同轴电缆现在主要用于有线电视、光纤等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器Hub是工作在物理层的网络设备用于双绞线的连接和信号中继将已衰减的信号再次放大使之传得更远。 链路层有以太网、令牌环网等标准链路层负责网卡设备的驱动、帧同步就是说从网线上检测到什么信号算作新帧的开始、冲突检测如果检测到冲突就自动重发、数据差错校验等工作。交换机是工作在链路层的网络设备可以在不同的链路层网络之间转发数据帧比如十兆以太网和百兆以太网之间、以太网和令牌环网之间由于不同链路层的帧格式不同交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。 网络层的IP协议是构成Internet的基础。Internet上的主机通过IP地址来标识Internet上有大量路由器负责根据IP地址选择合适的路径转发数据包数据包从Internet上的源主机到目的主机往往要经过十多个路由器。路由器是工作在第三层的网络设备同时兼有交换机的功能可以在不同的链路层接口之间转发数据包因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。IP协议不保证传输的可靠性数据包在传输过程中可能丢失可靠性可以在上层协议或应用程序中提供支持。 网络层负责点到点point-to-point的传输这里的“点”指主机或路由器而传输层负责端到端end-to-end的传输这里的“端”指源主机和目的主机。传输层可选择TCP或UDP协议。TCP是一种面向连接的、可靠的协议有点像打电话双方拿起电话互通身份之后就建立了连接然后说话就行了这边说的话那边保证听得到并且是按说话的顺序听到的说完话挂机断开连接。也就是说TCP传输的双方需要首先建立连接之后由TCP协议保证数据收发的可靠性丢失的数据包自动重发上层应用程序收到的总是可靠的数据流通讯之后关闭连接。UDP协议不面向连接也不保证可靠性有点像寄信写好信放到邮筒里既不能保证信件在邮递过程中不会丢失也不能保证信件是按顺序寄到目的地的。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。
目的主机收到数据包后如何经过各层协议栈最后到达应用程序呢整个过程如下图所示Multiplexing过程 以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷payload指除去协议首部之外实际传输的数据是IP、ARP还是RARP协议的数据报然后交给相应的协议处理。假如是IP数据报IP协议再根据IP首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP然后交给相应的协议处理。假如是TCP段或UDP段TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。IP地址是标识网络中不同主机的地址而端口号就是同一台主机上标识不同进程的地址IP地址和端口号合起来标识网络中唯一的进程。 注意虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧但是从功能上划分ARP和RARP属于链路层IP属于网络层。虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报但是从功能上划分ICMP、IGMP与IP同属于网络层TCP和UDP属于传输层。本文对RARP、ICMP、IGMP协议不做进一步介绍。 三 TCP与UDP的区别 中国移动、中国联通推行的GPRS网络、CDMA网络已覆盖大量的区域通过无线网络实现数据传输成为可能。无线Modem采用GPRS、CDMA模块通过中国移动、中国联通的GPRS、CDMA网络进行数据传输并通TCP/IP协议进行数据封包可灵活地实现多种设备接入工程安装简单在工业现场数据传输的应用中能很好的解决偏远无网络无电话线路地区的数据传输的难题。同传统的数传电台想比较更具有简便性、灵活性、易操作性同时还降低了成本无线Modem传输方案是现代化工业现场数据传输最好的选择方案。 目前中国移动、中国联通提供的GPRS网络、CDMA网络的数据传输带宽在40Kbps左右且受带宽的限制数据采集方案最好采用于主动告警、数据轮巡采集、告警主动回叫等对传输带宽占用较少的采集方式。同时考虑对前置机实时采集方案的支持无线Modem传输方案只能作为目前传输方案的补充。 随着无线通讯技术的不断发展无线传输数据带宽将不断提高采用3G无线网络数据传输带宽将达到2M无线传输方案将逐渐成为监控传输组网的主要应用方案。目前由于GPRS和CDMA固有的特性在各个领域中GPRS和CDMA的应用也越来越广泛但是关于传输中使用TCP/IP协议还是UDP协议却争论很多。 TCP(Transmission Control Protocol)---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前必须先在双方之间建立一个TCP连接之后才能传输数据。TCP提供超时重发丢弃重复数据检验数据流量控制等功能保证数据能从一端传到另一端。 UDP(UserDatagram Protocol)---用户数据报协议是一个简单的面向数据报的运输层协议。UDP不提供可靠性它只是把应用程序传给IP层的数据报发送出去但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接且没有超时重发等机制故而传输速度很快。
这里先简单的说一下TCP与UDP的区别 1。基于连接与无连接 2。对系统资源的要求TCP较多UDP少 3。UDP程序结构较简单 4。流模式与数据报模式 5。TCP保证数据正确性UDP可能丢包TCP保证数据顺序UDP不保证 另外结合GPRS网络的情况具体的谈一下他们的区别 1。TCP传输存在一定的延时大概是1600MS移动提供UDP响应速度稍微快一些。 2。TCP包头结构 源端口16位 目标端口 16位 序列号 32位 回应序号 32位 TCP头长度4位 reserved6位 控制代码6位 窗口大小16位 偏移量16位 校验和16位 选项 32位(可选) 这样我们得出了TCP包头的最小大小.就是20字节. UDP包头结构 源端口16位 目的端口16位 长度 16位 校验和 16位 UDP的包小很多.确实如此.因为UDP是非可靠连接.设计初衷就是尽可能快的将数据包发送出去.所以UDP协议显得非常精简.
3。GPRS网络端口资源UDP十分紧缺变化很快。
而TCP采用可靠链路传输不存在端口变化的问题工业场合的应用一般都有以下特点
1。要求时时传输但也有一些场合是定时传输总的来说在整个传输过程中要求服务器中心端和GPRS终端设备能相互的、时时的传输数据。 TCP本身就是可靠链路传输提供一个时时的双向的传输通道能很好的满足工业现场传输的要求。但是GPRS网络对TCP链路也存在一个限制此条链路在长时间大概20分钟左右视具体情况而定没有数据流量会自动降低此链路的优先级直至强制断开此链路。所以在实际使用中也会采用心跳包一般是一个字节的数据来维持此链路。 UDP由于自身特点以及GPRS网络UDP端口资源的有限性在一段时间没有数据流量后端口容易改变产生的影响就是从服务器中心端向GPRS终端发送数据GPRS终端接收不到。具体的原因就是移动网关从中作了中转需要隔一定时间给主机发UDP包来维持这个IP和端口号,这样主机就能主动给GPRS发UDP包了并且我在测试中发现,这个间隔时间很短,我在1多分钟发一次UDP包才能够维持,但是再长可能移动网关那边就要丢失这个端口了,此时如果主机想主动发数据给GPRS,那肯定是不行的了,只有GPRS终端设备再发一个UDP包过去,移动重新给你分配一个中转IP和端口,才能够进行双向通讯。
2。要求数据的丢包率较小。有些工业场合例如电力、水务抄表环保监测等等不容许传输过程中的数据丢失或者最大限度的要求数据的可靠性。从这一点来看很显然在无线数据传输过程中TCP比UDP更能保证数据的完整性、可靠性存在更小的丢包率。在实际测试中也是如此。以厦门桑荣科技有限公司提供的GPRS终端设备为例TCP的在千分之9UDP的在千分之17左右。
3。要求降低费用。目前有很大部分GPRS设备的应用都是取代前期无线数传电台除了使用范围外其考虑的主要问题就是费用。能降低费用当然都是大家最愿意接受的。和费用直接相关的就是流量了流量低费用就低了。虽然TCP本身的包头要比UDP多但是UDP在实际应用中往往需要维护双向通道就必须要通过大量的心跳包数据来维护端口资源。总的比较起来UDP的实际流量要比TCP还要大。很多使用者在初期的时候并不了解UDP需要大量心跳包来维持端口资源这个问题往往都认为UDP要比TCP更节省流量实际上这里存在着一个误区。
4。在某些特定的应用场合例如一些银行的时时交互系统对响应速度要求很高此时数据传输频率较快不需要大量心跳包维持UDP端口资源采用UDP就比较有利了。
5。在目前的1N的传输模式中既有多个GPRS终端设备往一个服务器中心传输数据此时采用UDP会比TCP要好的多因为UDP耗用更少的系统资源。但是在实际应用中却发现很多用户还是采用TCP的传输方式建立二级中心1A1N即每一个分中心对应N/A台设备独立处理数据再统一将数据传送到主中心。这样既能保证了传输过程中采用了TCP的传输协议又能很好处理了中心服务器的多链路的系统耗用的问题。