| |
|
开发:
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报头进行传输,这些分片在对端主机上会进行分片重组,重组为原始的报文向上层交付。 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个主机号 第二个子网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), 且可以得到每个子网的网络号. 一个子网中有两个地址是不能分配给主机的: 特殊lP地址: 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.*.*(小型私网) 路由选择:路由选择决定了一条数据从源端到对端的路径 在每一台节点设备上都有一个路由表, 路由表上主要有: 一个路由器拿到一个数据后,会取出目标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协议是一个网络层协议,所以并没有涉及到传输层,因此不用端口 链路层:数据链路层负责相邻设备之间的数据帧传输 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缓存为什么只有很短的一段时间? arp欺骗攻击 这就有了arp欺骗攻击:? 你问谁谁谁你是不是小红,这个人可能是小黑,但是她伪装自己说自己就是小红.? 攻击者,伪造网关IP地址,向局域网中广播大量的arp响应,覆盖掉其他主机的arp缓存表中的信息,其他主机就会认为他就是网关(中间者), 这样双方在聊什么攻击者就都知道了 mtu最大传输单元:mtu限制了一个数据帧的大小, 上面eth以太网帧中数据的大小就是mtu mtu对于上层传输的影响: tcp: tcp传输会在传输层,协商一个mss-最大数据段大小,然后每次从发送缓冲区中取出不大于mss大小的数据进行封装传输. 而mss就是根据mtu计算而得到的: mss = mtu–最小ip报头长度–最小tcp报头长度 = mtu - 40 udp: udp通信没有mss协商的说法,只要最大数据长度小于64k-28就可以传输,但是如果大于mtu就会在网络层进行数据分片然而数据一旦分片,在对端主机上就会进行分片重组,问题来了,只要有任意一个分片出现问题,这个原始报文就不一致了,就会被丢弃掉,而udp又是不可靠传输,数据就没了 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |