文章目录
- 网络层
-
- IP报头
- IP分片
- 网段划分
- 私有IP地址和公网IP地址
- 路由
- 数据链路层
-
- 认识以太网
- 以太网帧格式
- MAC地址和IP地址
- ARP 数据包格式
- 其他重要协议或技术
-
- DNS
- ICMP协议
- ping命令
- NAT技术
- 代理服务器
- 操作系统与网络关系![在这里插入图片描述](https://img-blog.csdnimg.cn/25f10f29c3274b159e667d8e8375a487.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATHVtb3NK,size_20,color_FFFFFF,t_70,g_se,x_16)
HTTP解决:构建与解析request && response ->recieve && send
TCP解决:可靠性,效率,什么时候发送,发多少,怎么发。
IP:端到端(主机A到B之间)、点到点(主机A到下一跳路由器),将数据经过路径选择,送达到对方主机的过程。
网络层
在复杂的网络环境中确定一个合适的路径。
路由查找的基本过程:是先找到目的网络,再找到目的主机。
找到目标主机所在的局域网,然后在局域网内部进行报文转发,找到目标主机。
主机:配有IP地址,能够判断报文是发给别人的还是发给自己的
路由器:即配有IP地址, 又能进行路由控制
节点:主机和路由器的统称
真正进行网络传输的是IP,TCP只是为IP提供策略服务。
IP给通信双方提供了一种能力——将数据从A主机跨网络送到B主机的能力。
TCP信息是会裹挟到IP里的,TCP本身提供的是一些策略性的东西,真正在网络上跑的是IP报文。
IP为我们提供了这种能力,但有能力不一定能做到,有可能出现IP报文丢包等情况,这时TCP帮助重传。曾经的超时重传可以理解为,重传的是一个一个的IP报文,在TCP里面重传的是一部分数据,数据在重传时要向下层交付,向下层交付就要裹上IP的报头,所以认为重传的是IP报文。
IP报文不怕丢失,因为一旦丢失上层TCP必会知道。
路由器是工作在网络层的,当一个硬件工作在哪一层时,指的是它工作在当前的层及其以下的层。
IP地址在公网(在整个对外开放的互联网中)当中标识互联网中唯一一台主机。
IP报头
- 4位版本号:指定IP协议的版本,对于IPv4来说,就是4。
- 4位头部长度:IP头部的长度是多少个32bit, 也就是 length*4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节。
- 8位服务类型:3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个。
- 16位总长度:IP数据报整体占的字节数。
- 16位标识:唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了, 那么每一个片里面的这个ID都是相同的。
- 3位标志字段:第一位保留,第二位置为1,表示禁止分片, 这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",0的时候表示最后一个分片。
- 13位分片偏移:是分片相对于原始IP报文开始处的偏移。
- 8位生存时间:数据报到达目的地的最大报文跳数。 一般是64,每次经过一个路由就-1,一直减到0还没到达,就被丢弃了。主要是用来防止出现路由循环。如果没有该字段,会导致网络中充满大量的,短期之内不会消散的游离报文。
- 8位协议:表示上层协议的类型。
- 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏。
- 32位源地址和32位目标地址:表示发送端和接收端。
IP分片
因为MAC地址在底层的数据包转发过程中有一个最大长度的要求,当上层的IP报文向下层MAC帧交付的时候,如果超过了MTU,最终就要让IP进行分片。
MTU= IP报头+有效载荷
-
比如 (按标准报头)
MTU = 1500字节
IP要向MAC传3000字节
3000 = 20(报头)+ 2980(有效载荷)
如果分成两片:20+1480 20+1480
1480+1480 = 2960 != 2980 ,因此是少传了20字节
因此应该分成三片——20+1480 20+1480 20+20
只要一分片,就要考虑组装的问题
TCP并不知道IP分片了,只有IP自己知道,TCP给了IP一个报文,不管IP分了几片,都要在对端接收时接收一个IP报文,因为序号和确认序号只有一个,发送端向下交付时是一个,那么传到接收端,向上交付时也必须是完整的一个。
TCP也不需要知道IP分片了,IP要做到分片和组装对TCP是透明的。
-
要怎么组装?
在接收端把那些经过分片的报文挑出来
把属于同一组的归类起来
把同一组的所有分片再按顺序组装起来。
3位标志字段:是否分了片(1位)
16位标识:区分是哪个主机给我发的分片
13位片偏移:根据片偏移进行排序,可以把那些分片按顺序组装起来
倘若有丢失的报文,可以直接确定丢失的是哪一个。
但只要丢了一个,TCP会认为整个都丢了,因此会把整个报文全都重传。
-
怎么判断接收的是分了片的报文?
分片到达结尾:3位标志字段的最后一位表示着是否到达了结尾(结束标记)
只要分了片,除了第一个分片,剩下所有分片的片偏移都不为0,且第一个分片的分片标志位一定是1。只要满足这两个条件的任何一个,就是分片。
网段划分
IP 地址可以分为五类
这种划分方案具有局限性,大多数组织都会申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址。因此提出了新的划分方案,叫做CIDR。
引入一个额外的子网掩码来区分网络号和主机号,子网掩码也是一个32位的正整数,将IP地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号。网络号和主机号的划分与这个IP地址是A类、B类还是C类无关。
IP地址和子网掩码有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68,子网掩码的高24位是1,也就是255.255.255。
特殊的IP地址
将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。
将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
127.*的IP地址用于本机环回测试,通常是127.0.0.1
CIDR在一定程度上缓解了IP地址不够用的问题,提高了利用率,减少了浪费,但是IP地址的绝对上限并没有增加。
私有IP地址和公网IP地址
IP被分为,私有IP地址和公网IP地址。
私有IP地址:这个IP地址是绝对不会出现在公网当中的,只会在私网当中被单独使用。
- 私网IP是不允许出现在公网当中的,那局域网的主机怎么和公网的服务器进行通信?
子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP。这种技术称为NAT,网络地址转换。
一个路由器可以配置两个IP地址,一个是WAN口IP(对内),一个是LAN口IP(对外)
NAT可以解决IP地址不足的问题。
路由
分为两个阶段:通过查找路由表找到目的网络;根据目标网络找到目标主机的过程。
路由的过程,就是这样一跳一跳"问路" 的过程.
所谓 “一跳” 就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。
数据链路层
认识以太网
数据包在路径当中究竟是怎么转的?
IP解决的是从主机A跨网络经过路径选择到主机B的问题,跨网络前提还是得路由选择一跳一跳的走,这个过程是一个宏观的抽象的过程,具体真正办事的还得从底层的协议去做,这种底层保证两个主机通信的协议叫做以太网协议。
在同一网段进行通信的协议叫做以太网,以太网所在的层为数据链路层。
以太网通信当中,任何一个时刻,只允许有一个主机向另一台主机进行数据通信。
局域网的资源是大家共享的,想占有这份资源的计算机很多,因此局域网可以被称为多个主机之间的临界资源,这就出现了局域网的争用问题。一旦发送碰撞,就要触发碰撞避免算法。整个局域网可以称之为一个碰撞域,为避免发生碰撞,每一台主机都要在发消息前进行冲突检测,检测冲突,冲突避免。
- 交换机:工作在数据链路层
- 作用:划分碰撞域,减少碰撞的概率;转发数据帧。
以太网帧格式
- 那么,当一个主机和其他主机进行通信时,如何知道局域网内其他主机的MAC地址呢?
ARP协议:在局域网内有效,通过某种地址找另一种地址,在数据链路层。
广播的过程叫做ARP请求,而对应主机发出响应叫做ARP应答。
MAC地址是一直在变的,IP地址是一直不变的,所以要先把IP地址转成MAC地址。先广播,广播的时候目的MAC地址填全1,源MAC地址填本机,MAC帧内部带有ARP协议,里面一定包含目的IP地址,所有主机都拿到这个数据帧,都处理,因此都向上交付,因为是广播发送,所以其他主机都认为是发给自己的,于是会回复给发消息主机一个响应,该响应会填上自己的MAC地址。
MAC地址和IP地址
IP地址描述的是路途总体的起点和终点。
MAC地址描述的是路途上的每一个区间的起点和终点。
MAC地址只能在局域网内使用的根本原因:IP报文跨网络经过路由器,重新进行解包和封包,因此采用的接口是会变化的,所以MAC地址就有可能发生变化。一个路由器至少有两个接口,从A口进B口出,MAC地址一定会发生变化。
ARP 数据包格式
注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
硬件类型指链路层网络类型,1为以太网;
协议类型指要转换的地址类型,0x0800为IP地址;
硬件地址长度对于以太网地址为6字节;
协议地址长度对于和IP地址为4字节;
op字段为1表示ARP请求,op字段为2表示ARP应答
- 当主机A想要给主机B发消息时,如何通过ARP让主机A知道主机B的mac地址?
其中,op字段为1表请求,为2表响应。
所有主机在接收到A发来的ARP请求后,首先分离MAC帧,都向上交付到ARP协议层(属于MAC协议的一部分),先提取op,判断ARP是请求还是响应,发现是ARP请求,再看目的IP地址。B发现目的IP与自己的相符,其余主机发现不符,丢弃,B对A做出应答。
A收到后,首先看op,发现是ARP响应,随后拿到B的mac地址。
因为MAC地址短期内不会发生变化,因此可以用ARP找到其他主机的MAC地址,将这些信息缓存起来。
在Linux中,指令
arp -a
,可以查看局域网内主机间IP地址和MAC地址之间对应的映射关系
其他重要协议或技术
DNS
DNS是一整套从域名映射到IP的系统,应用层协议。
ICMP协议
ICMP协议是一个网络层协议。
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。
ICMP正是提供这种功能的协议,主要功能包括:
确认IP包是否成功到达目标地址;
通知在发送过程中IP包被丢弃的原因;
ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层
ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要是用ICMPv6。
ICMP大概分为两类报文:一类是通知出错原因;一类是用于诊断查询
ping命令
ping命令基于ICMP,是在网络层。 端口号是传输层的内容,在ICMP中根本就不关注端口号这样的信息。因此ping命令没有端口号。
NAT技术
NAT技术是当前解决IP地址不够用的主要手段,是路由器的一个重要功能。
代理服务器
正向代理用于请求的转发
反向代理往往作为一个缓存