1. 概述

TCP/IP协议栈可以实现不同型号、不同操作系统的计算机之间的通信,它并不是某个具体的协议,而是一组协议。我们都知道OSI七层模型中有物理层、数据链路层、网络层、传输层、会话层、表示层、应用层共七层,每一层都对应多个相关的协议。同样,TCP/IP网络协议也进行了层次的划分,分为四层,分别规定了每层的作用以及它们的协议。

网络接口层:通常包括操作系统中的设备驱动程序和计算机中对应的网卡,它们一起处理与电缆的物理接口细节。

网络层:有时也称作网际层或互联网层,处理分组在网络中的活动,例如分组的选路。在

T C P / I P协议族中,网络层协议包括I P协议(网际协议),ICMP协议(I n t e r n e t互联网控制报文协议),以及IGMP协议(I n t e r n e t组管理协议)。

运输层:主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两种运输层协议分别在不同的应用程序中有不同的用途,这一点将在后面看到。

应用层:负责处理特定的应用程序细节

假设在一个局域网(LAN)如以太网中有两台主机,二者都运行FTP协议,如图列出了该过程所涉及到的所有协议。

这里,我们列举了一个FTP客户程序和另一个FTP服务器程序。大多数的网络应用程序都被设计成客户-服务器模式。服务器为客户提供某种服务,在该图中就是访问服务器所在主机上的文件。在远程登录应用程序Telnet中,为客户提供的服务是登录到服务器主机上。在同一层上,双方都有对应的一个或多个协议进行通信。例如,某个协议允许TCP层进行通信,而另一个协议则允许两个IP层进行通信。在图的右边,我们可以看出应用程序通常是一个用户进程,而下三层则一般在linux操作系统内核中执行。顶层与下三层之间还有另一个关键的不同之处。应用层关心的是应用程序的细节,而不是数据在网络中的传输活动。下三层对应用程序一无所知,但它们要处理所有的通信细节。在图中列举了四种不同层次上的协议。FTP是一种应用层协议, TCP是一种运输层协议,IP是一种网络层协议,而以太网协议则应用于链路层上。TCP/IP协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已(该协议族的另一个名字是I n t e r n e t协议族(Internet Protocol Suite))。网络接口层和应用层的目的是很显然的—前者处理有关通信媒介的细节(以太网、令牌环网等),而后者处理某个特定的用户应用程序( FT P、Telnet等)。但是,从表面上看,网络层和运输层之间的区别不那么明显。

2.数据封装

数据从应用层到物理层要经过一系列的加包头过程,反之,从物理层到应用层要进行拆包,每经过一层就要进行相应的去数据包包头。

3. 数据传输

数据的传输使用了一个非常重要的结构体sk_buff,该结构体用来实现数据在各个层次的数据传输。该数据结构在linux内核源码的头文件中进行的声明,结构体主要成员变量如下:

struct sk_buff {

struct sk_buff *next;

struct sk_buff *prev;

struct net_device *dev; //数据包属于哪个网卡

unsigned int len, //有效数据长度

data_len; //分片数据段的长度

__u16 mac_len,

hdr_len;

sk_buff_data_t tail;

sk_buff_data_t end;

unsigned char *head, //缓存区的头指针

*data; //有效数据头指针

...

};

sk_buff相关操作函数:

/*********************************************************

*功能:分配sk_buff结构体

*参数:size :缓存区大小

* priority:分配标志GFP_KERNEL,GFP_ATOMIC...

*返回值:成功返回skb指针

* 失败返回NULL

********************************************************/

struct sk_buff *alloc_skb(unsigned int size,gfp_t priority)

/**********************************************************

*功能:释放sk_buff

*参数:skb:skb指针

*返回值:void

**********************************************************/

void kfree_skb(struct sk_buff *skb)

/*tail下移,有效数据区增大*/

unsigned char *skb_put(struct sk_buff *skb, unsigned int len);

/*data上移,有效数据区增大*/

unsigned char *skb_push(struct sk_buff *skb, unsigned int len);

/*data tail下移,有效数据区不变*/

void skb_reserve(struct sk_buff *skb, int len)

