1、网络协议分层

按照分层的思想把网络协议栈进行分层主要有以下好处:

1.促进标准化工作,允许各个供应商进行开发

2.各层间相互独立,把网络操作分成低复杂单元

3.灵活性好,某一层变化不会影响到其它层

4.各层间通过一个接口在相邻层上下通信

OSI七层模型和TCP/IP五层模型的对比如下,我们现在用的是五层协议模型:

2、PDU、封装和解封装

  • PDU(protocol data unit):每一层使用自己层的协议和别的系统的对应层相互通信,协议层的协议在对等层之间交换的信息叫协议数据单元
  • 上层:message
  • 传输层:segment
  • 网络层:packet
  • 数据链路层:frame
  • 物理层:bit
  • 封装:数据要通过网络进行传输,要从高层一层一层的向下传送,如果一个主机要传送数据到别的主机,先把数据装到一个特殊协议报头中,这个过程叫封装
  • 封装分为:切片和加控制信息
  • 解封装:上述的逆向过程

数据进入TCP/IP协议栈时的封装过程如下:

数据进入TCP/IP协议栈时的解封装过程如下:

3、以太帧和常见的报文格式

(1)以太网帧(Ethernet II Frame)

  • D-MAC:目的MAC地址
  • S-MAC:源MAC地址
  • 类型域:表示帧里面上层协议数据的类型,0x0800代表IP协议帧,0x0806代表ARP协议帧
  • CRC:帧校验

(2)IP数据报

  • 版本号:4代表IPv4,
  • 头长度:报头的长度,值为4字节的倍数,故首部长度最大为60字节
  • 服务类型:暂未使用
  • 总长度:IP数据报的长度(报头区+数据区),单位为字节,故总长度最大为65535字节,但总长度不能超过最大传输单元MTU
  • 标识:一个计数器,用来产生数据报的标识
  • 标志:占3位,最低位MF,为1表示还有分片,中间为DF,为0,表示允许分片
  • 片偏移:较长的分组在分片后,某片在原分组中的相对位置,单位为8字节
  • TTL:生存时间,数据报可以经过的最大路由器数
  • 上层协议标识:1:ICMP,2:IGMP、6:TCP、17:UDP等;

分片举例:

IP数据报解析:

(3)TCP数据报

  • 协议、源IP、源端口、目的IP、目的端口确定一个TCP连接
  • 顺序号:TCP段所发送的数据部分第一个字节的序号
  • 确认号:期望收到对方下次发送的数据的第一个字节的序号
  • 头部长度:单位为4字节,因此TCP首部的最大长度为60字节
  • 窗口大小:窗口通告值,发送方根据接收方的窗口告值调整窗口大小
  • 紧急指针:指示紧急数据在报文段中的结束位置此时URG置位
  • URG:表示紧急指针字段有效
  • ACK:表示确认号字段有效
  • PSH:表示当前报文需要推操作
  • RST:置位表示复位TCP连接
  • SYN:用于建立TCP连接时同步序列号
  • FIN:用于释放TCP连接时标识发送方比特流结束

TCP报文解析:

(4)UDP数据包

常见协议对应的端口号:

UDP DHCP服务器端:67,DHCP客户端:68,DNS服务:53

TCP POP3(邮件接收协议):110,SMTP(邮件传输协议):25,HTTP服务:80

TCP FTP:数据传输为20,控制命令传输为21,Telnet:23

端口号范围为:1~65535,1~1024为熟知端口号,1025~65535称为动态端口

(5)ARP协议

  • ARP(Address Resolution Protocol)地址解析协议,是根据 IP 地址获取物理 MAC 地址的一个 TCP/IP 协议。
  • ARP 高速缓冲表:用来记录 IP 和 主机 MAC 地址的对应关系。会不断更新。
  • 功能:通过目标设备的 IP 地址,查询目标设备的 MAC 地址,同时维护 ARP 高速缓冲表,以保证通信的顺利进行。

