IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络层: IP协议 与 地址管理路由选择;链路层:etharp协议; mtu;DNS;ICMP; -> 正文阅读

[网络协议]网络层: IP协议 与 地址管理路由选择;链路层:etharp协议; mtu;DNS;ICMP;

网络层主要描述了通信两端的地址信息

ip协议解析(组成格式):

4位版本号: 用于标识协议版本(ipv4,ipv6);

4位报头长度: 以4字节为单位, ip协议最笑20字节最大60字节.

8位服务类型: 其中4位根据不同的应用层协议有不同的服务类型, 1位保留位, 另外3位已被弃用.

16位数据报长度: 限制了一个ip报文必须小于64KB(2^16,16位全1), 所以一个tcp报文的数据大小最大为64K-40, 一个udp报文数据最大为64k-28.

16位分片标识: 说这个就得先懂 链路层MTU:最大传输单元,限制了一个数据帧在网络层中最大传输大小.?如果一个报文长度处于网络层允许,但是mtu不允许,mtu<ip报文大小<64k; 则这个包会在网络层会被分片,就指的是,将一个大的报文分割成多个小的报文,每个分片封装一个ip报头进行传输,这些分片在对端主机上会进行分片重组,重组为原始的报文向上层交付。
既然要在对端进行分片重组,问题来了,哪个分片属于哪个原始报文呢?又在原始报文的什么位置呢?

3位分片标志:1位保留,1位禁止分片标志,1位分片结尾标志
13位分片偏移∶标识了当前分片在原始报文中的位置,是以8字节为单位的。如果数据是1,则偏移量实际上是第8字节处13个比特位表示最大数字是8192,而一个原始报文最大大小是64kb,以8字节为单位才能完整表示因此实际上每个分片(2^13*8=64kb)分片大小肯定都是8kb的整数倍(除了最后一个)

8位TTL: 报文在网络上的生命周期,最大数字是255,表示的是所能经过的路由器跳数每经过一个路由器就会-1

8位传输层协议: 数据到达对端会进行数据分用,也就是选择一个传输层协议进行数据解析,封装时的上层协议类型

16位校验和: 校验数据一致性。

32位源端-对端IP地址: 用于描述通信的两端主机

0~40字节选项数据: 比如路由跟踪时候记录的路由信息灯
?

地址管理与路由选择:

ip地址, 用于在网络中唯一标识一台主机. ipv4, uint32_t类型, 32个比特位所以有42亿9千多万个ipv4的IP地址. 所以显然是不够用的, 所以有了DHCP方案, 动态地址分配, 谁上网给谁分配.

通过对网络划分有不同的网络号, 同一个子网络中的主机都会分配到同一个网络号, IP地址就由网络号+主机号(一台主机在当前网络的标识)组成, 这样就能保证整个网络中的ip地址不会重复了

网络号的管理:

早期的网络划分方式:? 将所有的IP地址分为了五大类

A类网络: 最高1位固定是0, 接着7位网络号, 最后24位主机号. 所以A类网络网络号范围:0~127,其中IP地址范围:0.0.0.0~127.255.255.255(开头是0~127的是A类网络),总共有128(2^7)个A类网络其中每个网络中具有256*256*256( 1600w+, 2^24=256^3 )主机号.个主机号;? 例如0号网络的IP地址: 0.0.0.0~0.255.255.255. 所以用于组建超大型网络.

B类网络:?高2位固定10, 接着14位网络号, 后16位主机号;? 网络号范围:128.0~191.255(开头是128~191的是B类网络),其实IP地址范围:128.0.0.0~191.255.255.255,共有1.6w+(2^14)个B类网络其中每个网络中具有256*256( 64k, 2^16 )个主机号,例如128.0网络的IP地址: 128.0.0.0~128.0.255.255.?用于组建中型网络. (A类太多了容易浪费,所以很多公司占的都是B类网络)

C类网络:?高3位固定110, 接着21位网络号,? 后8位主机号;? 网络号范围:192.0.0~223.255.255(开头是192~223的是c类网络);? IP地址范围:192.0.0.0~223.255.255.255, 有2^21个c类网络其中每个网络具有256(2^8)个主机号比如192.0.0网络IP地址范围:192.0.0.0~192.0.0.255,?用于组建小型网络.

D/E类网络:特殊网络

当前的划分形式, 是在五类网络的基础上, 引入一个子网掩码字段可以对任意一类网络中的任意一个网络再进行划分为不同的子网(CIDR方案)

子网掩码也是一个uint32_t类型的数据, 但是其位上的1都是从高位开始连续的

子网掩码取反得到该一个子网最大的主机号, 即该子网主机号范围.

子网掩码和IP地址相与得到该IP地址的网络号, 所以子网掩码用于识别一个IP地址所属的网络.?

常见的例题:

有一个公司申请了一个C类网络192.168.2.0,公司有4个部门,这时候要将网络平均划分4个子网,请问,每个子网的主机号范围,以及网络号,以及子网掩码是多少?

: 一个c类网络具有256个主机号,平均划分4个子网,则每个子网具有64个主机号
子网掩码用于限定一个子网的主机号个数,取反得到的是最大主机号63(0~64), 所以四个子网的子网掩码都是255.255.255.192
第一个子网IP地址范围: 192.168.2.0~192.168.2.63 每个和子网掩码 255.255.255.192 相与都得到同一个所属网络号192.168.2.0

第二个子网IP地址范围: 192.168.2.64~192.168.2.127? 同理得网络号? 192.168.2.64

第三个子网IP地址范围: 192.168.2.128~192.168.2.191? 同理得网络号? 192.168.2.128

第四个子网IP地址范围: 192.168.2.192~192.168.2.255? 同理得网络号? 192.168.2.192

所以其实每个子网中主机号为0的IP地址实际上就是这个子网的网络号。

这题就是说, 用255.255.255.192子网掩码可以将公司的192.168.2.这个c类网络平均分为4个子网, 每个子网做多可以有64个主机(256/4), 且可以得到每个子网的网络号.

一个子网中有两个地址是不能分配给主机的:
主机号全为0的地址: 实际上就是网络号,是网络的标识 (比如上边每个子网的左区间: 192.168.2.0 , 192.168.2.64 , ....)
主机号全为1的地址: 即局域网的广播地址, (比如上边的右区间: 192.168.2.63 ...)? udp相较于tcp多一个功能: 局域网广播,将数据发送给局域网广播地址, 表示将数据发送给了局域网中的所有主机.

特殊lP地址:
0.0.0.0: 用于识别本机上的所有IP地址,通常用于服务器的绑定监听地址

255.255.255.255: 全网广播地址,用于DHCP请求的时候目标主机地址.(DHCP动态申请ip地址, 一个主机重新连接到网络上需要向路由器给自己分配地址,由于是重新连接的,是不知道任意路由器的地址的, 所以需要全网广播.)

127.0.0.1: 127网段都是用于本地回环,其中127.0.0.1是最为典型的虚拟回环网卡地址, 用于实现本地网络回环测试.
?

在地址管理中, 光有DHCP动态分配是不够的, IP地址依然不够分, 因此还有关键的技术:

NAT/NAPT:

网络地址转换技术, 用于组建私网, 对于私网中向外通信的数据, 将其源端私网IP地址进行地址替换, 替换为对外的公网IP地址.并且建立映射关系,以便接受回复

NAPT相比NAT多了个端口映射功能

?比如该网络中1号主机想和3号主机聊qq, 一号主机的包在经过所在路由器后源端地址会转变为路由器对外的地址23.23.23.23, 源端端口也会发生变化建立了某个端口对应某个私网内的主机的映射.

内网穿透: 基于napt的映射关系,在映射能保存一段时间的情况下,将一段的对外地址端口告诉另一端,另一端就直接发送数据给指定的地址和端口就可以了,就不再需要每次都将数据发送给中转服务器(qq聊天中请求服务器就是中转服务器). 而对应的路由器收到数据就会根据映射关系逐层往内发送到对应的内网主机上