嵌入式Linux系统协议栈,嵌入式linux tcpip协议栈概述相关推荐

  1. [译] APT分析报告:01.Linux系统下针对性的APT攻击概述

    这是作者新开的一个专栏,主要翻译国外知名的安全厂商APT报告文章,了解它们的安全技术,学习它们溯源APT组织的方法,希望对您有所帮助.第一篇文章主要分享Linux系统下针对性的APT攻击及技术要点,并 ...

  2. 连接linux系统的mysql,Linux系统MySQL开启远程连接

    1.远程连接上Linux系统,确保Linux系统已经安装上了MySQL数据库.登陆数据库.mysql -uroot -p(密码). 2.创建用户用来远程连接 GRANT ALL PRIVILEGES ...

  3. imx6ull移植Linux系统第二篇——Linux内核的移植

    imx6ull移植Linux系统第二篇--Linux内核的移植 花了大概两周的时间,把Linux的移植认真学了一遍,期间踩了不少坑,花费了不少时间去解决各种奇奇怪怪的问题,最终完成了uboot.系统镜 ...

  4. Alpine linux 小内存版,Alpine Linux系统-Alpine Linux系统【轻量级Linux】下载v3.11.0 最新版-西西软件下载...

    Alpine Linux系统[轻量级Linux],Alpine Linux其实就是一个清凉版的Linux系统,通过牺牲一些不常用的功能和特性来达到更加轻巧的体积以及更快的响应速度.Alpine Lin ...

  5. linux系统清理内存,Linux实验室:五个清理磁盘空间小妙招

    1删除安装包:清空系统APT缓存 玩儿电脑最怕的就是卡慢,那么电脑卡慢应该怎么解决呢?对于windows系统来说,你可能有各种免费的杀毒软件.全家桶帮你清空系统空间,那么Linux系统怎么办?今天笔者 ...

  6. linux系统的笔记本,Linux:开源的免费操作系统_笔记本电脑_笔记本评测-中关村在线...

    ■linux Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议 ...

  7. Linux系统之部署Linux管理面板1Panel

    Linux系统之部署Linux管理面板1Panel 一.1Panel介绍 1.1Panel简介 2.1Panel特点 二.本地环境规划 1.本此实践目的 2.本地环境规划 三.检查本地环境 1.检查操 ...

  8. 嵌入式系统实验 构建嵌入式Linux系统,《嵌入式系统与开发》构建嵌入式Linux系统-实验报告.doc...

    <嵌入式系统与开发>构建嵌入式Linux系统-实验报告 <嵌入式数据库sqlite移植及使用> 实验报告 学生姓名: 陈 彤 学 号: 1座机电话号码 专业班级: 130044 ...

  9. 嵌入式linux系统和嵌入式android系统的区别和联系

    目录 区别与联系 嵌入式系统在物联网行业中的应用 物联网嵌入式系统的特征 区别与联系 这个问题很多人问,尤其是初入嵌入式的菜鸟.其实大家都认为android是java,已经不是linux,殊不知and ...

  10. 外网访问arm嵌入式linux系统_嵌入式Linux系统移植的四大步骤

    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命 ...

最新文章

  1. 怀念 儿时课本贴图,你还记得课文名吗
  2. MVC 学习日志1(上)
  3. 开发步骤 采用restful接口开发的开发步骤
  4. php 修改上传文件大小 (max_execution_time post_max_size)
  5. 计算机几何学论坛,现代几何学与计算机科学-中国计算机学会.pdf
  6. 所有的面试问题都可以归结为这三类(附回答套路)
  7. a除b的余数【取模(%)与取余(/)的区别】
  8. 资源放送丨《Oracle RAC 集群安装部署》PPT视频
  9. win7日历加入农历_还是农历更亲切,春节制作一个带农历的日历,欢欢喜喜过新年...
  10. 离线语音识别技术品鉴——功能不同各有千秋
  11. 【限时福利】COACKA免费试听@Days China,干货在这里!
  12. 学习《自己动手写网络爬虫》之记录1
  13. vue.js中修饰符.stop的用法。
  14. 数据结构--------课后题
  15. Latex 公式换行问题,(换行,等号对齐)
  16. openfire 开发之 openfire-api for ruby
  17. FTP文件夹打开错误,Windows无法访问此文件夹的问题处理方法
  18. wuc-tab标签点击不了_买白酒时,不论啥牌子,只要标签上有“这行字”,全是酒精勾兑酒...
  19. 那些年CUDA编程那些事(一)
  20. 前端程序员常用的9大构建工具

热门文章

  1. 金航数码再度携手 The Open Group年度峰会
  2. Missing Marketing Icon - iOS Apps must include a 1024x1024px Marketing Icon in PNG format
  3. 北航计算机刘强,刘强 LIU Qiang
  4. python 持续集成 教程_使用Travis进行持续集成
  5. 工作中可能会使用到的数据结构和算法
  6. 隐马尔科夫模型一(概念理解)
  7. selenium 校园网自动连接
  8. 使用protractor操作页面元素
  9. 2天,我把MySQL索引、事务、分库分表、锁、性能优化撸完了!
  10. 什么是嵌入式?嵌入式开发怎么学