IP总结
- 网络层向上只提供无连接的、尽最大努力支付的数据报服务
- IP地址,32位,分为两部分,网络和主机标示
- IP地址分类:
- A类:0开头,1~8位为网络标示
- B类:10开头,1~16位为网络标示
- C类:110开头,1~24位为网络标示
- D类:1110开头,1~32位为网络标示(用于多播)
- IP地址和硬件地址:物理地址数据链路层和物理层使用的地址,IP地址是网络层及以上层使用的地址,是一种逻辑地址。使用IP地址的IP数据报交给数据链路层之后就被封装成MAC帧,MAC帧中源地址和目的地址都是硬件地址
- 地址解析协议ARP:根据IP地址找到相应硬件地址。ARP只是转换局域网中的IP地址到硬件地址
- 在每一个主机中存放有一个ARP高速缓存,里面有本局域网上各主机和路由器的IP地址到硬件的映射表,
- 当主机刚刚启动或者ARP表中没有相应IP地址时:在局域网中广播发送ARP请求分组,此局域网中所有主机的ARP进程都能收到此请求分组,当与某主机IP地址一致时响应,再将此记录写入高速缓存中
- 高速缓存中的每一项都要设置一个生存时间,硬件地址更新
- IP数据报格式:32位,固定部分20字节
- 版本:IPv4还是IPv6
- 协议:指出此数据报携带的数据使用的是哪种协议,以使目的主机IP层知道需要将数据交给那个处理过程
- 首部校验和:使用CRC校验码,只是校验首部部分,不包括数据
- 源地址,目的地址
- IP层转发流程:使用路由表,每一行对应一个网络(目的网络地址:下一条地址)
- IP数据报根据目的主机找到下一条路由器,间接交付
- 到达最后一个路由器时,向主机直接交付
- 分组转发算法:
- 根据首部中IP地址得到目的网络地址
- 若此路由器与网络直接相连,则直接交付
- 若路由表中有到达目的网络的路由,则间接交付
- 若路由表中有默认路由,则交付默认路由
- 报告分组转发错误
- 路由表:因特网中主机数大于路由器数量,属于效率考虑,主机不和连接在互联网上的路由器定期交换路由信息。在主机刚开始工作时,一般在路由表中先设置一个默认路由,不管要把数据报发送到哪里,都先直接发送到默认路由中,而这个默认路由知道每一个目的网络的最佳路径,如果到达某一个目的网络不需要经过默认路由,则将此信息告诉主机,在主机路由表中加上一条记录
- 划分子网:
- 地址空间利用率低,路由表过大,两级地址不够灵活(比如需要在其他地方新建子网)
- 划分方式:
- 将所属物理网络划分为若干个子网,但对外仍表现为一个网路
- 网络的主机号借用若干位作为子网号
- 发送IP数据报时仍然是根据目的网络号发送,在路由器收到数据报时,再按目的网络号和子网号找到子网交付
- 子网掩码:将源网络分为多个物理网络
- IP网络地址部分全为1,主机部分全为0
- 无分类编址CIDR:消除了网络IP地址类别及划分子网的概念,从三级地址改为两级:IP地址/网络前缀所占位数(后面为子网掩码位数)
- 网际控制报文协议ICMP:为了更高效转发IP数据报和提高支付成功机会。ICMP报文存在IP数据报的数据部分
- 分类:
- 差错报告报文:当交付出现问题(如终点不可达,时间超过,参数问题)
- 询问报文:回送请求回答,时间戳请求回答
- 应用举例:
- PING:测试两个主机的连通性,没有通过传输层。如果目的主机正常工作则发回回送请求报告
- traceroute:数据报中封装的是无法交付的UDP用户数据报。路途中每经过一个路由器,相应路由器就会向源主机发送时间超过的差错报告报文。就可以知道经过的路由信息。
- 分类:
- 路由选择协议:因特网一般采用动态的路由协议。因特网将整个互联网划分为多个较小的自治系统,因此路有选择协议划分为
- 内部网关协议:在一个自治系统内部使用的路有选择协议,RIP、OSPF
- 外部网关协议:不同自治系统之间
- 内部网关协议RIP工作原理:要求网络中每一个路由器都要维护一个从他自己到下一个目的网络的距离纪录,能直接到达的网络记为1,每经过一个路由器加1。
- 需要不断和其他的路由器交换信息,要求:
- 仅和相邻路由器交换信息
- 交换当前路由器所知道的全部信息
- 按固定时间间隔交换路由信息
- 路由表中的内容:目的网路,距离,下一条地址
- 距离向量算法:
- 将收到的相邻路由器X发送来的信息,下一条都改为X,距离加1
- 对于每一条信息,如果目的网络不存在原路由表中,加上
- 如果原路由表中对应目的主机行,下一跳是X,则更新
- 如果原路由表中对应目的主机行,下一跳是不X,比较距离若更小,则更新
- 需要不断和其他的路由器交换信息,要求:
- 内部网关协议OSPF
- 特点:
- 与RIP不同,将路由信息发送到所有路由器而不是相邻路由器
- 不采用UDP而是直接用IP数据报
- 特点:
- 外部网关协议BGP:
- 不使用内部网关协议原因:
- 因特网规模太大,自治系统之间选择困难
- 原则路由时不是选择最短路径,需要考虑网络性能,安全性
- 自治系统管理员需要为自治系统选择一个路由器作为‘发言人’,当需要交换路由信息时,先建立TCP连接,在此连接上建立会话。
- 不使用内部网关协议原因:
- 虚拟网络VPN
- 由于IP地址紧缺,在一个机构内部可以自行分配其IP地址,仅在机构内部有效,因特网中的路由器对目的地址是专用地址的数据报不能转发,因此内网中主机不能作为服务器
- 当一个机构不同部门在不同地点时,可以利用因特网作为专用网之间的通信载体,这样的网络称为虚拟专用网,通过因特网传输的数据需要加密,每个专用网需要有一个具有全球IP地址的路由器
- 网络地址转换NAT:
- 当专用网中的主机想要访问互联网中的主机,需要将本地地址转换为全球IP地址
- NAT地址转换表:源IP地址(本地地址)、目的主机地址(互联网IP地址)
- 可以利用运输层端口号,使得多个拥有本地地址的主机共用一个NAT路由器的全球IP地址,叫做NAPT网络地址与端口号转换
IP总结的更多相关文章
- Tcp/ip 报文解析
在编写网络程序时,常使用TCP协议.那么一个tcp包到底由哪些东西构成的呢?其实一个TCP包,首先需要通过IP协议承载,而IP报文,又需要通过以太网传送.下面我们来看看几种协议头的构成 一 .Ethe ...
- 网站定位之---根据IP获得区域
记得以前做一个培训机构网站时候需要定位,那时候用的搜狐的api,不是很精准. demo:https://github.com/dunitian/LoTCodeBase/tree/master/NetC ...
- 通过 floating IP 访问 VIP - 每天5分钟玩转 OpenStack(126)
前面我们是直接用 curl 测试 VIP,在更为真实的场景中通常会使用 floating IP 访问 VIP. 下面我们给 VIP 关联一个 floating IP,再进行测试. 访问 Project ...
- PHP获取客户端IP
/** * 获取客户端IP */ function getClientIp() { $ip = 'unknown'; $unknown = 'unknown'; if (isset($_SERVER[ ...
- 获取 dhcp IP 过程分析 - 每天5分钟玩转 OpenStack(91)
前面我们已经讨论了 DHCP agent 的配置以及 namespace 如何隔离 dnsmasq 服务,本节将以 cirros-vm1 为例分析获取 DHCP IP 的详细过程. 在创建 insta ...
- Java获取本机的IP与MAC地址
有些机器有许多虚拟的网卡,获取IP地址时会出现一些意外,所以需要一些验证: // 获取mac地址 public static String getMacAddress() { try { Enumer ...
- 根据ip判断返回城市名称查询当地天气
<?phpheader("content-type:text/html;charset=utf-8");date_default_timezone_set("Asi ...
- TCP/IP基础
TCP/IP 是用于因特网 (Internet) 的通信协议. 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述. 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的 ...
- CentOS:ECDSA host key "ip地址" for has changed and you have requested strict checking(转)
原文地址:http://blog.csdn.net/ausboyue/article/details/52775281 Linux SSH命令错误:ECDSA host key "ip地址& ...
- TCP/IP之TCP_NODELAY与TCP_CORK
TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法.这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagl ...
随机推荐
- 如何重置Magento管理用户、角色和资源的权限
场景1:所有的资源权限被设置为管理角色 步骤1:获取当前的管理角色详细信息 SELECT * FROM admin_role WHERE role_name = 'Administrators' /* ...
- thinkphp 图形处理
使用Think\Image类进行图像处理功能,支持Gd库和Imagick库,包括对GIf图像处理的支持. 实例化类库 $image = new \Think\Image(); 默认使用GD库进行图像操 ...
- 暴力——cf557c
//枚举高度[1,100000],>l的全部割掉,<l的砍掉最小的 #include<bits/stdc++.h> using namespace std; #define N ...
- express简易代理请求
var express = require('express') var app = express() var proxy = require('http-proxy-middleware') va ...
- Spring源码剖析4:懒加载的单例Bean获取过程分析
本文转自五月的仓颉 https://www.cnblogs.com/xrq730 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...
- 排序算法(三)堆排序及有界堆排序Java实现及分析
1.堆排序基数排序适用于大小有界的东西,除了他之外,还有一种你可能遇到的其它专用排序算法:有界堆排序.如果你在处理非常大的数据集,你想要得到前 10 个或者前k个元素,其中k远小于n,它是很有用的. ...
- docker swarm集群挂载宿主机目录
创建DOCKER集群,挂载宿主机目录src:宿主机目录,dst:容器目录 docker service create --name testrd --detach=false --mount type ...
- 【转】java使用java.lang.management监视和管理 Java 虚拟机
原文地址:https://blog.csdn.net/zhongweijian/article/details/7619383 软件包 java.lang.management 提供管理接口,用于监视 ...
- 一文看懂SATA和NVMe固态硬盘用起来有何区别?
本文摘自:https://www.sohu.com/a/203688929_615464 NVMe固态硬盘正在逐步扩张,而包括三星.东芝在内的大厂并没有停止SATA固态硬盘新品的研发.到底那种固态硬盘 ...
- Django框架(三)—— orm增删改查、Django生命周期
目录 orm增删改查.Django生命周期 一.orm介绍 二.orm增删改字段 三.Django生命周期 orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object ...