如何使用Linux套接字?
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-03
我们知道许多应用程序,例如E-mail、Web和即时通信都依靠网络才能实现.这些应用程序中的每一个都依赖一种特定的网络协议,但每个协议都使用相同的常规网络传输方法.许多人都没有意识到网络协议本身存在漏洞.本文将会学习如何使用套接字使应用程序访问网络以及如何处理常见的网络漏洞.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 图1 OSI模型 1.套接字 套接字是通过操作系统(OS)完成网络通信的一种标准方法.可以将套接字看作是与连接相连的一个终端,就像是操作员配电盘上的一个插座一样.但是这些套接字只是程序员的抽象称呼,它们负责有文描述的OSI模型的所有基本细节.对程序员来说,可以使用一个套接字通过网络发送或接收数据.这些数据在较低的层(由操作系统处理)之上的会话层(5)传输,该层负责路由.有几种不同的套接字,它们决定了传输层的结构.最常见的类型是流套接字和数据报套接字. 流套接字提供了可靠的双向通信,这类似于您和他人打电话.一方向另一方发起连接,建立连接之后,任何一方都可以和另一方通信.此外,您所说的话实际上是否到达目的地能够得到快速证实.流套接字使用一种称为传输控制协议(Transmission Control Protocol,TCP)的标准通信协议,这个协议存在于OSI模型的传输层(4).在计算机网络上,数据通常以我们称之为包的大数据块的形式传输.TCP被设计为数据包按顺序到达目的地并且无差错,就像在电话中讲话时,单词以它们被说出的顺序到达另一端一样.Web服务器、邮件服务器以及它们各自的客户应用程序都使用TCP和流套接字进行通信. 另一种常见的套接字类型是数据报套接字.使用数据报套接字通信更像是邮寄一封信而不是打电话.连接是单向的并且不可靠.如果您寄了几封信,您将不能确定它们是否按照和邮寄时相同的顺序到达目的地,甚至连能否被送达目的地也不能保证.邮政服务相当可靠,但Intemet并不可靠.数据报套接字在传输层(4)上使用另一种称为UDP的标准协议来代替TCP.UDP代表用户数据报协议(User Datagram Protocol),意味着可以用它来创建自定义协议.这个协议非常基本并且是轻量级的,它只内置了很少的保护措施.它并不是一种真正的连接,只是一种从一端向另一端发送数据的基本方法.使用数据报套接字时,协议中的系统开销非常少,但协议完成的功能也不多.如果程序需要证实另一方接收到了数据包,编程使另一方回送一个确认包.有些情况下,可以接受数据包的丢失.数据报套接字和UDP普遍用于网络游戏和流媒体,开发人员可以根据需要精确地修整他们的通信,而不会存在像TCP那样的固有系统开销. 2.套接字函数 在C语言中,套接字的行为类似于文件,它们使用文件描述符来标识它们自己.套接字的行为与文件非常相似,实际上利用套接字文件描述符,可以使用read()和write()函数接收和发送数据.但是,有几个函数是专门设计用来处理套接字的.在/usr/include/sys/socket.h文件中有这些函数原型的定义. extern int socket (int __domain, int __type, int __protocol) __THROW; 用于创建一个新套接字,返回一个表牙示套接字后的文件描述符,错误时遣返回-1.extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len); 将一个套接字(由文件描述符fd指定)连接到远程主机.成功返回0,错误返回-1. Listen(int fd,int backlog_queue_size) 侦听传入的连接并将连接请求排队,:直到数量达到backlog_queue_size.成功返回0,错误返回-1. extern int accept (int __fd, __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len); 一个绑定的端口上接受一个传入连接.远程主机的地址信息写入remote_host结构中,地址结构的实际大小写入到addr_len中.这个函数返回一个新套接字文件描述符来标识已经连接的套接字,错误返回-1. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: linux 修改计算机名下一篇: linux内核3.0rc发布了
关于如何使用Linux套接字?的所有评论