TCP/IP协议总结
七层OSI体系说明图
下图为应用层的协议在运输层使用哪种协议
五层原理体系图
TCP/IP协议
TCP/IP是互联网相关的各类协议族的总称,包括TCP、UDP、IP、ICMP、FTP等等都属于TCP/IP族内的协议。
数据链路层协议:
为在点对点链路上直接相连的两个设备之间提供一种传送数据报的方法
-
SLIP串行线路网际协议:一种在串行线路上对 I P数据报进行封装的简单形式。只能同时运行一种网络协议,无容错控制,无授权。逐渐被PPP取代。
-
CSLIP协议:压缩的SLIP协议,可以将TCP,IP数据报首部进行压缩。
-
PPP点对点协议:替代了SLIP协议,它是一个协议簇,包含LCP、NCP等协议
-
PPP协议的特点
-
面向链接
-
不可靠
-
只支持全双工链路
-
封装成帧:在首部和尾部加入了帧界定符(即F字段为7E)
-
面向字节,所有PPP帧的长度都整字节的
-
只检错不纠错:PPP帧中尾部包括FCS域来用来检测错误,一旦发现错误,就丢弃收到的数据帧,并报告一个输入错误。
-
没有流量控制
-
透明传输:依靠字节传输和零比特传输实现
-
也对TCP和IP报文首部进行压缩
-
-
组成部分
- 封装:PPP封装提供了不同网络层协议同时在同一链路传输的多路复用技术。
- LCP链路控制协议:LCP 用于通信双方就封装格式选项自动达成一致,处理数据包大小限制,探测环路链路和其他普通的配置错误,以及终止链路。
- NCP网络控制协议:一种扩展链路控制协议,用于建立、配置、测试和惯例数据链路连接。
- 身份认证:包括口令验证协议PAP,挑战握手验证协议CHAP.
-
PPP工作原理
-
建立连接:
为了建立点对点链路通信,PPP 链路的每一端,必须首先发送 LCP 包以便设定和测试数据链路。在链路建立,LCP 所需的可选功能被选定之后,PPP 必须发送 NCP 包以便选择和设定一个或更多的网络层协议。一旦每个被选择的网络层协议都被设定好了,来自每个网络层协议的数据报就能在链路上发送了。
-
-
生命周期
- 链路静止状态:链路一定开始并结束与这个状态。
- 链路建立状态:LCP发送配置包,进行设定测试链路。
- 认证阶段:有的链路需要进行认证,认证失败就无法进入下一阶段网络层协议阶段,,从而进入链路终止阶段。
- 网络层协议阶段:NCP设定一些该链路上允许运行的网络层协议
- 链路终止阶段
PPPoE协议:以太网上的PPP协议。
-
-
MTU最大传送单元:每个链路都有自己的最大传输单元,如果传输的数据包超过了这个限制,则被分片或丢弃。
-
ARP地址解析协议:根据目的设备的IP地址来查询对应MAC地址的协议
情景:主机A向主机B发送IP数据包,知道B的IP地址,不知道其MAC地
- 同一个网络中的ARP协议过程:
-
向交换机发送ARP请求
ARP请求报文的目的MAC为广播MAC地址,向同一个网段中的其他设备广播
-
二层交换机不查看IP,将ARP报文发送给其他设备
-
主机B收到ARP请求报文,发现目的IP是自己的,于是发送单播ARP响应报文给主机A,将自己的MAC地址告诉A
-
主机A收到B的MAC地址后将其加入到自己的ARP缓存表中。
- 不同网络中的ARP协议过程:
- 主机A在自己的ARP表中查找B的MAC,发现B与自己不在一个网络,A知道只能请自己的网关路由器帮自己转发,于是封装IP数据包的目的MAC为网关的MAC发送给网关。
- 如果主机A不知道网关的MAC,则发送ARP请求报文,请求网关的MAC,此过程与上模同一网络中的ARP协议相同。
- 得到网关的MAC后,主机A将数据包发送给网关,网关路由器将主机A的MAC存到自己的MAC表中
- 网关路由器查看该IP数据包的目的IP,发现自己的MAC表中没有B的MAC地址,于是路由器发起ARP请求,获取到主机B的MAC。
- 路由器将数据包进行封装转发,B接收到数据包。通信完成。
免费ARP:
-
该类型的ARP请求报文的目的IP为自己的IP地址,即请求自己的IP地址的MAC地址。
-
作用
- 宣告。它以广播的形式将自己的IP地址和MAC地址告诉其他主机。
- 用于检测IP地址冲突。当一台主机发出免费ARP时,如果有主机给出ARP响应,则说明,该主机的IP地址有其他主机在使用。
- 用于更新其他主机的ARP缓存表。如果自己的MAC地址发生的改变(例如更换了网卡),其他设备接受到免费ARP后,发现MAC地址不一样了,于是会更新自己的ARP表
-
RARP逆地址解析协议:根据MAC地址查找IP地址的协议。现已淘汰。
-
CSMA/CD载波监听多址接入/碰撞检测协议:(早期以太网使用的协议,如今已经淘汰了)
- MA:多址接入:多个站连接在一条总线上,竞争使用总线
- CS:载波监听:每个站在发送帧的时候都先检测一下总线上有没有其他站在发送帧(“先听后说”)
检测总线是否空闲96比特时间,若是则立即发送帧,若没有则持续检测。
96比特为一段检测帧的发送时间- CD:碰撞检测:每一个正在发送帧的站,边发送边检测碰撞,一旦出现碰撞,则立即停止发送,等待一段时间后再次尝试发送。(“边说边听”)
由于以太网中小于64字节的帧都为无效帧,因此在碰撞检测过程中,如果发生碰撞,已发送的帧长度一定不会超过64字节,会被当做无效帧丢弃。
- 争用期:
每个主机在发送自己帧的一段时间内都有可能与其他主机的帧发生碰撞,这个时间是不确定的,取决于另一个主机发送的时间,以及主机之间的距离。但是,这个时间最长不会超过帧在链路中的往返传播时延,因此,将往返传播时延也即两倍的传播时延作为争用期,在争用期外的时间肯定不会发生碰撞。
10Mb/s的以太网将争用期定义为521比特发送时间,即51.2μs;因此其总线长度不能超过5120m,但考虑到其他因素,例如信号衰减等,这个长度不超过2500m。
最小帧:以太网规定最小帧长不小于64字节,即512比特(争用期)。小于64字节的帧为无效帧。
最大帧:以太网MAC帧数据长度不小于46字节,不大于1500字节,首部长度18字节,即最大帧长度为1518字节。
加入VLAN标记的MAC帧最大帧为1522字节(VLAN标记在首部中占4字节。)-
截断二进制指数退避算法 :用于计算碰撞检测检测到碰撞后的退避时间
-
信道利用率:
T0为发送时延
τ为数据从链路的两端发送的传输时延(假设一种极端情况,两个主机距离最远,位于链路的两端)
网络层的协议:
网络层的主要作用是实现终端节点之间的通信。这种终端节点之间的通信,也叫点对点通信。
网络层也可以称为网际层,或者IP层
-
IP网际协议:
-
特点
-
IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体
-
所有的TCP、UDP、ICMP、IGMP数据都以IP数据报格式输送数据
-
提供无连接、不可靠的,可能无序的数据传送服务
-
-
IP数据报格式
-
字段解释:
标识:每产生一个数据报就加一,并将这个值赋值给标识,用于分片后的重装,标识相同的分片为同一个数据报
标志:占三位,只有前两位有意义,分别是MF,DF
- MF(More Fragment):为1表示不是最后的分片,为0表示是最后的分片,后面没有分片了。
- DF(Don‘t Fragment):为1表示禁止分片,为0表示允许分片
片偏移:分片在原分组中的位置
生存时间TTL:数据报每被路由器转发一次,其TTL就减一。当TTL为零时,就丢弃这个分组。
首部检验和:这个字段只检验数据报的首部,不检验数据部分。
-
ICMP互联网控制消息协议
确认 IP 包是否成功送达目的地址
允许主机或路由器报告差错情况和提供有关异常情况的报告,即通知发送过程中 IP 包被丢弃的原因。
ICMP报文封装在IP数据报中。
-
内部网关协议IGP: RIP,OSPF
-
RIP路由信息协议:基于距离向量的路由选择算法
-
使用UDP用户数据报传送
RIP报文封装在UDP用户数据报中,UDP封装在IP数据报中
-
适合规模较小的网络
-
每个路由器只掌握邻居路由器的地址,没有整个网络的' 地图 '
-
最大跳数不超过15,16即认为不可达
-
好消息传播的快,坏消息传播的慢
收敛完成后,每隔30秒与邻居交换一次路由表信息。
-
-
OSPF开放最短路径优先协议:基于链路状态协议LS的路由选择算法
-
使用IP数据报传送
OSPF报文直接封装在IP报文中
-
适合规模大的网络
-
洪泛发送,收敛的快
-
每个路由器都掌握一张整个网络的地图,链路状态库
-
-
-
外部网关协议EGP:
用于自治系统AS之间传输数据的协议
BGP网络中的每个AS都被分配一个AS号,用于区分不同的AS
为什么要使用BGP协议呢,不能都使用RIP或者OSPF协议吗?
答:因为RIP协议只适合小规模网络,而OSPF的每个路由器都需要知道网络中的所有路由器信息,
而对于全世界的网络来说,其规模之大,会导致OSPF的链路状态库承载不了,因此将网络划分为一个个的自治系统,每个自治系统内部采用内部网关协议,外部使用BGP协议会更加合理。
-
BGP边界网关协议
运行于TCP上的一种自治系统的路由协议,用于在AS之间实现路由信息的交互
运行BGP的路由器称为BGP的发言者或BGP路由器
TCP连接可以实现两个对等体之间的逻辑连接,因此两个对等体建立BGP时,不需要物理相邻,只需要建立逻辑连接的TCP连接就可以了。
BGP的两种对等体系类型:EBGP和IBGP
-
EBGP:位于不同AS的BGP路由器之间的BGP邻居关系
建立EBGP需要的条件:
两个路由器处于不同的AS,具有不同的AS号
对等体IP地址必须路由可达,能够建立TCP连接
-
IBGP:位于同一个AS的BGP路由器之间的BGP邻居关系
建立EBGP需要的条件:
两个路由器处于同一个AS
对等体IP地址必须路由可达,能够建立TCP连接
-
-
-
IGMP网际组管理协议
它让一个物理网络上的所有系统知道主机当前所在的多播组。
多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。
-
DHCP动态主机配置协议
由DHCP服务器控制一段lP地址范围,客户机登录服务器时就可以自动获得服务器分配的lP地址和子网掩码。
一般的路由器都带有DHCP功能,因此可以将路由器看做一个DHCP服务器
-
NAT网络地址转换:
解决了IPv4地址枯竭的状况
将出入内外网的数据报头部中的源IP于目的IP修改为NAT转换表中的地址,达到私网与公网通信的目的。
传输层的协议:
- UDP用户数据报协议:
源端口:占16位
目的端口:占16位
长度:整个数据报的长度,占16位
检验和:占16位(可选字段),用于发现头部信息和数据中的错误
-
UDP协议的特点:
-
无连接的:不需要建立连接,只是数据的搬运工,并不会对数据进行拆分,拼接操作
-
面向报文:发送方的UDP对应用层下来的报文,添加一个首部后就交付给IP层,既不合并也不拆分,保留了报文的边界。一个报文一个报文的传输。
边界的概念:发送方发送数据将若干字节作为一个报文发送,这若干字节就存在一个边界内,TCP在发送的时候就将这个边界去除了,因为它是面向字节流的。
-
不可靠交付:不保证数据是否安全到达,只负责发送。
-
头部开销小,只有八字节,因此传送报文是很高效的
-
支持单播,多播,广播
可以一对一,一对多,多对多,多对一的方式传输。
-
适用场景:适用于实时应用,例如直播,视频会议。
-
-
TCP传输控制协议:
序列号(Sequnce Number):它表示本报文段所发送数据的第一个字节的编号
确认号(Acknowledgement Number):它表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。其值是接收方即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加1。
标志字段:
- CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
- ECE(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
- URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
- ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
- PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
- RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
- SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
- FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
-
TCP协议的特点
-
面向连接的:建立连接三次握手,释放连接四次握手
连接过程详见博客园文章
-
提供可靠交付:通过序列号和确认号保证报文安全有序到达。
-
面向字节流:不同于UDP的一个报文一个报文的传输,TCP在不保留边界的情况下以字节流方式进行传输。
-
提供流量控制、拥塞控制:当网络出现拥塞的时候,TCP能减小向网络注入数据的速率和数量,缓解拥塞。
-
提供全双工通信:通信双方在任意时刻都能发送数据,因为接收方和发送方都有缓存,用来临时存放双向通信数据。
-
只支持一对一通信
-
首部20字节,最大60字节
-
适用场景:要求可靠传输的应用,例如文件传输。
-
应用层的协议:
-
DNS协议
-
FTP文件传送协议
-
TFTP简单文件传送协议
二层交换机能隔离冲突域
三层路由器能够隔离广播域
回环地址:
以 127 开头的 IP 地址都是环回地址,其所在的回环接口可以理解为虚拟网卡。使用回环地址时,数据包会直接被主机的 IP 层获取,而不经过链路层,也不会流向网络。一般用来检查主机上运行的网络服务是否正常。
路径 MTU 发现的工作原理如下:(UDP)
- 发送端主机发送 IP 数据包时将其头部的分片禁止标志位设置为 1 。根据这个标志位,途中的路由器即使收到需要分片的大包,也不会分片,而是直接将包丢弃。之后通过一个 ICMP 不可达消息将数据链路上 MTU 值给发送端主机。
- 发送端主机根据收到的 MTU 值对数据包进行分片处理,再把 IP 数据包发送给相同的目的主机。如此重复,直到数据包被发送到目标主机为止没有再收到任何 ICMP ,就认为最后一次 ICMP 所通知的 MTU 即是一个合适的 MTU 值。 MTU 值至少可以缓存约 10 分钟,在这 10 分钟内使用刚得到的 MTU ,过了 10 分钟后就重新做一次路径 MTU 发现。
上面的例子是 UDP ,如果是在 TCP 的情况下,根据路径 MTU 的大小计算出最大段长度(MSS ),然后再根据这些信息进行数据包的发送。因此,在 TCP 中如果使用路径 MTU 发现, IP 层则不会再分片。
路由器三层转发原理:
一台路由器收到一个数据包时,会执行以下操作
对数据包进行解封装,查看目的IP地址
在路由表中查找匹配的路由条目
将IP地址与子网掩码进行与运算得到网络地址,与路由表中的网络地址比较,若未匹配则丢弃该数据报。若匹配到一条或多条,根据最长匹配原则 匹配。
匹配成功后将数据包从送出接口送到下一条。
路由震荡与路由衰减
当 BGP 应用于复杂的网络环境时,路由振荡十分频繁。为了防止频繁的路由振荡带来的不利影响,BGP 使用路由衰减来抑制不稳定的路由。
- 路由震荡:
路由振荡指路由表中添加一条路由后,该路由又被撤销的过程。当发生路由振荡时,设备就会向邻居发布路由更新,收到更新报文的设备需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和 CPU 资源,严重时会影响到网络的正常工作。
- 路由衰减
路由衰减使用惩罚值(Penalty value)来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定。
如图所示,路由每发生一次振荡, BGP 便会给此路由增加 1000 的惩罚值,其余时间惩罚值会慢慢下降。当惩罚值超过抑制阈值(suppress value)时,此路由被抑制,不加入到路由表中,也不再向其他 BGP 对等体发布更新报文。被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(half-life)。当惩罚值降到再使用阈值(reuse value)时,此路由变为可用并被加入到路由表中,同时向其他 BGP 对等体发布更新报文。从路由被抑制到路由恢复可用的时间称为抑制时间(suppress time)。
路由衰减只对 EBGP 路由起作用,对 IBGP 路由不起作用。这是因为 IBGP 路由可能含有本 AS 的路由,而 IGP 网络要求 AS 内部路由表尽可能一致。如果路由衰减对 IBGP 路由起作用,那么当不同设备的衰减参数不一致时,将会导致路由表不一致。
MPLS多协议标记交换技术:
面向链接的处于数据链路层和网络层之间的技术。
标记交换路由器:LSR
标记交换路径:LSP
转发等价类:FEC
属于同一FEC的数据报将被LSR以从同样的接口发送到同样的下一跳,即同等对待。
MPLS的实现过程
在传统的路由网络中,当一个网络层协议数据包在路由器之间游荡时,每个路由器都是独立的对这个数据包做出路由决策,每个路由器都通过分析数据包头部信息,将该数据报发送给下一跳
而进入MPLS网络的数据报,在入口处被打上一层固定长度的标记,即插入一个MPLS首部,每一个标记交换路由器收到这个带标的数据报时,查找自己的标签转发表,将其转发,转发的过程在第二层链路层使用硬件完成,不需要上升到第三层查找转发表了。 所有的LSR都只看标签,不查自己的路由表了,这样转发过程就大大加快了。
LSR转发的过程中会进行标记对换,将数据报标签首部中的入标记改为自己的标签转发表对应的出口标记值,如此一来,下一个LSR接收到的入标记就是上一个LSR的出标记了,而上一个LSR的出标记在当前LSR的转发表中是有转发记录的,这样就完成了一跳接一跳的传输过程。