组件私网后, 不同私网内主机的ip地址可以重复,这样就节省了大量IP地址, 私网内的主机对外是不可见的, 从侧面加强了私网的网络保护, 但是有个缺点是: 不同私网间的主机无法直接通信.

例如我的云备份项目服务端是使用虚拟机的, 只有我自己的主机能访问别人不能访问, 因为虚拟机是自己电脑上的虚拟私网主机, 虚拟机对外的通信会转换为自己主机的地址上网.

不同私网IP地址虽然可以重复, 但是不能与公网IP地址冲突, RFC文档规定: 组建私网只能用10.*.*.* (大型私网, 比如校园网), 172.16.*.* ~172.31(中型私网),? 192.168.*.*(小型私网)

路由选择:

路由选择决定了一条数据从源端到对端的路径

在每一台节点设备上都有一个路由表, 路由表上主要有:
Destination目标网络号 ????????Gateway网关地址 ????????Genmask子网掩码????????lface当前设备连接对应网络的网卡

一个路由器拿到一个数据后,会取出目标IP地址,然后在自己所有的路由表中进行查看,
逐个与每个路由表中的网络信息进行比对: 与对应网络子网掩码相与, 相与结果与对应网络的网络号相比, 一样则数据目标主属于此网络路由器发送; 不一样则对比下一个路由表项; 若所有路由表项都没有则将数据转发给自己的网关设备(另一个另一层的路由器)

不同的私网地址和网络号可以重复使用,但是相邻的私网之间,不能具有相同的网络号
比如路由器组建的私网,与自己所在的私网网络号相同,(会造成路由器的路由表中信息冲突)

互联网上的路由器,通常不仅仅包含有自己相连的网络的路由信息,实际上有很多层网络的路由表信息因为网络上路由器会多层广播自己的路由表.

DNS域名解析服务:

早期网络还不发达的时候,访问的服务器不多,因此记忆常用服务器ip地址,难度不高,但是随着网络的发展,我们需要的网络服务越来越多,作为一个人类,想要记住很多很多的服务器IP地址就不容易。这时候就有个大佬,就干了一件事,给自己电脑上的一个文本文档中记录了一个映射关系表(域名&服务器IP地址). 域名∶就是服务器的一个别名,是一个便于记忆的字符串(不区分大小写), 然后写了一个程序,当访问某个服务器的时候,输入域名,这个程序会把域名解析成为服务器的地址后,进行访问因为这个方式简单有效,因此就有组织搭建了域名服务器,专门用于域名解析。但全世界几十亿的访问量,一组服务器压力太大,因此就对域名服务器和要管理的域名进行了分类,分布式管理
域名服务器的分类: 根域名服务器,顶级/一级域名服务器,二级域名服务器,三级域名服务器...

根域名服务器: 管理一部分域名,最主要是管理顶级域名服务器的地址,根域名服务器在全世界只有13组

顶级域名服务器,二级域名服务器管理对应级别的域名解析服务

域名的分类: 顶级/一级域名,二级域名,三级域名...

顶级域名: .com, .org , .gov, ... .cn , .en , .jp , .us....二级域名: .baidu.com , .qq.com.....三级域名: mp.csdn.net.....

典型面试题:

浏览器中输入url,回车后发生了什么?

1.域名解析:?查看浏览器缓存, 浏览器缓存有没有对应的域名IP地址映射则到本地hosts文件查找再没有则请求本地域名服务器(大部分域名都在本地域名服务器缓存有).本地域名服务器再没有则请求根域名服务器, 根域名服务器再查不到会返回对应的顶级域名服务器, 然后再请求顶级域名服务器, 再找不到返回对应的二级域名服务器, 在请求二级域名服务器. 再找不到就请求失败了

2.搭建tcp客户端,连接服务器

3.连接成功后根据http协议格式组织http请求数据发送给服务器

4.等待响应,得到响应根据http协议格式解析响应,根据正文类型决定正文的处理方式

