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
linux网络编程(一)相关推荐
- Linux网络编程--进程间通信(一)
进程间通信简介(摘自<Linux网络编程>p85) AT&T 在 UNIX System V 中引入了几种新的进程通讯方式,即消息队列( MessageQueues),信号量( s ...
- Linux io模型及函数调用,Linux 网络编程的5种IO模型:信号驱动IO模型
Linux 网络编程的5种IO模型:信号驱动IO模型 背景 这一讲我们来看 信号驱动IO 模型. 介绍 情景引入: 在信号驱动IO模型中,当用户线程发起一个IO请求操作,会给对应的socket注册一个 ...
- Linux网络编程实例分析
最近由于工作原因需要温习一下Linux网络编程的部分基础知识,因此对之前写的Socket网络通信的代码进行了进一步优化和拓展,在不关闭一次Socket连接的基础上,对服务端加入循环读写的功能,同时加入 ...
- Linux网络编程必看书籍推荐
首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...
- [Linux网络编程学习笔记]套接字地址结构
好久没有看那Linux网络编程这本书了,今天看到了重点部分-TCP套接字.下面先来看看套接字的地址结构 Linux系统的套接字可以支持多种协议,每种不同的协议都是用不同的地址结构.在头文件<li ...
- linux网络编程二:基础socket, bind, listen, accept, connect
linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h> #inc ...
- linux网络编程常用函数详解与实例(socket--bind--listen--accept)
常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...
- 基于UDP客户端服务器的编程模型-linux网络编程
坚持在代码中注释,边读代码边学习Linux网络编程 使用到的发送函数原型: #include <sys/types.h>#include <sys/socket.h>ssize ...
- 【Linux】一步一步学Linux网络编程教程汇总(更新中......)
00. 目录 文章目录 00. 目录 01. 基础理论知识 02. 初级编程 03. 高级编程 04. LibEvent库 05. 06. 07. 01. 基础理论知识 [Linux网络编程]网络协议 ...
- 【Linux网络编程】并发服务器之select模型
00. 目录 文章目录 00. 目录 01. 概述 02. I/O复用技术概述 03. select模型服务器实现思路 04. select模型服务器实现 05. 附录 01. 概述 服务器设计技术有 ...
最新文章
- 电脑壁纸励志_励志壁纸 | 要乖 要长大 要努力 要不负众望
- C# 视频监控系列(2):客户端——封装API
- 找到一个或多个多重定义的符号
- densenet tensorflow 中文汉字手写识别
- 从Java新手到大神需要学哪些知识?
- Outlier Detection for Improved Data Quality and Diversity in Dialog Systems-学习笔记
- java基础知识一_Java基础知识(一)
- 疯狂java实验五数据流编程_2017-2018-2 20165209 实验五《网络编程与安全》实验报告...
- 【分享】伙伴们!关注公众号要慎重!这半年我取关了很多,这几个留下了!真心推荐给你!...
- 计算机动画---计算机动画的光栅方法
- spring源码-@Autowired、@Resource注解底层原理
- 关于Teigha的使用记录
- codeblock的若干使用技巧
- ThoughtWorks 结对编程
- 【学习笔记】seckill-秒杀项目--(11)项目总结
- 计算机相关设备巡检表,电脑维护巡检方案
- 含泪整理最优质花朵 鲜花 花卉VRay材质球素材,你想要的这里都有
- 关闭PyCharm的Run with Python Console模式
- 游侠的基础技术总结——前言
- 个人信用报告内容组成和解读(七) ---本人声明、异议标注、查询等