1、什么是网络协议
协议就是计算机与计算机之间通过网络通信时,事先达成的一种 “约定”。这种“约定”使不同厂商的设备、不同的CPU以及不同操作系统组成的计算机之间,只要遵循相同的协议就能够实现通信。这就好比一个中国人说汉语一个外国人说英语使用不同的国家语言进行沟通,怎么也无法理解。如果两个人约定好 都说中文或英文,就可以互相沟通通信。协议分为很多种,每一种协议都明确界定了它的行为规范。两台计算机必须能够支持相同的协议,并遵循相同协议进行处理,这样才能实现相互通信。
1.1 协议分层
1.1.1 TCP/IP协议
TCP/IP 是用于因特网 (Internet) 的通信协议。 TCP/IP 通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。
通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、 流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。
TCP支持的应用协议主要有:Telnet、FTP、SMTP等
UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等
TCP/IP协议与低层的数据链路层和物理层无关,这也是TCP/IP的重要特点
TCP(Transimision Control Protocal)
• 传输控制协议
• 可靠的、面向连接的协议
• 传输效率低
UDP(User Datagram Protocal)
• 用户数据报协议
• 不可靠的、无连接的服务
• 传输效率高
1.2 TCP/IP协议族
TCP/IP是基于TCP和IP这两个最初的协议之上的不同的通信协议的大集合
1.3 协议的分层
网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。 传统上来说 TCP/IP 被认为是一个四层协议, 而ISO(国际标准化组织),制定了一个国际标准OSI七层协议模型,OSI协议以OSI参考模型为基础界定了每个阶层的协议和每个阶层之间接口相关的标准。
1.4 分层的作用
应用层
应用层为操作系统或应用程序提供访问网络服务的接口。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等
表示层
将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。数据的表示、安全、压缩
会话层
负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理
传输层
管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠地传送到目标地址)
网络层
地址管理与路由选择, 在这一层,数据的单位称为数据包(packet)(路由器)
数据链路层
互连设备之间传送和识别数据帧(交换机)
物理层
以"0"、 "1"代表电压的高低,灯光的闪灭,在这一层,数据的单位称为比特(bit),(中继器、集线器、还有我们通常说的双绞线也工作在物理层)
1.5 七层通信
发送方由第七层到第一层 由上到下按照顺序传送数据,每个分层在处理上层传递的数据时,附上当前层协议所必须的 "首部"信息。接收方由第一层到第七层 由下到上按照顺序传递数据,每个分层对接收到的数据进行 "首部"与"内容"分离,在转发给上一层。最终将发送的数据恢复为原始数据
1.6传输方式的分类
1..6.1 面向有连接型和面向无连接型
- 面向有连接型
发送数据之前,需要在收发主机之间建立一条通信线路,在通信传输前后,专门进行建立和断开连接的处理,如果与对端之间无法通信,可避免发送无谓的数据
- 面向无连接型
1.6.2 报文、帧、数据包等的区别
报文(message)是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。
应用层:报文(message),一般指完整的信息,传输层实现报文交付,位于应用层的信息分组称为报文;
传输层:报文段(segment),组成报文的每个分组;
网络层:分组(packet)是网络传输中的二进制格式单元,数据包(datapacket)是TCP/IP通信协议传输中的数据单位;通过网络传输的数据基本单元,包含一个报头和数据本身,其中报头描述了数据的目的地及其与其他数据之间的关系,可以理解为数据传输的分组,我们将通过网络传输的基本数据单元称为数据报(Datagram);
链路层:帧(frame),数据链路层的协议数据单元,为了保证数据的可靠传输,把用户数据封装成帧;
物理层:PDU(bit),协议数据单元; 抓包,抓到的是传输层的包,packet/frame/Datagram/segment是存在于同条记录中的,这些是基于所在协议层的不同取了不同的名字。
1.7 TCP报文结构
IP 数据包在以太网数据包的负载里面,TCP数据包在IP数据包的负载里。
TCP 首部各字段的意义和作用
TCP首部最小为20字节,这20字节分为5行,每行4个字节也就是32个位。
源端口和目的端口 Port
• 源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址。
• 目的端口号:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。
计算机通过端口号识别访问哪个服务,比如http服务或ftp服务,发送方端口号是进行随机端口,目标端口号决定了接收方哪个程序来接收 分别占用16位,也就是端口号最大是2^16,所以端口号的范围0~65536
端口号的分配:
• 知名端口号一般位于:1 --- 255 之间
• 256 --- 1023的端口号,通常是由Unix系统占用(系统占用)
• 1024 ---5000 是大多数TCP、IP实现的临时分配
• 大于5000的一般是给其他服务预留的(Internet上并不常用的服务)
序号 Sequence Number
TCP用序列号对数据包进行标记,以便在到达目的地后重新重装,假设当前的序列号为 s,发送数据长度为 l,则下次发送数据时的序列号为 s + l。在建立连接时通常由计算机生成一个随机数作为序列号的初始值。
确认号 Acknowledgemt Number
占 4 个字节,表示期望收到对方下一个报文段的序号值。 TCP 的可靠性,是建立在「每一个数据报文都需要确认收到」的基础之上的。
就是说,通讯的任何一方在收到对方的一个报文之后,都要发送一个相对应的「确认报文」,来表达确认收到。 那么,确认报文,就会包含确认号。 例如,通讯的一方收到了第一个 25kb 的报文,该报文的 序号值=0,那么就需要回复一个确认报文,其中的确认号 = 25600.
数据偏移 Offset
占 0.5 个字节 (4 位)。 这个字段实际上是指出了 TCP 报文段的首部长度 ,它指出了 TCP报文段的数据起始处 距离 TCP报文的起始处 有多远。(注意 数据起始处 和 报文起始处 的意思)
一个数据偏移量 = 4 byte,由于 4 位二进制数能表示的最大十进制数字是 15,因此数据偏移的最大值是 60 byte,这也侧面限制了 TCP 首部的最大长度。
保留 Reserved
占 0.75 个字节 (6 位)。 保留为今后使用,但目前应置为 0。
标志位 TCP Flags
标志位,一共有 6 个,分别占 1 位,共 6 位 。 每一位的值只有 0 和 1,分别表达不同意思。
• ACK:确认序号有效
• RST:重置连接
• SYN:发起了一个新连接
• FIN:释放一个连接
确认 ACK (Acknowlegemt)
当 ACK = 1 的时候,确认号(Acknowledgemt Number)有效。 一般称携带 ACK 标志的 TCP 报文段为「确认报文段」。为0表示数据段不包含确认信息,确认号被忽略。
TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 设置为 1。
推送 PSH (Push)
当 PSH = 1 的时候,表示该报文段高优先级,接收方 TCP 应该尽快推送给接收应用程序,而不用等到整个 TCP 缓存都填满了后再交付
复位 RST (Reset)
当 RST = 1 的时候,表示 TCP 连接中出现严重错误,需要释放并重新建立连接。 一般称携带 RST 标志的 TCP 报文段为「复位报文段」。
同步 SYN (SYNchronization
当 SYN = 1 的时候,表明这是一个请求连接报文段。 一般称携带 SYN 标志的 TCP 报文段为「同步报文段」。 在 TCP 三次握手中的第一个报文就是同步报文段,在连接建立时用来同步序号。
对方若同意建立连接,则应在响应的报文段中使 SYN = 1 和 ACK = 1。
终止 FIN (Finis)
当 FIN = 1 时,表示此报文段的发送方的数据已经发送完毕,并要求释放 TCP 连接。
一般称携带 FIN 的报文段为「结束报文段」。
在 TCP 四次挥手释放连接的时候,就会用到该标志
窗口大小 Window Size
占 2 字节。
该字段明确指出了现在允许对方发送的数据量,它告诉对方本端的 TCP 接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。 窗口大小的值是指,从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。
校验和 TCP Checksum
占 2 个字节。 由发送端填充,接收端对 TCP 报文段执行 CRC 算法,以检验 TCP 报文段在传输过程中是否损坏,如果损坏这丢弃。
检验范围包括首部和数据两部分,这也是 TCP 可靠传输的一个重要保障。
紧急指针 Urgent Pointer
占 2 个字节。 仅在 URG = 1 时才有意义,它指出本报文段中的紧急数据的字节数。 当 URG = 1 时,发送方 TCP 就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。
因此,紧急指针指出了紧急数据的末尾在报文段中的位置
1.8 三次握手,四次挥手
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
1.8.1 三次握手
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说在收发数据之前,必须先和对方建立连接
一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的 描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步 (同步就是两台主机一个在发送同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同 步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据
首先由Client发出请求连接即 SYN=1 ACK=0 (请看头字段的介绍), TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的32位序号是 seq=x,然后 Server 进行回复确认,即 SYN=1 ACK=1 seq=y, ack=x+1, 再然后 Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1, seq=x+1, ack=y+1.
1.8.2 四次挥手
思考1:为什么要等待呢?
为了这种情况: B向A发送 FIN = 1 的释放连接请求,但这个报文丢失了, A没有接到不会发送确认信息, B 超时会重传,这时A在 WAIT_TIME 还能够接收到这个请求,这时再回复一个确认就行了。(A收到 FIN = 1 的请求后 WAIT_TIME会重新记时)
另外服务器B存在一个保活状态,即如果A突然故障死机了,那B那边的连接资源什么时候能释放呢? 就是保活时间到了后,B会发送探测信息, 以决定是否释放连接
思考2:为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
复习HCIA:
1、 OSI TCP/IP 模型
2、 IPV4地址 VLSM(可变长子网掩码)/CIDR (无类域间路由)
3、 DHCP 静态路由
4、 RIP
5、 OSPF
6、 ACL/NAT/VLAN
1 OSI:7层模型
1.1 七层模型
应用层 抽象语言--->编码
表示层 编码--->二进制
会话层 应用程序添加会话地址
上三层负责对数据进行加工处理—数据流层
下四层负责对数据进行传输—传输流层
传输层 TCP、UDP 分段、端口号
网络层 逻辑(临时)寻址,IP地址
数据链路层 介质访问控制(控制物理层)
物理层
1.2 名词解释:
分段:将上三层加工处理好的数据按MTU值进行切分;
MTU:最大传输单元 -- 默认1500字节
端口号:0-65535
1-1023 静态端口-注明端口 固定给常见服务
1024-65535 动态端口 – 高端口,随机标记客户端的进程
1.3 UDP :用户数据报文协议
仅完成传输层的基本工作—分段、端口号,不可靠非面向连接的尽力而为传输协议
1.4 TCP:传输控制协议
面向连接的可靠传输协议:在完成了传输层基本工作的基础上还需要保证传输的可靠性
面向连接:传输数据前先通过三次握手建立端到端的虚链路
可靠传输:4种可靠传输机制 确认、重传、排序、流控(滑动窗口机制)
2 IPV4报头:
以太网技术:一种数据链路层封装技术,使用MAC地址进行物理寻找;
3 专业名词:
PDU 协议数据单元 对各层数据封装的单位
应用层 报文
传输层 段
网络层 包
数据链路层 帧
物理层 比特流
4 ARP地址解析协议
ARP:地址解析协议,以下3种ARP正常均只能在同一个广播域内使用
AARP 正向ARP 已知对端IP地址,通过广播来获取对端的MAC地址
RARP 反向ARP 已知对端的MAC地址,通过二层单播、三层广播来获取对端的IP地址
FARP 无故ARP 在设备刚获取或刚使用一个新的ip地址,将向外进行正向ARP请求,被请求目标IP地址为本地的新地址;作用在于检测地址冲突;
5 DNS:域名解析服务
基于域名解析为IP地址,主要用于访问HTTP/HTTPS服务器;
6 封装与解封装
封装:数据基于模型从上而下逐一添加报头;
解封装:封装的反向行为;
7 OSI模型与TCP/IP模型的区别:
1、 层数不同
2、 在第3层,OSI支持所有的网络层协议; TCP/IP 仅支持Internet协议--IP;
3、 TCP/IP支持跨层封装;
跨层封装可以减少程序开发量,便于纠错;被设备更快封装和解封装;----常常在同一广播域内;ICMP可以在整个网络; 在跨层后,将由其他层面来完成被去掉层面的工作;
IPV4地址
IPV4地址:32位二进制构成
1 存在分类:ABCDE
其中ABC为单播地址,D为组播地址,E为保留地址
单播地址是唯一既可以作为源ip,也可以作为目标ip的地址
组播地址只能为目标地址
ABC 存在标记广播域的需求--- 网络位+ 主机位 使用子网掩码来区分
2 ABC中还存在私有和公有ip:
A 1-126 10.0.0.0/8 私有
B 128-191 172.16.0.0/16-172.31.0.0/16 私有
C 192-223 192.168.0.0/24-192.168.255.0/24私有
3 特殊地址:
1、每个网段中主机位全0; 192.168.1.0/24 不是一个单播地址;网络号标记这个网段;
2、每个网段中主机位全1; 192.168.1.255/24 不是一个单播地址,直接广播地址;
3、255.255.255.255 受限广播地址,不能穿越路由器
4、0.0.0.0 缺省路由,代表所有 无效地址,代表没有
5、127 环回地址
6、169.254.0.0/16 本地链路地址、自动私有地址
4 VLSM
可变长子网掩码:通过延长掩码的长度将一个网段逻辑的分为多个网段
5 CIDR
无类域间路由—取相同位,去不同位 将多个网段合成一个网段
子网汇总 :汇总后掩码长度大于或等于主类掩码
超网汇总 :汇总后掩码长度小于主类
静态
路由器默认仅存在直连路由
直连路由:路由器接口存在合法ip地址,且该接口可以通信
将自动生成到底该接口ip所在网段的路由
所有非直连网段,对路由器而言为未知网段;
获取未知网段的方法:
1.静态 2.动态
[r1]ip route-static 3.3.3.0 255.255.255.0 GigabitEthernet 0/0/1
[r1]ip route-static 2.2.2.0 24 192.168.1.1
目标网络号 出接口或者下一跳
1 MA和点到点网络
在MA网络中建议使用下一跳写法,在点到点网络中建议使用出接口写法;
MA:多路访问—在一个网段内,节点的数量不限制
点到点:在一个网段内,只能存在两个接口;多个节点将无法正常通讯;
若在MA网络中使用出接口写法;为寻找到正确的下一跳位置MAC地址,将启动代理ARP;
代理ARP—路由器收到一个非该网段目标地址的ARP请求时,查看本地的路由表,若存在到达被请求网段的路由;将代表该目标使用本地的MAC地址进行ARP应答;同时基于最佳选路规则,还讲启动ICMP重定向来定位到最佳路径的MAC地址;
若点到点网络中使用下一跳写法,由于递归查找规则,下一跳查表慢于出接口;
2 路由器查表规则:
1、 最长匹配—匹配当下路由表中最精确掩码的那条路由
2、 递归查找
-
汇总配置—当访问多个连续子网时,若均通过相同路径进行;那么可以将这些目标网络号进行汇总,来减少路由表条目的数量;
-
路由黑洞—若汇总地址中包含网络中不存在的网段时,将导致流量有去无回;增加网络的复合,建议尽量合理规划ip地址,精确汇总;
-
缺省、默认路由
一条不限定目标的路由;查表时查看完本地所有的直连、静态、动态路由后;若依然没有可达路径才使用该条目;
[r1]ip route-static 0.0.0.0 0.0.0.0 192.168.1.1 -
空接口 – 当缺省路由与黑洞路由相遇,必然出现环路;在黑洞路由器上配置一条到达汇总网段的空接口路由来避免;
[r1]ip route-static 1.1.0.0 22 NULL 0 -
浮动静态路由—通过修改静态路由默认的管理距离(优先级)起到链路备份的作用
[r1]ip route-static 3.3.3.0 24 23.1.1.2 preference 70 -
负载均衡 –到达同一目标地址若存在多条开销相似路径时,可以让设备将流量拆分后延多条路径同时传输;