ICMP协议:

icmp主要用于网络探测目标主机是否可答 , 发送icmp请求,要求对端进行响应

ssh协议用的是22号端口,telnet协议用的是23号端口,ping用的是多少?

ping是一个工具,基于icmp协议实现,而icmp协议是一个网络层协议,所以并没有涉及到传输层,因此不用端口

链路层:

数据链路层负责相邻设备之间的数据帧传输
一个数据从一段主机发出,到达另一端主机上,其中传输层描述了端口表示哪两个进程处理,网络层描述了IP地址,也就是通信两端主机,但是数据无法直接从一端到达另一端,实际传输是通过了很多相邻节点设备之间的传输完成的, 这就是链路层的工作

eth以太网协议:

eth以太网帧数据格式:

我们发送的每一条数据到达以太网后都会封装成以太网帧, 前面加上对端mac地址和源端mac地址和所用协议, 接着就是ip报文, 最后加上校验和.

mac地址:﹑物理硬件地址,是一个网卡在出厂的时候设定的地址(在以前都是不可更改的,现在倒是可以)

以太网协议负责的是相邻链路之间的数据传输(不断地相邻就可以到达目的主机啦)

那么是如何知道对端的mac地址的呢? 这就要说到:

APR地址解析协议:

arp地址解析过程:?

1.组织arp请求(填入自己的mac-ip地址信息,以及指定相邻设备的IP地址信息)

2.将arp请求广播到局域网中,局域网中其他设备收到arp请求进行解析,发现目标IP地址不是自己,则丢弃请求

3.若arp请求中的目标IP地址就是自己地址,则组织arp应答将自己的mac地址填充,进行响应

4.两端都会将对应的mac-ip映射信息,缓存起来-arp缓存表,每隔一段时间〈20~30分钟)重新请求进行更新

arp缓存为什么只有很短的一段时间?
因为先的IP地址分配方式都是动态地址分配,有可能过上一端时间有些主机的IP地址就发生了改

arp欺骗攻击
arp的机制: 假设你去相亲,相亲对象叫小红,但是你不知道小红长什么样子,只知道在饭店里周围,想找到小红,就得逐个去问你是不是小红,小红就会回答你我就是,然后单独私聊。

这就有了arp欺骗攻击:? 你问谁谁谁你是不是小红,这个人可能是小黑,但是她伪装自己说自己就是小红.? 攻击者,伪造网关IP地址,向局域网中广播大量的arp响应,覆盖掉其他主机的arp缓存表中的信息,其他主机就会认为他就是网关(中间者), 这样双方在聊什么攻击者就都知道了
解决方案: arp防火墙,路由器设置静态的IP地址-MAC地址映射表
?

mtu最大传输单元:

mtu限制了一个数据帧的大小, 上面eth以太网帧中数据的大小就是mtu

mtu对于上层传输的影响:

tcp: tcp传输会在传输层,协商一个mss-最大数据段大小,然后每次从发送缓冲区中取出不大于mss大小的数据进行封装传输. 而mss就是根据mtu计算而得到的: mss = mtu–最小ip报头长度–最小tcp报头长度 = mtu - 40
以太网mtu默认大小1500,则tcp最大数据段大小通常都是1460
tcp在网络层不会进行数据分片,因为tcp以mss进行传输数据,因此我们说tcp会在传输层自动进行数据分段

udp: udp通信没有mss协商的说法,只要最大数据长度小于64k-28就可以传输,但是如果大于mtu就会在网络层进行数据分片然而数据一旦分片,在对端主机上就会进行分片重组,问题来了,只要有任意一个分片出现问题,这个原始报文就不一致了,就会被丢弃掉,而udp又是不可靠传输,数据就没了
基于这么一个原因,我们要尽可能的去减少udp传输时的分片,因此需要程序员在应用层去考虑udp的mss = mtu-28因为以太网默认mtu是1500,因此udp我们sendto发送的数据大小最大,尽量不要超过1472

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:30:49  更:2022-03-21 21:32:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:53:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码