linux网络编程(一)

1、linux的网络模型

linux使用的网络模型是TCP/UP四层网络模型,主要由应用程序、传输层、网络层、网络接口层组成。与OSI七层模型不同,但是又相互对应,它们之间关系如下图:


OSI模型的应用层、表示层、会话层对应着TCP/IP模型的应用层,传输层对应传输层,网络层对应网络互连层,数据链路层和物理层对应主机到网络层(网络接口层)。linux中的网卡驱动属于7层模型中的数据链路层,属于四层模型中的最底层的网络接口层。

2、linux网络协议栈包含的网络协议

linux用到的网络协议主要有:TCP、IP、UDP、以太网协议等。这些协议之间的关系,体现在各类协议数据包之间的关系,主要是各类数据包之间的相互包含。如下图所示


TCP数据包加上IP首部之后,称为IP数据报,IP数据报加上以太网首部,以太网尾部成为以太网帧。网络上传输的所有数据都是以太网帧的形式。这部分了解的很浅,详细点的可以看下面两篇文章:

http://www.cnblogs.com/BlueTzar/articles/811160.html

http://www.2cto.com/net/201310/252965.html


3、linux的网络编程模型

linux采用统一的网络编程模型:利用Socket(套接字)抽象层进行网络编程。如果不采用统一的编程模型,那么linux的网络编程会是下图的情况:


当不同的用户进程,想要使用不同的网络协议来传输数据时,就必须调用不同协议对应的方法。比如可能进程a要调用tcp_send方法。进程b要调用ip_send方法,而进程c却要调用udp_send方法。这样,实际网络编程会变得很不方便。

当有了统一编程模型后,linux的网络编程就是下图的情况:


用户程序只需要调用socket抽象层提供的统一接口即可,无需考虑具体要使用哪个协议,这些事情内核会帮我们解决,我们只要调用socket抽象层提供的接口就行。这样,进程a、b、c都只要调用send方法就OK。这就使linux网络编程变得很方便了。socket又叫套接字编程模型。


3、TCP编程模型

TCP是一种基于连接的协议。TCP编程模型有服务器和客户机两部分,如下图:


服务器要做的事:创建套接字、绑定地址、监听端口、等待连接、发/收数据、结束连接

客户端要做的事:创建套接字、连接服务器、发/收数据、结束连接

在上述模型中,填上具体的函数之后,模型如下图:


(图片来源:http://blog.chinaunix.net/uid-9112803-id-3199813.html)

实际编程时,只要按照上述模型,在程序中完成相应的步骤就行。具体如何实现,可以看linux网络编程(二)——TCP编程,连接如下

http://blog.csdn.net/andoubi/article/details/51778988


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值