Linux通过系统调用提供了所有的网路功能,对于网络的编程都是基于SOCKET系统调用的实现的。Linux的socket系统调用支持Unix和Linux系统中通用的网络接口,并支持各种不同的网络类型,也支持内部进程之间的通信。在Linux系统中,如果希望得到Internet和其他程序进行通信,只能通过套接口socket()。这里我们学习Linux中TCP/IP协议的实现,Linux中的TCP/IP协议实现必须从Linux网络编程套接字开始学习。
套接口
从广义上讲,网络上的通信可以理解为是两个进程之间的通信,通信采用一个BSD套接口socket来描述通信链路的两端。套接口是一种使用操作系统中的文件描述符和系统进程进行通信的一种方法。Linux支持多种类型的套接口,每种类型的套接口都有自己的寻址方法。Linux支持的BSD套接口类型有以下几种,代表了各种不同的连接服务:
UNIX UNIX域套接口;
INET Internet地址族TCP/IP协议支持通信;
AX25 业余无线电X25;
IPX Novell IPX;
APPLE TALK Appletelk DDP;
X25 X25.
其中,支持TCP/IP协议的套接口类型是INET,这是我们关注的重点。Linux的INET套接口支持下面的几种套接口类型:
(1)数据流套接口(SOCK_STREAM)。数据流套接口提供可靠的双向顺序数据流连接。他们可以保证数据创术中的完整性,正确性和单一性。TCP协议支持数据流套接口。
(2)数据报套接口(SOCK_DGRAM)。数据报套接口可以向流式套接口一样提供双向的数据传输,但他们不能保证传输的数据一定能够到达目的地。即使数据能够到达,也无法保证数据以正确的顺序到达,以及数据的单一性和正确性。UDP协议支持数据报套接口。
在Linux中,用一个整型的数值描述一个套接口,成为套接口描述符。
socket的函数原型是:
int socket(int domain,int type, int protocol);
对于TCP/IP协议族来说,socket()函数的第一个参数是AF_INET,第二个参数是套接口的类型,可以设置为SOCK_STREAM或SOCK_DGRAM,分别对应于TCP和UDP。socket()返回一个整形的套接口描述符,如果出错返回-1。
网络编程函数
申请一个套接口以后,就可以利用LINUX提供的网络函数进行网络编程呢个。下面介绍几个非常重要的函数。
1.bind()函数
2.connect()函数
3.isten()函数
4.accept()函数
5.send()函数
6.recv()函数
这些函数的具体功能和变量我会在下篇日志中进行总结。
总结我理解的SOCKET就是在TCP/IP各层协议直接的一个接口。他将OSI模型中的软件操作相关的(应用层/表示层/会话层)同下面硬件相关(网络层/数据链路层/物理层)相联系起来的一个接口。实现了上下两层之间的通信。
最后,由于本人刚刚开始涉及网络编程知识,并且这是我第一次写日志,有理解错误之处,请大家批评。
文章评论(0条评论)
登录后参与讨论