Chinaunix首页 | 论坛 | 博客
  • 博客访问: 867974
  • 博文数量: 82
  • 博客积分: 2283
  • 博客等级: 大尉
  • 技术积分: 2007
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-15 22:19
文章分类

全部博文(82)

文章存档

2012年(82)

分类: 网络与安全

2012-07-16 14:32:03

        多个TCP连接或多个进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。

        区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

        常用的TCP/IP的3种套接字类型如下所示。
  
     流套接字(SOCK_STREAM): 流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发 送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。
  
       数据包套接字(SOCK_DGRAM):数据包套接字提供了一种无连接的服务。该服务并不能保 证数据说传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据包套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。

  
       原始套接字(SOCK_RAW):原始套接字与标准套接字(标准套接字指的是前面介绍的流套接 字和数据包套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据包套接字只能读取UDP协议的数 据。因此,如果要访问其他协议发送数据必须使用原始套接字

一个完整的Socket则用一个相关描述:

{协议,本地地址,本地端口,远程地址,远程端口}。



阅读(1840) | 评论(0) | 转发(1) |
0

上一篇:静态链表

下一篇:带外数据

给主人留下些什么吧!~~