ARP分组格式

  • 硬件类型:以太网为1
  • 协议类型:网络层协议类型,IP协议为0x0800
  • OP:操作码,ARP请求为1,ARP应答为2

(6)ICMP协议

  • ICMP 是 "Internet Control Message Protocol"(网络控制报文协议)的缩写,用于在 IP 主机、路由器之间传递控制消息。
  • 控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
  • ICMP 层区分不是很明显,一般划分在 IP 层中,通过 IP 包来封装ICMP数据 ,在实际传输中数据包的格式一般都是 IP 包 + ICMP包的格式

ICMP包格式:

代码:用来表示ICMP报文类型的少数参数,

例如:代码值为0,表示网络不可达;代码值为1,表示主机不可达

(7)DNS协议简介

  • DNS(Domain Name System):域名系统,将域名和IP地址相互映射的一个分布式数据库
  • 采用Client/Sever工作模式
  • DNS 协议运行在 UDP 协议之上,使用端口号 53
  • 过程图解

(8)DHCP协议简介

  • DHCP(Dynamic Host Configuration Protocol):动态主机配置协议
  • 采用Client/Sever工作模式
  • 为主机提供配置参数、自动分配可重复利用的网络地址
  • DHCP 协议运行在 UDP 协议之上,服务器端口号 67,客户端口号68

4、ping演示

Ping命令是为了检查网络的连接状况而使用的网络工具之一,用来检测数据包到达目的主机的可能性。

原理:使用ICMP协议的回送请求、回送应答。客户端发送回送请求给服务器,服务器返回一个ICMP回应应答。

Ping过程图解:

  • 首先开发板要解析百度的域名,获取到百度主机的 IP 地址,涉及到 DNS 协议,传输层用的是 UDP 协议
  • DNS 主机利用 UDP 协议,回复百度的 IP 地址给开发板。
  • 现在开发板要发送 Ping 请求包给百度主机,但是发现百度主机 IP 地址与自己不在同一网段,因此要发送 Ping 请求包给默认网关。
  • 要发送给默认网关的时候,忽然发现并没有默认网关对应的 MAC 地址,因此发送一个 ARP 广播包,如果交换机存储了默认网关的 MAC 地址,就直接告诉开发板默认网关的 MAC 地址,否则就会向所有端口发送ARP广播,直到路由1收到了报文后,立即响应,单播自己的 MAC 地址给开发板。
  • 这样开发板就可以把 Ping 包发送给默认网关(路由1)了。
  • 然后路由1 经过路由协议,经过一个个路由的转发,最后发送到了百度的主机上。百度主机检测到 IP 是自己的 IP,接收并处理 Ping 请求,接着百度主机发送一个 Ping 回应报文给开发板。

5、TCP客户端服务器通信演示

