tcp句柄是什么(matlab句柄是什么意思)

      最后更新:2024-02-26 13:05

      翻译几个单词

      Socket协议的形象描述 socket的英文原义是“孔”或“插座”。在这里作为4BDS UNIX的进程通信机制,取后一种意义。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是透明的,这也与socket机制非常相似。socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。至此,我们对socket进行了直观的描述。抽象出来,socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。在网间网内部,每一个socket用一个半相关描述:(协议,本地地址,本地端口)一个完整的socket有一个本地唯一的socket号,由操作系统分配。最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的 socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器socket 半相关为全局所公认非常重要。读者不妨考虑一下,两个完全随机的用户进程之间如何建立通信?假如通信双方没有任何一方的socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。-----Socket 接口是访问 Internet 使用得最广泛的方法。 如果你有一台刚配好TCP/IP协议的主机,其IP地址是202.120.127.201, 此时在另一台主机或同一台主机上执行ftp 202.120.127.201,显然无法建立连接。因"202.120.127.201" 这台主机没有运行FTP服务软件。同样, 在另一台或同一台主机上运行浏览软件 如Netscape,输入"http://202.120.127.201",也无法建立连接。现在,如果在这台主机上运行一个FTP服务软件(该软件将打开一个Socket, 并将其绑定到21端口),再在这台主机上运行一个Web 服务软件(该软件将打开另一个Socket,并将其绑定到80端口)。这样,在另一台主机或同一台主机上执行ftp 202.120.127.201,FTP客户软件将通过21端口来呼叫主机上由FTP 服务软件提供的Socket,与其建立连接并对话。而在netscape中输入"http://202.120.127.201"时,将通过80端口来呼叫主机上由Web服务软件提供的Socket,与其建 立连接并对话。在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。-----1.什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。重要的Socket API:java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例。getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。 注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。2.如何开发一个Server-Client模型的程序 开发原理:服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 Socket建立为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:int socket(int domain, int type, int protocol);domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值"0"。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。 Socket执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。 socket在测量软件中的使用也很广泛
      socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。
      托座.承口.接口
      1.n. 窝, 穴, 孔, 插座, 牙糟2.v. 给...配插座
      插座,插口
      翻译几个单词

      如何理解 TCP/IP,SPDY,WebSocket 三者之间的关系

      我也不知道····只好复制一份···共同学习~~ 要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失。最后,我们还知道,在建立连接前,必须知道对方的IP地址和端口号。除此,普通的程序员就不会知道太多了,很多时候这些知识已经够用了。最多,写服务程序的时候,会使用多线程来处理并发访问。我们还知道如下几个事实:1。一个指定的端口号不能被多个程序共用。比如,如果IIS占用了80端口,那么Apache就不能也用80端口了。2。很多防火墙只允许特定目标端口的数据包通过。3。服务程序在listen某个端口并accept某个连接请求后,会生成一个新的socket来对该请求进行处理。于是,一个困惑了我很久的问题就产生了。如果一个socket创建后并与80端口绑定后,是否就意味着该socket占用了80端口呢?如果是这样的,那么当其accept一个请求后,生成的新的socket到底使用的是什么端口呢(我一直以为系统会默认给其分配一个空闲的端口号)?如果是一个空闲的端口,那一定不是80端口了,于是以后的TCP数据包的目标端口就不是80了--防火墙一定会组织其通过的!实际上,我们可以看到,防火墙并没有阻止这样的连接,而且这是最常见的连接请求和处理方式。我的不解就是,为什么防火墙没有阻止这样的连接?它是如何判定那条连接是因为connet80端口而生成的?是不是TCP数据包里有什么特别的标志?或者防火墙记住了什么东西?后来,我又仔细研读了TCP/IP的协议栈的原理,对很多概念有了更深刻的认识。比如,在TCP和UDP同属于传输层,共同架设在IP层(网络层)之上。而IP层主要负责的是在节点之间(End to End)的数据包传送,这里的节点是一台网络设备,比如计算机。因为IP层只负责把数据送到节点,而不能区分上面的不同应用,所以TCP和UDP协议在其基础上加入了端口的信息,端口于是标识的是一个节点上的一个应用。除了增加端口信息,UPD协议基本就没有对IP层的数据进行任何的处理了。而TCP协议还加入了更加复杂的传输控制,比如滑动的数据发送窗口(Slice Window),以及接收确认和重发机制,以达到数据的可靠传送。不管应用层看到的是怎样一个稳定的TCP数据流,下面传送的都是一个个的IP数据包,需要由TCP协议来进行数据重组。所以,我有理由怀疑,防火墙并没有足够的信息判断TCP数据包的更多信息,除了IP地址和端口号。而且,我们也看到,所谓的端口,是为了区分不同的应用的,以在不同的IP包来到的时候能够正确转发。TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket编程接口--原来是这么回事啊!在Socket编程接口里,设计者提出了一个很重要的概念,那就是socket。这个socket跟文件句柄很相似,实际上在BSD系统里就是跟文件句柄一样存放在一样的进程句柄表里。这个socket其实是一个序号,表示其在句柄表中的位置。这一点,我们已经见过很多了,比如文件句柄,窗口句柄等等。这些句柄,其实是代表了系统中的某些特定的对象,用于在各种函数中作为参数传入,以对特定的对象进行操作--这其实是C语言的问题,在C++语言里,这个句柄其实就是this指针,实际就是对象指针啦。现在我们知道,socket跟TCP/IP并没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以,socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。现在我们明白,如果一个程序创建了一个socket,并让其监听80端口,其实是向TCP/IP协议栈声明了其对80端口的占有。以后,所有目标是80端口的TCP数据包都会转发给该程序(这里的程序,因为使用的是Socket编程接口,所以首先由Socket层来处理)。所谓accept函数,其实抽象的是TCP的连接建立过程。accept函数返回的新socket其实指代的是本次创建的连接,而一个连接是包括两部分信息的,一个是源IP和源端口,另一个是宿IP和宿端口。所以,accept可以产生多个不同的socket,而这些socket里包含的宿IP和宿端口是不变的,变化的只是源IP和源端口。这样的话,这些socket宿端口就可以都是80,而Socket层还是能根据源/宿对来准确地分辨出IP包和socket的归属关系,从而完成对TCP/IP协议的操作封装!而同时,放火墙的对IP包的处理规则也是清晰明了,不存在前面设想的种种复杂的情形。明白socket只是对TCP/IP协议栈操作的抽象,而不是简单的映射关系,这很重要!
      如何理解 TCP/IP,SPDY,WebSocket 三者之间的关系

      在TCP/IP协议族中有很多协议是有安全隐患的,试任举一例说明。

      下面列举几种利用TCP/IP簇安全设计缺陷的攻击: (1)网络窥探(Network Snooping)利用数据在TCP/IP协议中的明文传输缺陷进 行在线侦听和业务流分析。攻击者可通过某些监控软件或网络分析仪等进行窃听。(2)IP源地址欺骗(IP Source Address Spoofing)利用IP地址易于更改和伪造的缺陷,进行IP地址假冒和欺骗。(3)路由攻击(Routing Attacks)1) IP源路由攻击:利用IP报头中的源路由选项强制性地将IP包 按指定路径传递到希望的目标。2) 路由消息协议攻击(RIP Attacks):攻击者利用RIP协议无认证机制的缺陷,在网络上发布假的路由信息。3) 攻击路由器系统:利用路由器自身保护不严,攻击者进入路由器修改其配置或使之崩溃。(4)IP隧道攻击(IP Tunneling Attacks)利用IP隧道技术实施特洛伊木马攻击。(5)网际控制报文协议攻击(ICMP Attacks)1) ICMP重定向消息攻击(破坏路由机制和提高侦听业务流能力)。2) ICMP回应请求/应答消息(echo request/reply message)攻击(实现拒绝服务)。3) ICMP目的不可达消息攻击。4) PING命令攻击。(6)IP层拒绝服务型攻击(IP Denial of Service Attacks)利用IP 广播发送伪造的ICMP回应请求包,导致向某一受害主机发回大量ICMP应答包,造成网络拥塞或崩溃。(如"Smurf"攻击)。(7)IP栈攻击(IP Stack Attacks)利用多数操作系统不能处理相同源、宿IP地址类型IP包的缺陷,将伪造的此种类型的IP包大量发往某一目标主机,导致目标主机将其TCP/IP协议栈锁死甚至系统崩溃。(8)IP地址鉴别攻击(Authentication Attacks)利用TCP/IP协议只能识别IP地址的缺陷,攻击者通过窃取口令从该节点上非法登录服务器。(9)TCP SYN Flooding攻击。向攻击目标发送大量不可达的TCP SYN连接请求包,以淹没目标服务器,使正常连接的"三次握手"永远不能完成(拒绝服务攻击)。 (10)TCP序列号攻击。利用对TCP连接初始序列号的猜测、冒充可信任主机进行欺骗连接(也可造成拒绝服务)攻击。
      防火墙的一些情况,如果自己的进程开一个端口(甚至是新建套接字)肯定被拦. 相反,有一点我们也很清楚:被_blank">;防火墙验证的进程在传送数据时永远不会被拦.所以,我的思路很简单:将其他进程中允许数据传输的套接字句柄拿为已用.过程如下:1. 找出目标进程2. 找出SOCKET句柄2. 用DuplicateHandle()函数将其SOCKET转换为能被自己使用.3. 用转换后的SOCKET进行数据传输上面的过程写的很简单,但是实际实现起来还是存在一些问题(后面再做讨论).而且从上面的实现方法也可以看出一些不爽的地方:在目标进程的SOCKET不能是TCP,因为TCP的句柄已经跟外面建立了连接,所以只能是UDP.针对不同系统不同进程我们很难定位一个稳定的进程SOCKET.看到上面这些,你有点丧气了对不对,哈哈. 再想一想,其实我们有一条真正的通罗马的"黄金大道".我们知道只要一台计算机连上了网络,那么有一种数据传输是肯定不会被拦截的,那就是DNS.你能想像域名解析数据都被拦了造成的结果吗?TCP Reset Spoofing(TCP复位欺骗)因为TCP协议在TCP/IP环境中是通信层协议,它提供核心数码流认证和路由,支持着互联网和绝大部分专有网络。TCP的功能之一就是管理包重组,这些包可以通过很多不同的物理路由,所以通常不会保持原先的顺序。 TCP创建了识别号码,它会告诉接受者如何去把收到的信息包按照正确的顺序组合起来。作为一个安全功能,如果一个信息包的识别码不是属于某一个特定的范围,就会被认为是不属于某个特定的数据流而被拒收。问题就出现了:因为RFC793允许当前的TCP通信根据收到的RST或者SYN(synchronize)而中断。TCP根据识别码来判断RST或者SYN的真实性。新的信息显示预先想好这个识别码远没有去猜容易,同源IP地址和目的IP地址结合起来,就能够引发TCP通信的不正常中断。
      这是我多年来从事网络的理解 由于TCP/IP协议固有的开放性和互联性,这种安全隐患是肯定存在的.由于局域网内部是一个相对开放的环境和TCP/IP协议内在的开放特征,内部网络上传输的数据很容易被截获并被分析或跟踪,前段时间就有文章说400MS攻破QQ密码的!你都学过TCP/IP,也应该网络广播这回事,因为你发一个请求,所有局域网内的电脑都能收到,只是会判断信息中的地址是不是自己的地址,接不接收!不接收的话就丢弃~ 所以,水平高的黑客可以通过任何一台机器来窃取局域网内想要的东西~包括密码
      由于自身的缺陷、网络的开放性以及黑客的攻击是造成互联网络不安全的主要原因。TCP/IP作为Internet使用的标准协议集,是黑客实施网络攻击的重点目标。TCP-/IP协议组是目前使用最广泛的网络互连协议。但TCP/IP协议组本身存在着一些安全性问题。TCP/IP协议是建立在可信的环境之下,首先考虑网络互连缺乏对安全方面的考虑;这种基于地址的协议本身就会泄露口令,而且经常会运行一些无关的程序,这些都是网络本身的缺陷。互连网技术屏蔽了底层网络硬件细节,使得异种网络之间可以互相通信。这就给“黑客”们攻击网络以可乘之机。由于大量重要的应用程序都以TCP作为它们的传输层协议,因此TCP的安全性问题会给网络带来严重的后果。网络的开放性,TCP/IP协议完全公开,远程访问使许多攻击者无须到现场就能够得手,连接的主机基于互相信任的原则等等性质使网络更加不安全。
      利用TCP/IP簇安全设计缺陷的攻击: (1)网络窥探(Network Snooping)利用数据在TCP/IP协议中的明文传输缺陷进 行在线侦听和业务流分析。攻击者可通过某些监控软件或网络分析仪等进行窃听。(2)IP源地址欺骗(IP Source Address Spoofing)利用IP地址易于更改和伪造的缺陷,进行IP地址假冒和欺骗。(3)路由攻击(Routing Attacks)1) IP源路由攻击:利用IP报头中的IP层拒绝服务型攻击(IP Denial of Service Attacks)利用IP 广播发送伪造的ICMP回应请求包,导致向某一受害主机发回大量ICMP应答包,造成网络拥塞或崩溃。(如"Smurf"攻击)。(7)IP栈攻击(IP Stack Attacks)利用多数操作系统不能处理相同源、宿IP地址类型IP包的缺陷,将伪造的此种类型的IP包大量发往某一目标主机,导致目标主机将其TCP/IP协议栈锁死甚至系统崩溃。(8)IP地址鉴别攻击(Authentication Attacks)利用TCP/IP协议只能识别IP地址的缺陷,攻击者通过窃取口令从该节点上非法登录服务器。(9)TCP SYN Flooding攻击。向攻击目标发送大量不可达的TCP SYN连接请求包,以淹没目标服务器,使正常连接的"三次握手"永远不能完成(拒绝服务攻击)。(10)TCP序列号攻击。利用对TCP连接初始序列号的猜测、冒充可信任主机进行欺骗连接(也可造成拒绝服务)攻击。源路由选项强制性地将IP包 按指定路径传递到希望的目标。2) 路由消息协议攻击(RIP Attacks):攻击者利用RIP协议无认证机制的缺陷,在网络上发布假的路由信息。3) 攻击路由器系统:利用路由器自身保护不严,攻击者进入路由器修改其配置或使之崩溃。(4)IP隧道攻击(IP Tunneling Attacks)利用IP隧道技术实施特洛伊木马攻击。 (5)网际控制报文协议攻击(ICMP Attacks)
      在TCP/IP协议族中有很多协议是有安全隐患的,试任举一例说明。

      socket句柄是什么意思?

      用过 WinSock API 网友们知道:WinSock 编程中有一很方便的地方便是其 息驱动机制,不管是底层 API 的 WSAAsyncSelect() 还是 MFC 的异步Socket类:CAsyncSocket,都提供了诸如 FD_ACCEPT、FD_READ、FD_CLOSE 之类的消息供编程人员捕捉并处理。FD_ACCEPT 通知进程有客户方Socket请求连接,FD_READ通知进程本地Socket有东东可读,FD_CLOSE通知进程对方Socket已关闭。那么,BSD Socket 是不是真的相形见拙呢?非也! 'cause cpu love unix so.BSD UNIX中有一系统调用芳名select()完全可以提供类似的消息驱动机制。cpu郑重宣布:WinSock的WSAAsyncSeclet()不过是此select()的fork版!bill也是fork出来的嘛,xixi.select()的机制中提供一fd_set的数据结构,实际上是一long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是Socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fd_set的内容,由此来通知执行了select()的进程哪一Socket或文件可读,下面具体解释:#include#include#includeint select(nfds, readfds, writefds, exceptfds, timeout)int nfds;fd_set *readfds, *writefds, *exceptfds;struct timeval *timeout;ndfs:select监视的文件句柄数,视进程中打开的文件数而定,一般设为呢要监视各文件中的最大文件号加一。readfds:select监视的可读文件句柄集合。writefds: select监视的可写文件句柄集合。exceptfds:select监视的异常文件句柄集合。timeout:本次select()的超时结束时间。(见/usr/sys/select.h,可精确至百万分之一秒!)当readfds或writefds中映象的文件可读或可写或超时,本次select()就结束返回。程序员利用一组系统提供的宏在select()结束时便可判断哪一文件可读或可写。对Socket编程特别有用的就是readfds。几只相关的宏解释如下:FD_ZERO(fd_set *fdset):清空fdset与所有文件句柄的联系。FD_SET(int fd, fd_set *fdset):建立文件句柄fd与fdset的联系。FD_CLR(int fd, fd_set *fdset):清除文件句柄fd与fdset的联系。FD_ISSET(int fd, fdset *fdset):检查fdset联系的文件句柄fd是否可读写,>0表示可读写。(关于fd_set及相关宏的定义见/usr/include/sys/types.h)这样,你的socket只需在有东东读的时候才读入,大致如下:...int sockfd;fd_setfdR;structtimeval timeout = ..;...for(;;) {FD_ZERO(&fdR);FD_SET(sockfd, &fdR);switch (select(sockfd + 1, &fdR, NULL, &timeout)) {case -1:error handled by u;case 0:timeout hanled by u;default:if (FD_ISSET(sockfd)) {now u read or recv something;/* if sockfd is father andserver socket, u can nowaccept() */}}}所以一个FD_ISSET(sockfd)就相当通知了sockfd可读。至于struct timeval在此的功能,请man select。不同的timeval设置使使select()表现出超时结束、无超时阻塞和轮询三种特性。由于timeval可精确至百万分之一秒,所以Windows的SetTimer()根本不算什么。你可以用select()做一个超级时钟。FD_ACCEPT的实现?依然如上,因为客户方socket请求连接时,会发送连接请求报文,此时select()当然会结束,FD_ISSET(sockfd)当然大于零,因为有报文可读嘛!至于这方面的应用,主要在于服务方的父Socket,你若不喜欢主动accept(),可改为如上机制来accept()。至于FD_CLOSE的实现及处理,颇费了一堆cpu处理时间,未完待续。--讨论关于利用select()检测对方Socket关闭的问题:仍然是本地Socket有东东可读,因为对方Socket关闭时,会发一个关闭连接通知报文,会马上被select()检测到的。关于TCP的连接(三次握手)和关闭(二次握手)机制,敬请参考有关TCP/IP的书籍。不知是什么原因,UNIX好象没有提供通知进程关于Socket或Pipe对方关闭的信号,也可能是cpu所知有限。总之,当对方关闭,一执行recv()或read(),马上回返回-1,此时全局变量errno的值是115,相应的sys_errlist[errno]为"Connect refused"(请参考/usr/include/sys/errno.h)。所以,在上篇的for(;;)...select()程序块中,当有东西可读时,一定要检查recv()或read()的返回值,返回-1时要作出关断本地Socket的处理,否则select()会一直认为有东西读,其结果曾几令cpu伤心欲断针脚。不信你可以试试:不检查recv()返回结果,且将收到的东东(实际没收到)写至标准输出...在有名管道的编程中也有类似问题出现。具体处理详见拙作:发布一个有用的Socket客户方原码。至于主动写Socket时对方突然关闭的处理则可以简单地捕捉信号SIGPIPE并作出相应关断本地Socket等等的处理。SIGPIPE的解释是:写入无读者方的管道。在此不作赘述,请详man signal。以上是cpu在作tcp/ip数据传输实验积累的经验,若有错漏,请狂炮击之。唉,昨天在hacker区被一帮孙子轰得差点儿没短路。ren cpu(奔腾的心) z80补充关于select在异步(非阻塞)connect中的应用,刚开始搞socket编程的时候我一直都用阻塞式的connect,非阻塞connect的问题是由于当时搞proxy scan而提出的呵呵通过在网上与网友们的交流及查找相关FAQ,总算知道了怎么解决这一问题.同样用select可以很好地解决这一问题.大致过程是这样的:1.将打开的socket设为非阻塞的,可以用fcntl(socket, F_SETFL, O_NDELAY)完成(有的系统用FNEDLAY也可).2.发connect调用,这时返回-1,但是errno被设为EINPROGRESS,意即connect仍旧在进行还没有完成.3.将打开的socket设进被监视的可写(注意不是可读)文件集合用select进行监视,如果可写,用getsockopt(socket, SOL_SOCKET, SO_ERROR, &error, sizeof(int));来得到error的值,如果为零,则connect成功.在许多unix版本的proxyscan程序你都可以看到类似的过程,另外在solaris精华 区->编程技巧中有一个通用的带超时参数的connect模块.
      网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
      socket句柄是什么意思?

      有关http 和tcp协议的一些问题:

      什么是TCP/IP协议,划为几层,各有什么功能? TCP/IP协议族包含了很多功能各异的子协议。为此我们也利用上文所述的分层的方式来剖析它的结构。TCP/IP层次模型共分为四层:应用层、传输层、网络层、数据链路层。TCP/IP网络协议TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网间网协议)是目前世界上应用最为广泛的协议,它的流行与Internet的迅猛发展密切相关—TCP/IP最初是为互联网的原型ARPANET所设计的,目的是提供一整套方便实用、能应用于多种网络上的协议,事实证明TCP/IP做到了这一点,它使网络互联变得容易起来,并且使越来越多的网络加入其中,成为Internet的事实标准。* 应用层—应用层是所有用户所面向的应用程序的统称。ICP/IP协议族在这一层面有着很多协议来支持不同的应用,许多大家所熟悉的基于Internet的应用的实现就离不开这些协议。如我们进行万维网(WWW)访问用到了HTTP协议、文件传输用FTP协议、电子邮件发送用SMTP、域名的解析用DNS协议、 远程登录用Telnet协议等等,都是属于TCP/IP应用层的;就用户而言,看到的是由一个个软件所构筑的大多为图形化的操作界面,而实际后台运行的便是上述协议。* 传输层—这一层的的功能主要是提供应用程序间的通信,TCP/IP协议族在这一层的协议有TCP和UDP。* 网络层—是TCP/IP协议族中非常关键的一层,主要定义了IP地址格式,从而能够使得不同应用类型的数据在Internet上通畅地传输,IP协议就是一个网络层协议。* 网络接口层—这是TCP/IP软件的最低层,负责接收IP数据包并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。1.TCP/UDP协议TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。IP协议的定义、IP地址的分类及特点什么是IP协议,IP地址如何表示,分为几类,各有什么特点?为了便于寻址和层次化地构造网络,IP地址被分为A、B、C、D、E五类,商业应用中只用到A、B、C三类。IP协议(Internet Protocol)又称互联网协议,是支持网间互连的数据报协议,它与TCP协议(传输控制协议)一起构成了TCP/IP协议族的核心。它提供网间连接的完善功能, 包括IP数据报规定互连网络范围内的IP地址格式。Internet 上,为了实现连接到互联网上的结点之间的通信,必须为每个结点(入网的计算机)分配一个地址,并且应当保证这个地址是全网唯一的,这便是IP地址。目前的IP地址(IPv4:IP第4版本)由32个二进制位表示,每8位二进制数为一个整数,中间由小数点间隔,如159.226.41.98,整个IP地址空间有4组8位二进制数,由表示主机所在的网络的地址(类似部队的编号)以及主机在该网络中的标识(如同士兵在该部队的编号)共同组成。为了便于寻址和层次化的构造网络,IP地址被分为A、B、C、D、E五类,商业应用中只用到A、B、C三类。* A类地址:A类地址的网络标识由第一组8位二进制数表示,网络中的主机标识占3组8位二进制数,A类地址的特点是网络标识的第一位二进制数取值必须为“0”。不难算出,A类地址允许有126个网段,每个网络大约允许有1670万台主机,通常分配给拥有大量主机的网络(如主干网)。* B类地址:B类地址的网络标识由前两组8位二进制数表示,网络中的主机标识占两组8位二进制数,B类地址的特点是网络标识的前两位二进制数取值必须为“10”。B类地址允许有16384个网段,每个网络允许有65533台主机,适用于结点比较多的网络(如区域网)。* C类地址:C类地址的网络标识由前3组8位二进制数表示,网络中主机标识占1组8位二进制数,C类地址的特点是网络标识的前3位二进制数取值必须为“110”。具有C类地址的网络允许有254台主机,适用于结点比较少的网络(如校园网)。为了便于记忆,通常习惯采用4个十进制数来表示一个IP地址,十进制数之间采用句点“.”予以分隔。这种IP地址的表示方法也被称为点分十进制法。如以这种方式表示,A类网络的IP地址范围为1.0.0.1-127.255.255.254;B类网络的IP地址范围为:128.1.0.1-191.255.255.254;C类网络的IP地址范围为:192.0.1.1-223.255.255.254。由于网络地址紧张、主机地址相对过剩,采取子网掩码的方式来指定网段号。 TCP/IP协议与低层的数据链路层和物理层无关,这也是TCP/IP的重要特点。正因为如此 ,它能广泛地支持由低两层协议构成的物理网络结构。目前已使用TCP/IP连接成洲际网、全国网与跨地区网。
      你玩网络游戏连接时一直存在的,下线了就马上断开了。 但http因为最开始设计的时候,为了读网页用,网页取到了你可能花个10分钟来读它,所以这10分钟连接是没有必要的,所以马上就断开了(节省服务器端资源)。所以用户是否还在浏览它的网页服务端不知道,因此就出现了cookie,session这类东西来弥补 为什么不用udp,首先用udp是为了提高效率,但是tcp已经很高效了,没必要用udp,而且udp容易出错(比方说你下载一个驱动,但是如果数据是坏的有可能损坏你的系统)
      不矛盾,一个是面向链接的,一个是无连接的。面向链接的可靠些,无连接的就不那么可靠。主要是因为这两个协议所处的层不一样。互联网的设计者认为,用户层应是简单的,直接的。所以无连接的设计能够简化设备的成本,利于互联网的开放式发展。网络的各个接入点和SP他们因为要处理来自用户的数据,所以将复杂的设备和可靠的协议放在这里。也是合乎情理的。
      TCP的面向连接是传输层的,而HTTP的无状态则是应用层的 传统TCP应用主要面向专用系统,这种环境中客户端的数目是有限的,意味者服务器最多开几十个服务进程修行了,而客户端与服务器需要连续地交换数据,频繁地连接和断开对两端都难以接受HTTP协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,如果按照上面的方式则需要在服务器端开的进程和句柄数目都是不可接受的,象paranoid945所说的,大部分通道实际上会很空闲、无端占用资源。因此HTTP的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。 UDP尽管不象TCP那样占用资源,但它不保证数据的完整性、有序性,想像如果服务器返回的HTML错序了或者丢失一部分你将看到什么效果;并且UDP没有流量控制,而互联网的传输质量又不是很好,服务器随便仍出一大堆UDP包可能导致网络风暴,这是相当危险的
      有关http 和tcp协议的一些问题:

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类