网络热门知识点,Linux内核——网络协议栈基本知识
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内核——网络协议栈基本知识相关推荐
- 深入浅出Linux内核网络协议栈|结构sk_buff|Iptables|Netfilter丨内核源码丨驱动开发丨内核开发丨C/C++Linux服务器开发
深入浅出Linux内核网络协议栈 视频讲解如下,点击观看: 深入浅出Linux内核网络协议栈|结构sk C/C++Linux服务器开发高级架构师知识点精彩内容包括:C/C++,Linux,Nginx, ...
- linux 内核网络协议栈
Linux网络协议栈之数据包处理过程 1前言 本来是想翻译<The journey of a packet through the linux 2.4 network stack>这篇文 ...
- linux内核网络协议栈--监控和调优:接收数据(十五)
译者序 本文翻译自 2016 年的一篇英文博客 Monitoring and Tuning the Linux Networking Stack: Receiving Data.如果能看懂英文,建议阅 ...
- Linux内核网络协议栈:udp数据包发送(源码解读)
<监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...
- Linux内核网络协议栈流程及架构
文章目录 Linux内核网络报文处理流程 Linux内核网络协议栈架构 Linux内核网络报文处理流程 linux网络协议栈是由若干个层组成的,网络数据的处理流程主要是指在协议栈的各个层之间的传递. ...
- 深入Linux内核网络堆栈
前一段时间看到这篇帖子,确实很经典,于是翻出了英文原版再读,顺便再翻译出来供大家学习,这篇文章的中文版也早都有了,不过出于完全理解的目的,我还是将它翻译了出来,加进了自己的代码,虽然在上一周的翻译过程 ...
- Linux内核网络性能优化
Linux内核网络性能优化 1. 前言 2. Linux网络协议栈 3. DPDK 4. XDP 4.1 XDP主要的特性 4.2 XDP与DPDK的对比 4.3 应用场景 5. CPU负载均衡 5. ...
- Linux内核网络数据包发送(一)
Linux内核网络数据包发送(一) 1. 前言 2. 数据包发送宏观视角 3. 协议层注册 4. 通过 socket 发送网络数据 4.1 `sock_sendmsg`, `__sock_sendms ...
- Linux内核网络(一)——初探内核网络
本文将从宏观上介绍Linux内核网络协议栈和网络设备驱动程序,介绍了两个很重要的结构(net_device和sk_buff),更深入更详细的内容将在以后的文章中介绍. 首先,我们需要了解网络分层模型. ...
- Linux内核--网络栈实现分析(一)--网络栈初始化--转
转载地址 http://blog.csdn.net/yming0221/article/details/7488828 作者:闫明 本文分析基于内核Linux Kernel 1.2.13 以后的系列博 ...
最新文章
- PHP5比PHP4,php4和php5的配置异同比较
- 【蓝桥杯 - 练习】k倍区间(思维,数组)
- Java的jdk1.6与jre1.8中存在的差异
- vue中使用kindeditor编辑器_vue中使用kindeditor富文本编辑器
- Oracle学习笔记之五sp1,PL/SQL之BULK COLLECT
- 【2019JXCPC省赛:H】Rng(找规律+逆元)
- 快速下载【百度文库】文档
- delphi获取本机IP地址
- 计算机误删怎么恢复数据,电脑误删除数据怎么恢复_电脑误删除数据恢复方法...
- 如何证明pi是无理数
- Flowable入门系列文章39 - 网关 01
- linux ftp上传目录,Linux中ftp不能上传文件/目录的解决办法
- 推荐6款习惯养成APP,送给想要提升自己的人!
- Http响应Response详解
- 10G至40G互连方案-40G QSFP+ PSM4单模光模块
- 假设知道服务器IP,如何查询它绑定的域名?
- 【人工智能】对贝叶斯网络进行吉布斯采样
- matlab compiler使用,安装和使用MatlabCompilerRuntime
- Elastic Search 深入搜索
- Elasticsearch:如何在搜索时得到精确的总 hits 数
热门文章
- 拆解iPhone6S---ESM
- ASCII码表、ASCII码扩展表
- 正版sql sever(2000,2005,2008) 下载地址
- 媒体查询加上rem实现页面字体大小自适应
- HTML5期末大作业:游戏网站设计与实现——基于bootstrap响应式游戏资讯网站制作HTML+CSS+JavaScript
- java随机数种子_使用种子的Java随机数
- phpcms v9模板制作教程(转载)
- 推荐 7 个神级 Java 开源项目
- BOOST 升压电路调试笔记
- java 制作简历_个人简历java制作.doc