TCP(传输控制协议):提供一种面向连接的、可靠的传输层协议(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。

TCP三次握手过程:

TCP四次挥手过程:

 更多Linux内核源码高阶知识请加开发交流Q群篇【318652197】获取,进群免费获取相关资料,免费观看公开课技术分享,入群不亏,快来加入我们吧~

学习资料免费领

学习直通车

网络热门知识点,Linux内核——网络协议栈基本知识相关推荐

  1. 深入浅出Linux内核网络协议栈|结构sk_buff|Iptables|Netfilter丨内核源码丨驱动开发丨内核开发丨C/C++Linux服务器开发

    深入浅出Linux内核网络协议栈 视频讲解如下,点击观看: 深入浅出Linux内核网络协议栈|结构sk C/C++Linux服务器开发高级架构师知识点精彩内容包括:C/C++,Linux,Nginx, ...

  2. linux 内核网络协议栈

    Linux网络协议栈之数据包处理过程  1前言 本来是想翻译<The journey of a packet through the linux 2.4 network stack>这篇文 ...

  3. linux内核网络协议栈--监控和调优:接收数据(十五)

    译者序 本文翻译自 2016 年的一篇英文博客 Monitoring and Tuning the Linux Networking Stack: Receiving Data.如果能看懂英文,建议阅 ...

  4. Linux内核网络协议栈:udp数据包发送(源码解读)

    <监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...

  5. Linux内核网络协议栈流程及架构

    文章目录 Linux内核网络报文处理流程 Linux内核网络协议栈架构 Linux内核网络报文处理流程 linux网络协议栈是由若干个层组成的,网络数据的处理流程主要是指在协议栈的各个层之间的传递. ...

  6. 深入Linux内核网络堆栈

    前一段时间看到这篇帖子,确实很经典,于是翻出了英文原版再读,顺便再翻译出来供大家学习,这篇文章的中文版也早都有了,不过出于完全理解的目的,我还是将它翻译了出来,加进了自己的代码,虽然在上一周的翻译过程 ...

  7. Linux内核网络性能优化

    Linux内核网络性能优化 1. 前言 2. Linux网络协议栈 3. DPDK 4. XDP 4.1 XDP主要的特性 4.2 XDP与DPDK的对比 4.3 应用场景 5. CPU负载均衡 5. ...

  8. Linux内核网络数据包发送(一)

    Linux内核网络数据包发送(一) 1. 前言 2. 数据包发送宏观视角 3. 协议层注册 4. 通过 socket 发送网络数据 4.1 `sock_sendmsg`, `__sock_sendms ...

  9. Linux内核网络(一)——初探内核网络

    本文将从宏观上介绍Linux内核网络协议栈和网络设备驱动程序,介绍了两个很重要的结构(net_device和sk_buff),更深入更详细的内容将在以后的文章中介绍. 首先,我们需要了解网络分层模型. ...

  10. Linux内核--网络栈实现分析(一)--网络栈初始化--转

    转载地址 http://blog.csdn.net/yming0221/article/details/7488828 作者:闫明 本文分析基于内核Linux Kernel 1.2.13 以后的系列博 ...

最新文章

  1. PHP5比PHP4,php4和php5的配置异同比较
  2. 【蓝桥杯 - 练习】k倍区间(思维,数组)
  3. Java的jdk1.6与jre1.8中存在的差异
  4. vue中使用kindeditor编辑器_vue中使用kindeditor富文本编辑器
  5. Oracle学习笔记之五sp1,PL/SQL之BULK COLLECT
  6. 【2019JXCPC省赛:H】Rng(找规律+逆元)
  7. 快速下载【百度文库】文档
  8. delphi获取本机IP地址
  9. 计算机误删怎么恢复数据,电脑误删除数据怎么恢复_电脑误删除数据恢复方法...
  10. 如何证明pi是无理数
  11. Flowable入门系列文章39 - 网关 01
  12. linux ftp上传目录,Linux中ftp不能上传文件/目录的解决办法
  13. 推荐6款习惯养成APP,送给想要提升自己的人!
  14. Http响应Response详解
  15. 10G至40G互连方案-40G QSFP+ PSM4单模光模块
  16. 假设知道服务器IP,如何查询它绑定的域名?
  17. 【人工智能】对贝叶斯网络进行吉布斯采样
  18. matlab compiler使用,安装和使用MatlabCompilerRuntime
  19. Elastic Search 深入搜索
  20. Elasticsearch:如何在搜索时得到精确的总 hits 数

热门文章

  1. 拆解iPhone6S---ESM
  2. ASCII码表、ASCII码扩展表
  3. 正版sql sever(2000,2005,2008) 下载地址
  4. 媒体查询加上rem实现页面字体大小自适应
  5. HTML5期末大作业:游戏网站设计与实现——基于bootstrap响应式游戏资讯网站制作HTML+CSS+JavaScript
  6. java随机数种子_使用种子的Java随机数
  7. phpcms v9模板制作教程(转载)
  8. 推荐 7 个神级 Java 开源项目
  9. BOOST 升压电路调试笔记
  10. java 制作简历_个人简历java制作.doc