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网络编程(一)相关推荐

  1. Linux网络编程--进程间通信(一)

    进程间通信简介(摘自<Linux网络编程>p85) AT&T 在 UNIX System V 中引入了几种新的进程通讯方式,即消息队列( MessageQueues),信号量( s ...

  2. Linux io模型及函数调用,Linux 网络编程的5种IO模型:信号驱动IO模型

    Linux 网络编程的5种IO模型:信号驱动IO模型 背景 这一讲我们来看 信号驱动IO 模型. 介绍 情景引入: 在信号驱动IO模型中,当用户线程发起一个IO请求操作,会给对应的socket注册一个 ...

  3. Linux网络编程实例分析

    最近由于工作原因需要温习一下Linux网络编程的部分基础知识,因此对之前写的Socket网络通信的代码进行了进一步优化和拓展,在不关闭一次Socket连接的基础上,对服务端加入循环读写的功能,同时加入 ...

  4. Linux网络编程必看书籍推荐

    首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...

  5. [Linux网络编程学习笔记]套接字地址结构

    好久没有看那Linux网络编程这本书了,今天看到了重点部分-TCP套接字.下面先来看看套接字的地址结构 Linux系统的套接字可以支持多种协议,每种不同的协议都是用不同的地址结构.在头文件<li ...

  6. linux网络编程二:基础socket, bind, listen, accept, connect

    linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h>     #inc ...

  7. linux网络编程常用函数详解与实例(socket--bind--listen--accept)

    常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...

  8. 基于UDP客户端服务器的编程模型-linux网络编程

    坚持在代码中注释,边读代码边学习Linux网络编程 使用到的发送函数原型: #include <sys/types.h>#include <sys/socket.h>ssize ...

  9. 【Linux】一步一步学Linux网络编程教程汇总(更新中......)

    00. 目录 文章目录 00. 目录 01. 基础理论知识 02. 初级编程 03. 高级编程 04. LibEvent库 05. 06. 07. 01. 基础理论知识 [Linux网络编程]网络协议 ...

  10. 【Linux网络编程】并发服务器之select模型

    00. 目录 文章目录 00. 目录 01. 概述 02. I/O复用技术概述 03. select模型服务器实现思路 04. select模型服务器实现 05. 附录 01. 概述 服务器设计技术有 ...

最新文章

  1. 电脑壁纸励志_励志壁纸 | 要乖 要长大 要努力 要不负众望
  2. C# 视频监控系列(2):客户端——封装API
  3. 找到一个或多个多重定义的符号
  4. densenet tensorflow 中文汉字手写识别
  5. 从Java新手到大神需要学哪些知识?
  6. Outlier Detection for Improved Data Quality and Diversity in Dialog Systems-学习笔记
  7. java基础知识一_Java基础知识(一)
  8. 疯狂java实验五数据流编程_2017-2018-2 20165209 实验五《网络编程与安全》实验报告...
  9. 【分享】伙伴们!关注公众号要慎重!这半年我取关了很多,这几个留下了!真心推荐给你!...
  10. 计算机动画---计算机动画的光栅方法
  11. spring源码-@Autowired、@Resource注解底层原理
  12. 关于Teigha的使用记录
  13. codeblock的若干使用技巧
  14. ThoughtWorks 结对编程
  15. 【学习笔记】seckill-秒杀项目--(11)项目总结
  16. 计算机相关设备巡检表,电脑维护巡检方案
  17. 含泪整理最优质花朵 鲜花 花卉VRay材质球素材,你想要的这里都有
  18. 关闭PyCharm的Run with Python Console模式
  19. 游侠的基础技术总结——前言
  20. 个人信用报告内容组成和解读(七) ---本人声明、异议标注、查询等

热门文章

  1. 统计学(第七版 贾俊平)第七章 期末复习笔记(详细 附例题详解及公式)
  2. 自回归模型(AR Model)
  3. 代码质量(权威精选植根于开发实践的最佳读物)
  4. Winxp 中文版 使用 IDM,补丁
  5. win10+ubuntu16.04双系统下完全删除并重装ubuntu16.04
  6. C语言找出1000之内的完数
  7. word 文档规范,比如标题、正文的字号
  8. CAD文件如何转JPG图片?分享两种转换方法
  9. SVN 中文工具(Tools)
  10. php 在线拍卖系统源码,php拍卖系统,源码