| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 网络协议二 -> 正文阅读 |
|
[系统运维]网络协议二 |
目录 IP 网段划分 路由 数据链路层 ARP协议 NAT技术 代理服务器 IP ip = 网络号 + 主机号 例如:们要去北京旅游,我们要先到北京车站或机场,然后再坐其它交通工具去具体景点,而网络 号可以帮助我们找到车站或机场,主机号则能帮助我们找到具体的景点位置 tcp与ip tcp负责解决决策问题,ip负责解决执行问题 ip提供了一种能力,较大概率将数据从A主机跨网络传送给主机B的能力! 例如:你们学校有一次考试,所有人都没有考到满分,而你是非常有实力的,即有较大概率能考到 满分,而你老爹在你们学校权力很大,所以可以让你重考多次,你觉得太吵,你老爹给你单独安排 一个空教室让你考试,而你只需负责考试考到满分就行!这就是你爹在做决策,而你在做执行! ip报头 4位首部长度和tcp是一样的,报头标准长度都是20字节,所以一般是填的值也为5,只是在细节上 有所不同,所以如何分离与封装与tcp的做法没有区别! 如何分用(向上交付) ip通过16位总长度,来解决自身的粘包问题,将一个完整的报文交给上层,8位协议则是由哪个填 的,就交给谁,udp填的,就交给udp,tcp填的,就交给tcp! 4位版本号(version): 指定IP协议的版本,对于IPv4来说,就是4! 8位服务类型(Type Of Service): 3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置 为0),4位TOS分别表示: 最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只 能选择一个! 16位校验和 保证报文的字段和数据正确! 8位生存时间 例如:假如你写的一段程序有bug,那数据包就可能游离在网络中,每跳一圈,就会消耗一点资 源,所以就有了8位生存时间,让它有一定的生命周期,每跳一次,就--,减到为0时,就被丢弃! 分片 为什么要分片? 因为数据链路层一次可以往网络里发送的数据大小是有限的,即MTU:1500字节!如同寄快递 时,你的包裹太大或太重的时候,就会分为几个包裹发 为什么要在网络层里进行分片? 因为分片后的每个报文,都要在网络中流通,所以都要携带ip的,才能知道发去哪儿!而在现实生 活中,假设寄的是电脑,每个包裹都要贴同样的目的地以及电话等,同时,这个拆分也必须自己 拆,要不然快递公司东西拆了,最后无法组装好,就成了快递公司的责任了! 组合则由对端的网络层IP协议来做! 如何分片? 如下图,3400是传输层给网络层的报文大小,而拆分的每个报文都必须有报头 注意:分片的过程传输层不知道,也不需要知道! 传输层知道了怎么办? 如下图,是3个包裹,如果丢失了一个包裹,本来给传输层的是3400,却变成了2960,那传输层只 能将剩下的两个报文丢弃,然后重新再发!所以分片会提高我们丢包的风险!!! 注意:ip分片不是大部分情况!!! 如果不想分片,则传输层说了算,因为它是负责决策的!通过与对端的传输层协商单个报文的大 小,而对于udp,则需要分片时,只能分片! 一般而言,我们为了减少分片,一般是要tcp控制自己的单个报文的大小的! 16位标识 没有分片,不同报文,标识符是不一样的,如果分片,标识符是一样的!这样能让同一个报文的不 同部分聚合在一起!!! 13位片偏移 报文的有效载荷,在原始报文的有效载荷中的偏移量! 如何组合? 按照13片位偏移,将聚在一起的报文,按升序排序即可! 如何知道,报文有没有丢失? 如果是头部丢了,那组合后的报文,头部的13位片偏移就不会为0 如果是中间部分丢了,遍历组合后的报文,如果当前报文的13位偏移加上自身的有效载荷不等于下 一个报文的13位片偏移,那就知道这两者中间的报文丢了! 如果是尾部丢了呢? 就用到了3位标志了,3位标志:1位保留,1位表示禁止分片,1位表示更多报文,为1:后面还有 报文了,为0:后面没有报文了! 如果最后一个报文的"更多报文"为1,就表示尾部丢了,否则就没有丢! 接收端如何得知报文是独立的,还是一个分片? 通过更多分片和片偏移可以判断,如下图 网段划分 网络号: 保证相互连接的两个网段具有不同的标识 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号 DHCP:能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便 路由器都带有DHCP功能,而你在连接WiFi输入密码时,就是在与路由器交流! 查找的本质,其实是排除!!! 如下图,计算机系1班2号学生捡到了一个钱包,而它不认识这个人,就在群里@计算机院学生会主 席,让它找一下这个人,计算机院主席只知道这个人不是自己院的,所以就在群里@校学生会主?? 席,而校学生会主席知道这个人是经管院的,就在群里@经管院的主席,然后经管院的主席就在群 里@李四,李四一看到消息,就打电话找到捡到钱包的人,拿回钱包! 在查找的路上的时候,只关心前面的学院和专业,当到达目标群(经管院),才关心后面的班级个人 信息!即在查找的时候,是通过划分不同的群,来进行查找的,本质就是一次可以排除1个或多个 群!!! 网络划分本质,是为了提高查找效率,减少查找的难度,便于组网!!! 对于全球,就分为了下面五类,不同国家根据需求,来申请响应的类,像中国,印度这样人口多的 国家就可以申请A类,而像日本,英国则可以申请B类 局限性:例如大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量 地址,因为A类主机号很多,但实际拥有的主机数量和可以用的ip地址的数量相差很大,就会导致 ip地址大量的浪费! 为了解决上面方案的局限性,所以提出了新的划分方案, 称为CIDR,引入一个额外的子网掩码来区 分网络号和主机号,如下图,以B类网络为例,将主机号最左边一位不用,子网掩码这一位(包括自 身这一位)左边全部为1,右边全部为0,然后与ip地址按位与,为1则拿去当ip地址使用,为0则去 组件新的子网! 网络号 = ip地址 & 子网掩码,如下图: ip地址的数量限制 IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有2的32次方 个IP地址, 大概是43亿左右,?而 TCP/IP协议规定, 每个主机都需要有一个IP地址,CIDR在一定程度上缓解了IP地址不够用的问题! 三种方式解决: 1、动态分配IP地址: 只给接入网络的设备分配IP地址 2、NAT技术 3、IPv6,与IPv4互不相干,彼此并不兼容,?IPv6用16字节128位来表示一个IP地址,还没普及 私有IP地址和公网IP地址 如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用 任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址 10.*,前8位是网络号,共16,777,216个地址 172.16.到172.31.,前12位是网络号,共1,048,576个地址 192.168.*,前16位是网络号,共65,536个地址 包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP) 私有IP地址是可以重复的,例如:李四和王五分别连接自己家的网络,ip地址是可以相同的,因为 两人所用的是不同的局域网 路由 路由的过程,就是这样一跳一跳?"问路" 的过程 路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是 发送接口,Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址 是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经 路由器转发 当到达某个节点时,会拿目的ip与当前节点的路由表中的第二行的子网掩码开始按位与,如果符合 就从ech0接口发送出去,每一行都不符合就发到default路由器,再根据它的路由表决定下一跳地 址! IP最大的意义,在于路径选择!!! 为什么要把数据包由F->G? 是由目的ip决定的!路由查找完成 如何把数据包由F->G? 由数据链路层来解决!? 凡是能够跳转到下一跳,一定是直接相连的节点!而直接相连的节点,一定是在同一个局域网中! 所以数据包从一节点到另一节点的问题,就成了局域网通信的问题!而同一局域网,两个节点是能 够直接通信的!用以太网或令牌环网来完成! 数据链路层 "以太网" 不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了一些 物理层的内容,例如: 规定了网络拓扑结构,访问控制方式,传输速率等,和以太网并列的还有令 牌环网, 无线LAN等 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的? 帧协议类型字段有三种值,分别对应IP、ARP、RARP 帧末尾是CRC校验码? 如何分离报头和有效载荷(封装)? 通过去掉定长的报头,以及CRC,封装则添加! 如何决定将自己的有效载荷交付给上一层? 通过报头中的类型来决定交给哪一个帧协议类型字段! 如下图,就是一个Mac地址!mac地址通常是唯一的,虚拟机中的mac地址不是真实的mac地址, 可能会冲突;也有些网卡支持用户配置Mac地址 在一个局域网内,一个报文会逐一去查找节点,每经过一节点,就会与该节点的网络协议栈的数据 链路层对比,不符合的话就会被节点丢弃,符合的话就会解包,重新封装,然后前往另一个局域网 对比IP与Mac IP地址描述的是路途总体的 起点 和 终点 MAC地址描述的是路途上的每一个区间的起点和终点 认识MTU 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU 不同的数据链路层标准的MTU是不同的 TCP的单个数据报的最大消息长度,称为MSS,在建立连接的时候,双方会进行MSS协商,双方 在发送SYN的时候会在TCP头部写入自己能支持的MSS值,会选择两者较小的MSS作为最终MSS MSS的值就是在TCP首部的40字节变长选项中(kind=2) ARP协议 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则 直接丢弃!!! 源主机如何知道局域网中的目标主机的Mac地址?即需要有在一个局域网发现指定一台主机的Mac 地址的能力!所以就有了ARP协议! 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20 分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主 机的硬件地址 ARP数据包的格式 硬件类型指链路层网络类型,1为以太网 协议类型指要转换的地址类型,0x0800为IP地址 硬件地址长度对于以太网地址为6字节 协议地址长度对于和IP地址为4字节 op字段为1表示ARP请求,op字段为2表示ARP应答 ARP工作流程 虽然源主机不知道目标主机的Mac地址,但知道它的ip地址!所以源主机可以发起ARP请求,询问 ip地址为目标主机的ip地址的Mac地址,并在局域网内广播!目标主机收到ARP请求,发现与本机 相符合,就会回复一个ARP应答,将自己的Mac地址放入其中!!! 如下图,就是ARP协议的一个工作流程,FFF...表示广播! 任何局域网中的主机,可能向别人发起ARP,也可能被别人发起ARP,即主机可能收到的是ARP 请求,也可能是ARP应答,所以收到之后首先看的就是op,判断是哪一种!!! DNS DNS是一整套从域名映射到IP的系统 域名简介 例如:www.baidu.com com: 一级域名,表示这是一个企业域名,同级的还有 "net"(网络提供商),"org"(非盈利组织) 等 baidu: 二级域名, 公司名 ww: 只是一种习惯用法 ICMP协议 ICMP协议是一个网络层协议,基于IP协议工作的,但是它并不是传输层的功能 ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6 主要功能 确认IP包是否成功到达目标地址 通知在发送过程中IP包被丢弃的原因 ping命令 ping 的是域名,而不是url! 一个域名可以通过DNS解析成IP地址 ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存 周期) ping命令基于ICMP,是在网络层,而端口号,是传输层的内容 NAT技术 NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能,是一种能将私有IP和全局 IP相互转化的技术方法,对于服务器返回的数据中,目的IP都是相同的,所以使用IP+port来建立 这个关联关系,如下图 这种关联关系也是由NAT路由器自动维护的。例如在TCP的情况下,建立连接时,就会生成这个表 项;在断开连接后,就会删除这个表项 NAT技术的缺陷 无法从NAT外部向内部服务器建立连接 装换表的生成和销毁都需要额外开销 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开 代理服务器 如下图,代理服务器的作用有三点 1、身份认证 2、加速内网服务 3、可以对访问内网的请求进行筛查 如下图,代理服务器不做业务处理,仅仅做业务转发,根据后端每台机器的负载清空,进行业务转 发,较为均衡的将请求打散到每台主机上——负载均衡,同时也是为了安全! NAT与代理服务器的区别 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题;代理服务器则是更贴近具体 应用,比如迅雷这样的加速器 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换,代理服务器往往工作在应用层 从使用范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网 做, 也可以跨网 从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程 序,?需要部署在服务器上 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/28 3:04:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |