网络协议栈-基础知识

1、分层模型

1.1、OSI七层模型


1、OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。
2、每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能使就是帮助不同类型的主机实现数据传输。
3、它的最大优点是将服务、接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

1.2 、TCP/IP四层模型


应用层—http,ftp,ssh
传输层----TCP/UDP协议
网络层----IP协议
网络接口层-----以太网帧协议

 2、协议

2.1、以太网帧协议

以太网帧大小必须在64-1518字节(不包含前导码和定界符),即包括目的地址(6B)、源地址(6B)、类型(2B)、数据、FCS(4B)在内,其中数据段大小在46-1500字节之间。

 

2.1.2、MAC地址(网卡编号)


1、MAC地址用来识别数据链路层中相连的节点;
2、长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
3、在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

2.1.3、类型2字节


当类型为0800时,正常发送IP数据报
当帧类型为0806时,会发送arp数据报-,根据IP获取对方的mac地址
当帧类型为0835时,会发送parp数据报,返回自己的mac地址

 arp数据报,根据IP获取对方的mac地址【比如我们从北京向广州的主机发送消息,要获取广州主机的MAC地址】

2.2、ARP报文格式

  1. 硬件类型:目标网卡的硬件类型,表明ARP报文可以在哪种类型的网络上传输。1表示以太网地址。
  2. 协议类型:硬件地址要映射的协议地址类型。映射IP地址时的值为0x0800.
  3. 硬件地址长度:即MAC地址的长度(以太网的MAC地址长度为6)。
  4. 协议地址长度:即IP地址的长度。
  5. 操作类型:指定本次ARP报文的类型。1:ARP请求报文;0:ARP响应报文。
  6. 源MAC地址:发送设备的MAC地址。
  7. 源IP地址:发送设备的IP地址。
  8. 目标MAC地址:接收设备的MAC地址。在ARP请求报文中,目标MAC地址未知,MAC字段的值为全0(即00-00-00-00-00-00)。
  9. 目标IP地址:接收设备的IP地址。

2.3、IP报文格式

2.3.1、IP协议的首部格式(IPV4)

