论文部分内容阅读
[摘 要]随着对网络工作的深入,需要对网络数据包进行捕获,就要用到套接字的知识。套接字是支持TCP/IP的网络通信的基本操作单元,可以看作是不同主机之间的进程进行双向通信的端面点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
[关键词]套接字、原始套接字、面向连接。
中图分类号:TP393.09 文献标识码:A 文章编号:1009-914X(2014)36-0101-01
1 网络捕获编程的基础
要进行网络捕获首先要解决两个问题:一个是如何准确的定位网络上的一台或多台机。另一个是要找到主机后如何可靠高效的进行数据传输。这就用到套接字(SOCKET)和TCP的编程知识。
2 套接字的含义
多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
3 套接字分类
3.1 流套接字(SOCKET_STREAM)
套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。
3.2 数据报套接字(SOCKET_DGRAM)
数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
3.3 原始套接字(SOCKET_RAW)
原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。
4 套接字的工作原理
根据连接启动的方式以及本地套接字要连接的目标。套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认。
(1)所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字。而是处于等待连接的状态,实时监控网络状态。
(2)所谓客户端请求,是指由客户端的套接字提出连接请求。要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号。然后就向服务器端套接字提出连接请求。
(3)所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,且客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态。继续接收其他客户端套接字的连接请求。
5 C#中socket编程
5.1 面向连接实现步骤
(1)建立一个套接字。
(2)绑定本机的IP和端口。
(3)利用Listen()方法来监听网络上是否有信息。
(4)TCP情况下,如果监听到一个连接,就可以使用accept来接收这个连接,然后就可以利用Send/Receive来执行操作。
(5)如果不继续发送和接收,就用close关闭套接字。
5.2 面向连接的套接字系统调用时序
5.3 简单代码
5.3.1 TCPServer
6 結束语
本文介绍了套接字的基本概念和实现套接字编程的基本原理,以及在C#下进行套接字编程。在c#中,提供了System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现。简化了代码,开发更加方便快捷。
参考文献
[1] 李兰友,杨扬晓光.visual C#.Net程序设计.清华大学出版社.2004—4.
[2] 刘光蓉.运用visual C++构建基于Socket的C/S模式通信.武汉工业学院学报,2004,23(3):29—31.
[3] 何进,谢松巍.基于socket的TCP/IP网络通讯模式研究.计算机应用研究.2001,8:134—135.
[4] 阿根廷.Sergio Scaglia嵌入式Internet TCP/IP基础、实现及应用[M].北京航天航空大学出版社.2008.
[5] 明13科技.Visual C#项目开发实例自学手册[M].北京:人民邮电出版社,2008:349—359.
[关键词]套接字、原始套接字、面向连接。
中图分类号:TP393.09 文献标识码:A 文章编号:1009-914X(2014)36-0101-01
1 网络捕获编程的基础
要进行网络捕获首先要解决两个问题:一个是如何准确的定位网络上的一台或多台机。另一个是要找到主机后如何可靠高效的进行数据传输。这就用到套接字(SOCKET)和TCP的编程知识。
2 套接字的含义
多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
3 套接字分类
3.1 流套接字(SOCKET_STREAM)
套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。
3.2 数据报套接字(SOCKET_DGRAM)
数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
3.3 原始套接字(SOCKET_RAW)
原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。
4 套接字的工作原理
根据连接启动的方式以及本地套接字要连接的目标。套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认。
(1)所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字。而是处于等待连接的状态,实时监控网络状态。
(2)所谓客户端请求,是指由客户端的套接字提出连接请求。要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号。然后就向服务器端套接字提出连接请求。
(3)所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,且客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态。继续接收其他客户端套接字的连接请求。
5 C#中socket编程
5.1 面向连接实现步骤
(1)建立一个套接字。
(2)绑定本机的IP和端口。
(3)利用Listen()方法来监听网络上是否有信息。
(4)TCP情况下,如果监听到一个连接,就可以使用accept来接收这个连接,然后就可以利用Send/Receive来执行操作。
(5)如果不继续发送和接收,就用close关闭套接字。
5.2 面向连接的套接字系统调用时序
5.3 简单代码
5.3.1 TCPServer
6 結束语
本文介绍了套接字的基本概念和实现套接字编程的基本原理,以及在C#下进行套接字编程。在c#中,提供了System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现。简化了代码,开发更加方便快捷。
参考文献
[1] 李兰友,杨扬晓光.visual C#.Net程序设计.清华大学出版社.2004—4.
[2] 刘光蓉.运用visual C++构建基于Socket的C/S模式通信.武汉工业学院学报,2004,23(3):29—31.
[3] 何进,谢松巍.基于socket的TCP/IP网络通讯模式研究.计算机应用研究.2001,8:134—135.
[4] 阿根廷.Sergio Scaglia嵌入式Internet TCP/IP基础、实现及应用[M].北京航天航空大学出版社.2008.
[5] 明13科技.Visual C#项目开发实例自学手册[M].北京:人民邮电出版社,2008:349—359.