目录
1. 跨广播域的通信
如果PC1要访问PC3,PC1和PC3在两个不同的网络,不同的广播域。三层的源IP地址是PC1的,目标IP地址是PC3的,二层源MAC地址是PC1,目标地MAC址未知。因为是跨广播域,需要找网关,所以数据需要先发送给路由器,为了找到左边网段网关(GE 0/0/0)接口的MAC地址,先用ARP协议通过网关的IP地址获取到网关的MAC地址。此时把目标MAC地址给GE 0/0/0的MAC地址,数据到达交换机,然后查MAC地址表,如果查到对应的记录则单播给GE 0/0/0,如果没有查到则广播,总之路由器就收到了来自PC1的数据。路由器收到数据后开始解封装数据,然后看到二层的目标MAC地址是自己,则继续看三层的目标IP地址不是自己,是自己GE0/0/1接口这个广播域的一台设备,然后转发,重新封装的数据:源MAC地址是路由器GE0/0/1的,目标MAC地址还是未知,但是此时满足ARP协议,则通过ARP协议获取一下PC3的MAC地址,然后此时知道目标MAC地址之后,数据发给交换机,然后查MAC地址表,如果查到对应的记录则单播给PC3,如果没有查到则广播。如此,就实现了跨广播域的通信。
2. IP地址(IPV4)
2.1 IP地址分类
A、B、 C、 D、 E五类:
- A、B、C类是单播地址,用户可以使用的地址:既可以做源IP使用也可以做目标IP使用;
- D类是组播地址,无掩码:只能作为目标IP使用;
- E类保留地址,用于科研(美国军方)。
通信方式:
- 单播:一对一的通信。
- 组播:一对多的通信(一个通信组)。一个组播地址可以代表一个组内的多个设备
- 广播:一对所有(一个广播域中的所有)
① A类地址:0XXX XXXX ---- 第一位二进制固定为0
0000 0000 - 0111 1111 ----- 0-127之间,真正可用的地址1-126
网络掩码固定为255.0.0.0 ---- 前8位为网络位,后24位为主机位
A类地址里有2^(8-1)(2个不可用)个网段,一个网段内有2^24(2个不可用:主机位全为0+主机位全为1)个IP地址
例:10.20.30.40 -- 255.0.0.0
② B类地址:10XX XXXX. ---- 前两位二进制固定10
1000 0000 - 1011 1111 ----- 128-191之间
网络掩码固定为255.255.0.0 --- 前16位为网络位,后16位为主机位
B类地址里有2^(16-2)个网段,一个网段内有2^16(2个不可用:主机位全为0+主机位全为1)个IP地址
例:172.1.1.1 255.255.0.0
③ C类地址:110X XXXX. ---- 前三位二进制固定110
1100 0000 - 1101 1111 ----- 192-223之间
网络掩码固定为255.255.255.0 ---- 前24位为网络位,后8位为主机位
C类地址里有2^(24-3)个网段,一个网段内有2^8(2个不可用:主机位全为0+主机位全为1)个IP地址
例:192.168.1.1 255.255.255.0
④ D类地址: 1110 XXXX. ---- 前四位二进制固定1110,无掩码
1110 0000 - 1110 1111 ---- 224-239
⑤ E类地址: 1111 XXXX. ---- 前四位二进制固定1111,无掩码
1111 0000 - 1111 1111 ---- 240-255
2.2 特殊IP地址
1. 环回地址(本地机器测试):127.0.0.1 - 127.255.255.254;如果电脑无法上网时,可以通过ping命令查找到底是那出问题。先平自己的IP地址,未ping通自己的问题,ping通然后再ping网关的IP地址,未ping通则是可能是问题出在这个网关范围内,有可能是路由器有可能是交换机,ping通则可能是更大的范围。然后可以试试ping同一交换机上的其他设备,ping通则说明是在交换机到路由器这段出了问题,未ping通则说明是自己到交换机之间或者交换机出问题。
2. 受限广播地址:255.255.255.255 ---- 受路由器的限制,只能做为目标IP使用;
3. 直接(定向)广播地址:192.16.1.255/24 ---- 网络位不变,主机位全为1。 代表着该
(192.168.1.X/24)网段的所有用户,只能做为目标IP使用;
4. 网络号:192.168.1.0/24 ---- 网络位不变,主机位全为0的地址,描述一个网段,表示的是范围(192.168.1.X/24),而不是一个地址;
5. 无效地址(保留地址):0.X.X.X 。0.0.0.0无效地址:①可以在没有地址时作为源IP地址使用(占位);②可以代表任意地址
6. 本地链路地址/自动私有地址(link-local):169.254.0.0/24 ---- 当使用DHCP协议获取IP地址时未正常获取到,则自动分配一个自动私有地址。
2.3 子网划分/可变长子网掩码(VSLM)
192.168.1.0/24 --- 2个子网 借1位
192.168.1.0 0000000/25 --- 192.168.1.0/25(192.168.1.1 - 192.168.1.126)
192.168.1.1 0000000/25 --- 192.168.1.128/25(192.168.1.129 - 192.168.1.254)
172.16.0.0/16 --- 8个子网 借3位
1010 1100. 0001 0000. 0010 0000. 0000 0000
172.16.0.0/19 172.16.0.1 - 172.16.15.254
172.16.32.0/19 172.16.32.1 - 172.16.63.254
172.16.64.0/19 172.16.64.1 - 172.16.95.254
172.16.96.0/19 172.16.96.1 - 172.16.127.254
172.16.128.0/19 172.16.128.1 - 172.16.159.254
172.16.160.0/19 172.16.160.1 - 172.16.191.254
172.16.192.0/19 172.16.192.1 - 172.16.223.254
172.16.224.0/19 172.16.224.1 - 172.16.255.254
1111 1111. 1111 1111. 0000 0000. 0000 0000
2.4 无类域间路由(CIDR)
① 192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24
192.168.00000000
192.168.00000001
192.168.00000010
192.168.00000011
192.168.0.0/22 ----- 超网
② 172.16.0.0/24、172.16.1.0/24、172.16.2.0/24、172.16.3.0/24
172.16.0.0/22 ----- 子网汇总
3. OSI七层参考模型
OSI/RM ---- 开放式系统互联参考模型
1977年,英国标准化协会向国际标准化组织
(ISO)提议要建立一个模型。1978年发布了这个临时版本,1979年稍作细化之后,成了最终的版本。
OSI参考模型的核心思想是分层。属于同一层面的功能目的相同或者相似;属于不同层面的功能或目的具有明显的差别。每一层都在下层提供服务的基础上提供增值服务。
分层的作用:①更利于标准化;②降低关联性;③便于学习和理解。
应用层、表示层、会话层;传输层、网络层、数据链路层、物理层。
- 会话层:建立和维持网络应用和网络服务器之间的会话连续。
- 传输层:实现端到端的传输。
端口号(port ID):本质是由16位二进制组成,范围:0 - 65535,0作为保留端口,所以端口号的取值范围为1 - 65535。1 - 1023是知名端口号。端口号的作用:区分和标识不同的应用。
- 数据链路层:逻辑链路控制层(LLC),介质访问控制层(MAC)
介质访问控制层(MAC)使用FCS(帧校验序列)---- CRC循环冗余算法 ---- 保证数据的完整性(收到的和之前发的数据是一样的)
4.TCP/IP模型(协议簇)
TCP/IP模型:4层 ---- 应用层、传输层、网络层、网络接口层
5层 ---- 应用层、传输层、网络层、数据链路层、物理层
TCP/IP模型与OSI模型对比
PDU:协议数据单元
在OSI七层参考模型中:L1PDU、L2PDU……L7PDU
在TCP/IP模型中:
应用层 ---- 报文;传输层 ---- 段;网络层 ---- 包;数据链路层 ---- 帧;物理层 ---- 比特流
5. 封装和解封装
5.1 应用层
- HTTP ---- 超文本传输协议 ---- TCP 80端口
- HTTPS ---- TCP 443端口
- FTP ---- 文本传输协议 ---- TCP 20/21端口
- TFTP ---- 简单文件传输协议 ---- UDP 69端口
- TElNET ---- 远程控制协议 ---- TCP 23端口
- SSH ---- 远程控制协议 ---- TCP 22端口
- DNS ---- 域名解析协议 ---- UDP/TCP 53端口
- DHCP ---- 动态主机配置协议 ---- UDP 67/6
5.2 传输层
封装端口号 ---- TCP(传输控制协议),UDP(用户数据报协议)
TCP和UDP的区别:
- TCP协议是面向连接的协议,UDP协议是无连接的协议;
- TCP协议传输是可靠的,UDP协议传输“尽力而为”;
- TCP可以实现流控,UDP不行;
- TCP可以进行数据分段,UDP不行;
- TCP消耗资源较大,传输速度较慢;UDP消耗资源较小,传输速度快;
TCP和UDP的使用场景:TCP更适合应用在对效率要求不高,但对准确性要求较高的场景;UDP更适合在对效率要求较高,但对准确性要求较低的场景。
面向连接:数据在传输数据之前,先使用预备的协议建立点到点的连接,之后再传输数据。会话是分方向的。
5.2.1 TCP协议封装的数据结构
TCP头部是可变长头部,因为有一个可选项。TCP头部最短20个字节
1. 端口号:源端口号(16位)、目标端口号(16位)
2. 序号sequence number(32位):Seq序号,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。保证数据传输的有序性。
3. 确认序号acknowledgement number(32位):Ack序号,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。作用:①确认作用;②表明我下一个想要的数据包的序号
4. 首部长度(4位):头部有多长,TCP下面有一个选项,使用TCP头部是可变长头部。
5. 保留(6位):不用管
6. 标志位Flags(6位):6个,每个标记位只能置0/1
URG紧急标志位:置1则紧急指针(16位)(urgent pointer)有效。如果有一些需要优先处理的数据,我们把紧急标准位置1,别人一看就知道这个数据是需要优先处理的数据,紧急指针激活相当于标尺,指明这个数据是从哪到哪。
ACK确认标志位:置1则确认序号有效。
PSH:置1则表示你的这个数据不需要在缓存区等待直接推给进程。
RST:重置连接。网络管控、强制断开
SYN同步请求标志位:置1则发起请求建立一个新连接。
FIN断开标志位:置1释放一个连接。
7. 窗口大小(16位)--- 流控机制、校验和(16位,伪头部校验)、紧急指针(16位)
伪头部校验:除了将传输层头部及数据部分的内容进行校验外,还会将网络层中的12个字节(32位源IP,32位目标IP,8位保留,8位的协议,16位的总长度)的数据进行校验 ---- 反码相加法。
5.2.3 UDP数据结构
TCP协议创建连接和断开连接分别是用三次握手机制和四次挥手机制。
5.2.4 三次握手机制
发送数据前创建连接,由客户端向服务器发送第一个数据包:SYN = 1,seq = x(随机的a发出的),acknumber =0;服务器给客户端发送第二个数据包:ACK = 1,SYN = 1,acknumber = x+1,seq = y(随机值b发出的);客户端给服务器发第三个数据包:ACK = 1,seq = x+1,acknumber = y+1。
5.2.5 四次挥手机制
数据发完后,客户端A向服务器B发送第一个数据包:FIN = 1,seq = u(数据量);服务器B收到之后数据之后,给客户端A发送第二个数据包:ACK = 1,acknumber = u + 1,此时A指向B的连接就断开了。因为此时B可能还有数据要发,所以B给A发的FIN数据包没有和ACK包一起发。当B的数据发完以后,B给A发第三个数据包:FIN = 1,seq = w;A收到数据之后,给B发出第四个数据包:ACK = 1,seq = u + 1,acknumber = w + 1,此时B指向A的连接就断开了。至此四次挥手就结束了。注:过程中的序号是包含数据量的。
5.2.4 TCP保证传输可靠性
确认机制ACK、重传输机制、排序机制、流控机制
确认机制:在TCP的首部中有一个标志位——ACK,此标志位表示确认号是否有效。接收方对于按序到达的数据会进行确认,当标志位ACK=1时确认首部的确认字段有效。进行确认时,确认字段值表示这个值之前的数据都已经按序到达了。而发送方如果收到了已发送的数据的确认报文,则继续传输下一部分数据;而如果等待了一定时间还没有收到确认报文就会启动重传机制。
重传输机制:当报文发出后在一定的时间内未收到接收方的确认,发送方就会进行重传,有一个数据存活最大时间MSL,当超过这个时间时就会重新发送。
排序机制:TCP会话的每一端都包含一个32位(bit)的序列号,该序列号被用来跟踪该端发送的数据量。每一个包中都包含序列号,在接收端则通过确认号用来通知发送端数据成功接收,TCP将每个字节的数据都进行了编号。保证可靠性,保证数据的按序到达提高效率,可实现多次发送,一次确认去除重复数据。如图,A有一个1000个字节的数据要发给B,A首先对数据进行分段,首先传输第一段300字节:第一个字节的序号seq=x+2,发出的最后一字节的数据的seq=x+301。当B收到最后一个字节的数据,发出确认,acknumber=x+302;第二段300字节:第一个字节的序号seq=x+302,发出的最后一字节的数据的seq=x+601。当B收到最后一个字节的数据,发出确认,acknumber=x+602;最后一段400字节:第一个字节的序号seq=x+602,发出的最后一字节的数据的seq=x+1001,当B收到最后一个字节的数据,发出确认,acknumber=x+1002。最终通过序号把数据排序,拼成完整数据。
流控机制(滑动窗口机制):和窗口大小有关。窗口大小表示可以同时发送数据包的数量,确认窗口值是表示能一次性收的数据包的数量。窗口值是一个动态的数据。TCP支持根据接收端的处理能力(窗口值),来决定发送端的发送速度,这个机制叫做流量控制。在TCP报文段首部中有一个16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16窗口大小中。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接收方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口置为0,发送方收到后就不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。
5.3 网络层
IP地址(IP)头部数据结构:
- 4位版本:指的是IP协议的版本是IPV4;
- 4位首部长度:标明头部的长度,有选项(可选)所以和TCP头部一样是可变长头部;
- 8位服务类型(TOS):如果数据包需要做特殊处理,可以把标记打在服务类型上;
- 16位总长度(字节数):头部加数据的长度;
- 16位标识(Identification):数据报的唯一标识,同一个数据报的所有分片中具有相同的标识,表示具有相同标识的分片都是同一个数据包的。
- 3位标志(Flags):该字段长度为3位,它分为三分部分。① 保留位(reserved bit)为0;② 分片位(Don`t fragent)当为1时标识未分片,0则标识被分片;③ 更多位(more fragments)为0标识最后分段,为1标识更多分段。
- 13位片偏移(Fragment Offset):用来排序,它标识分段在当前数据包的位置,单位为字节;此值 * 8 = 分片相对于原始IP数据报(数据部分)开始处的偏移。(每个分片的数据部分的长度都是8的整数倍)
- 8位生存时间TTL(Time to Live):不是时间单位,和路由器的转发次数有关。数据包每经过一个路由器的转发,这个TTL值将减1,当这个TTL值为0时,则路由器将不再转发这个数据包,而是直接丢弃。
- 8位协议:指的上层使用的协议类型,6--TCP,17--UDP,1--ICMP(网络消息控制协议)(ping)
- 16位首部校验和:由发送端填充,接收端对其使用CRC算法校验IP数据报头部(仅校验头部)在传输过程中是否损坏。
分片:数据包过大时,可以分成几个片段。原因:① 大数据传输出错的话重传很麻烦,② 大数据太大容易造成网络拥堵。③ 数据链路层数据过大无法封装
MTU(以太网Ⅱ型帧):最大传输单元----数据链路层对最大可封装的数据的大小的限制
MSS(TCP):最大段长度。TCP分段时应保证数据部分内容小于最大段长度,理论值最大值为1460字节,这个值需要进行协商,在三次握手中的SYN包中进行协商,如果双方携带的MSS值不一样,则将按小的执行。
5.4 数据链路层
MAC地址 ---- 以太网协议:早期局域网的解决方案,现在在应用在广域网当中,可以理解为有交换机组成的二层网络。
以太网Ⅱ型帧:封装的数据不能超过1500(默认,可修改)个字节
Preamble前导符:一个标记;Type:表示上层数据使用的协议类型
FCS(帧校验序列):CRC循环冗余算法 ---- 保证数据的完整性
物理层:电信号在传输介质中传播,不需要封装。
5.5 解封装
物理层:将电信号转化为二进制数据,并将其送至数据链路层。数据链路层:查看MAC地址,地址是自己,就拆掉MAC头部,继续传输;地址不是自己,就丢弃数据。网络层:查看IP地址,地址是自己,就拆掉IP头部,继续传输;地址不是自己,就丢弃数据。传输层:查看TCP头部,判断应该传到哪里,然后重组数据,传输到应用层。应用层:二进制转化为原始数据。数据解封装的过程是数据封装的逆过程。