组成部分

  1. 4位版本号:用来指定IP协议的版本,IPV4的版本号为4,前4位存储0100。IPV6的版本号是6,前4位存储0110
  2. 4位首部长度(Internet Header Length):表明IP首部的大小,单位是4个字节,length * 4的字节数,因为这一字段共4个比特位,所以这一字段最大值为2 ^ 4 - 1即15,所以IP首部最大长度为15 * 4即60字节;在默认情况下,该字段被设置为5,所以默认IP首部20字节。
  3. 8位服务类型:前三位表示优先度(已经弃用),第4位表示最低延迟、第5位表示最大吞吐、第6位表示最大可靠性、第7位表示最小代价,这四位互相冲突,只能选择一个。需要根据不同情况进行选择,如果是SSH/TELNET这类远端登录,那么就应该选择最小延时,如果是FTP类型的程序,则应该选择最大吞吐量;第8位是保留位,目前没有使用,必须填0。
  4. 16位总长度(Total Length):表示IP首部和后面携带的数据部分一共有多少个字节。该字段有16个比特位,因此IP数据报整体最大长度为65535个字节。
  5. 16位标识(ID):唯一地标识主机发送的报文,如果一份IP报文在数据链路层被分片,那么每一片的该字段应该都是相同值。帮助对端主机在接收后进行分片重组。
  6. 3位标志(Flag):第一位保留(保留的意思是现在不使用,未来如果需要的话再使用),必须填0;第二位用来指明是否可以分片,如果为0则可以分片,如果为1则不能分片。
  7. 13位片偏移(Fragment Offset):该字段表示分片相对于原始IP报文开始处的偏移量,其实就是表示当前分片在原报文中所处的位置,第一个分片对应值为0。由于该字段总共13个比特位,因此最多可以表示2 ^ 13即8192个相对位置。单位为8字节,所以最大可以表示8192 * 8 = 65536个字节的位置。
  8. (8位生存时间(Time To Live):数据报到达目的地的最大报文跳数(Hop,指网络中一个区间,IP数据包正是在网络中一个跳间被转发),一般为64,每次经过一个路由,TTL–,如果TTL == 0时还没到达目的地,那么这个报文就会被丢弃。这个字段主要是为了防止出现路由循环,数据包在一个循环中一直转发,浪费网络资源。
  9. 8位协议(Protocol):表示IP的上层是什么协议,我们熟知的TCP、UDP、ICMP等都是在IP上层的。
  10. 16位首部校验和(Header Checksum):使用CRC进行校验,鉴别IP首部是否收到损坏,如果损坏直接丢弃,它只校验IP头部,不校验下面的内容,因为内容部分的校验是上层传输层(TCP)需要考虑的,IP协议只要发现首部有问题就直接丢弃该报文。
  11. 32位源IP地址(Source Address):表示发送端的IP。
  12. 32位目的IP地址(Destination Address):表示接收端的IP。
  13. 选项字段(Options):不定长,最大可以到40个字节。

2.3.2、IP地址分类

IP地址由网络标识(网络地址)和主机标识(主机地址)两部分组成。
IP地址划分为五个级别,分别为A类、B类、C类、D类和E类(一直没有使用过),所以目前我们所能见到的IP地址只有A、B、C、D四类。划分的依据就是IP地址从第1位到第4位的比特位。

 2.4 、UDP报文格式

  1. 16位源端口(进程)
  2. 16位目的端口(进程)
  3. 16位UDP长度(数据长度)
  4. 16位UDP校验和(数据校验)

 2.5、TCP报文格式

  • 16位源端口(进程)
  • 16位目的端口(进程)
  • 32位序号(Seq)【用来表示A发送给B的数据报序号】
  • 32位确认序号(Ack)【客户端和服务器端都可以发送,Ack=Seq+1】
  • 4位首都长度:表示TCP头部有4个字节(32位),所以TCP头部最大长度为15*4=60
  • 6个标志位【每个标志位1bit,分别是 URG、ACK、PSH、RST、SYN、FIN】

        URG:紧急指针有效
        ACK:确认序号有效
        PSH:接收方应该尽快将这个报文交给应用层
        PST:重置连接
        SYN:建立一个连接
        FIN:断开一个连接

  • 16位滑动窗口(表示缓存存储空间的大小)

        传输数据的双方,如果一边传输的快,一边接收的慢。那么数据接收方会告诉传输方,自己 有一个缓存。传输方就会把数据放入缓存,当缓存满了,数据的传输方就会进入阻塞等待。

  • 16位校验和:检验数据是否一致
  • 16位紧急指针:标识哪部分数据是紧急数据

 2.6、ICMP报文格式

ICMP(Internet Control Message Protocol)是一种网络协议,它用于在IP网络中传递控制信息和错误消息。它通常与IP协议一起使用,IP协议负责发送和路由数据包,而ICMP协议负责检查网络是否可达、路由是否正确、主机是否可达等网络状态的反馈信息

 ICMP报文属于IP子协议,协议号为1。

2.6.1、ICMP首部格式

其中各字段的含义如下:

类型(Type):指定 ICMP 报文的类型,占 1 个字节。常见类型有:回显应答(Echo Reply:0)、回显请求(Echo Request:8)等。

代码(Code):指定 ICMP 报文的代码,占 1 个字节。用于进一步描述 ICMP 报文,与 Type 字段组合使用。

校验和(Checksum):校验和,用于检查 ICMP 报文是否有损坏,占 2 个字节。

由类型决定的4字节:根据类型不一样,4字节表达的意思不一样。

数据(Data):数据,可变长度。可以是任意数据,长度由具体的 ICMP 报文类型和代码决定。

 2.6.2、ICMP报文类型列表

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue报错‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

运行我的后台管理项目的时候报错:‘vue-cli-service’ 不是内部或外部命令,也不是可运行的程序或批处理文件。 查看自己package.json中是否有vue 或者vue-cli-service 查看自己项目目录下有没有node_module文件夹,如果有删除,然后…

06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别

为什么需要多线程 CPU、内存、IO之间的性能差异巨大多核心CPU的发展线程的本质是增加一个可以执行代码工人 多线程的优点 多个执行流,并行执行。(多个工人,干不一样的活) 多线程的缺点 上下文切换慢,切换上下文典型值…

Python Opencv实践 - 在图像上绘制图形

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png") print(img.shape)plt.imshow(img[:,:,::-1])#画直线 #cv.line(img,start,end,color,thickness) #参考资料:https://blog.csdn.ne…

复古游戏库管理器RomM

什么是 RomM ? RomM(代表 Rom Manager)是一个专注于复古游戏的游戏库管理器。通过 Web 浏览器管理和组织您的所有游戏。受 Jellyfin 的启发,允许您从现代界面管理所有游戏,同时使用 IGDB 元数据丰富它们。 RomM 支持的…

【算法挨揍日记】day02——双指针算法_快乐数、盛最多水的容器

202. 快乐数 202. 快乐数https://leetcode.cn/problems/happy-number/ 题目: 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个…

宋浩高等数学笔记(十一)曲线积分与曲面积分

个人认为同济高数乃至数学一中最烧脑的一章。。。重点在于计算方式的掌握,如果理解不了可以暂时不强求,背熟积分公式即可。此外本贴暂时忽略两类曲面积分之间的联系,以及高斯公式的相关内容,日后会尽快更新,争取高效率…

PHP 之房贷计算器、组合贷

一、等额本金 // (等额本金) //$loanAmount>贷款金额 //$loanPeriod>贷款年限 //$interestRate>贷款利息 function calculateEqualPrincipalPayment($loanAmount, $loanPeriod, $interestRate) {$monthlyPrincipal $loanAmount / ($loanPerio…

【数据结构】二叉树常见题目

文章目录 前言二叉树概念满二叉树完全二叉树二叉搜索树(二叉排序树)平衡⼆叉搜索树存储⽅式 二叉树OJ二叉树创建字符串二叉树的分层遍历1二叉树的分层遍历2给定一个二叉树, 找到该树中两个指定节点的最近公共祖先二叉树搜索树转换成排序双向链表二叉树展开为链表根据一棵树的前…

山东布谷科技直播系统源码热点分析:不同芯片实现高质量编码与渲染视频的GPU加速功能

在现代科技的迅猛发展下,直播系统源码平台被开发搭建出来,为人们的生活方式带来了很大的改变,直播系统源码平台的好友、短视频、直播、社区等功能让很多人越来越热衷于去在平台上刷视频、看直播、分享生活。用户的喜爱也督促了直播系统源码平…

nodejs+vue+elementui小区物业管理系统_78ahx

课题主要分为四大模块:即管理员模块,物业管理模块、业主模块和维修员模块,主要功能包括:个人中心、物业管理、业主管理、维修员管理、小区公告管理、小区信息管理、房产信息管理、车位信息管理、停车位管理、停车信息管理、缴费信…

Grafana技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》-附带监控服务器

阿丹: Prometheus技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》_一单成的博客-CSDN博客 在正确安装了Prometheus之后开始使用并安装Grafana作为Prometheus的仪表盘。 一、拉取镜像 搜索可拉取版本 docker search Grafana拉取镜像 docker pull gra…

RabbitMQ:可靠消息传递的强大消息中间件

消息中间件在现代分布式系统中起着关键作用,它们提供了一种可靠且高效的方法来进行异步通信和解耦。在这篇博客中,我们将重点介绍 RabbitMQ,一个广泛使用的开源消息中间件。我们将深入探讨 RabbitMQ 的特性、工作原理以及如何在应用程序中使用…

移动端APP测试常见面试题精析

现在面试测试职位,要求非常全面,那么APP测试一般需要哪些技术呢?下面总结了APP测试常见面试题: 1.Android四大组件? Activity:描述UI,并且处理用户与机器屏幕的交互。应用程序中,一个Activity就相当于手…

Python-OpenCV中的图像处理-霍夫变换

Python-OpenCV中的图像处理-霍夫变换 霍夫变换霍夫直线变换霍夫圆环变换 霍夫变换 霍夫(Hough)变换在检测各种形状的技术中非常流行,如果要检测的形状可以用数学表达式描述,就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使…

FinClip 支持小程序维度域名配置;桌面端体验活动进行中

FinClip 的使命是使您(业务专家和开发人员)能够通过小程序解决关键业务流程挑战,并完成数字化转型的相关操作。不妨让我们看看在本月的产品与市场发布亮点,看看是否有助于您实现目标。 产品方面的相关动向👇&#x1f…

springboot 设置自定义启动banner背景图 教程

springboot banner Spring Boot中的banner是在应用程序启动时显示的一个ASCII艺术字符或文本。它被用来给用户展示一些关于应用程序的信息,例如名称、版本号或者公司标志等。 使用Spring Boot的默认设置,如果项目中有一个名为“banner.txt”的文件放置…

体渲染原理及WebGL实现【Volume Rendering】

体渲染(Volume Rendering)是NeRF神经场辐射AI模型的基础,与传统渲染使用三角形来显示 3D 图形不同,体渲染使用其他方法,例如体积光线投射 (Volume Ray Casting)。本文介绍体渲染的原理并提供Three.js实现代码&#xff…

使用CST仿真软件完成单站雷达目标RCS仿真

第一步:新建模版 第二步:选择微波与射频/光学应用 第三步:选择雷达应用 第四步:选择单站雷达静态RCS 第五步:选择小目标工作流。(这里的小目标要求小于10倍波长,否则需要选大目标工作流&#x…

golang协程池库tunny实践

前言 线程池大家都听过,其主要解决的是线程频繁创建销毁带来的性能影响,控制线程数量。 go协程理论上支持百万协程并发,协程创建调度的消耗极低,但毕竟也是消耗对吧。 而且协程池可以做一些额外的功能,比如限制并发&…

[数据集][目标检测]道路坑洼目标检测数据集VOC格式1510张2类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1510 标注数量(xml文件个数):1510 标注类别数:2 标注类别名称:["keng","…