目录
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: 二级域名, 公司名
www: 只是一种习惯用法
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一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程
序, 需要部署在服务器上