导图社区 HCNAHNTD理论基础
一图详细梳理HCIA/HCNA-HNTD理论知识,包括网络互联基础、网络&传输介质、以太网帧结构、IP编址协议等内容,详细介绍ICMP、ARP、TCP和UDP协议,全面而详细,还不快收藏起来
编辑于2019-08-21 15:16:10HCNA-HNTD
网络互连基础
企业网络架构
小型企业特点
1、用户少 2、通常采用扁平化网络、扩展能力低 3、对网络质量的要求:满足使用即可
大型企业特点
1、用户多 2、通常采用层次化结构,支持网络扩展和用户增长 3、对网络质量的要求:可用性、稳定性、可扩展性、安全性、和可管理性;
简单网络介绍
简单网络组成:用一条能承载数据传输的物理介质将两个终端链接起来,就组成了简单网络
终端相互传递信息和资源共享的需求是网络产生的主要原因
网络:即通过介质把终端互连而成的一个规模大、功能强的系统,从而使得众多的终端可以方便地互相传递信息,共享信息资源。
连通性
用户之间可交换数据
共享性
资源共享
网络类型
互联网internet(小写通用名词):多个局域网(LAN)组成互联网,多个互联网又组成英特网
英特网Internet(大写专用名词):多个互联网互连
局域网LAN:Local Area Network
城域网MAN:Metropolitan Area Network
广域网WAN:Wide Area Network
电路交换与分组交换
电路交换网络:基于电话网的电路交换
优点:延迟小、透明传输
缺点:带宽固定,网络资源利用率低,初始连接建立慢
如早期Moden(调制解调器)
分组交换网络
以分组为单位存储转发
优点:多路复用,网络资源利用率高
缺点:延迟大,实时性差,设备功能复杂
含数据报交换及虚电路交换(看完全篇后再看,大概了解)
解释及区别1
解释及区别2
网络指标
带宽bandwidth
单位时间内,从一个节点传输到另一个节点的数据量,通常以bps为单位
以太网10Mbps
快速以太网100Mbps
延迟delay
数据从一个节点到另一节点经历的时间
网络名词
将规模庞大的网络划分成众多小网络,称为网络分段
冲突域:同一网段下的一台设备发送数据帧时,其他所有设备都必须侦听,当多台设备同时发送数据,即引发冲突,导致重传!冲突域是基于第一层(物理层)
广播域:指网络中的某一设备同时向网络中所有的其它设备发送数据,这个数据所能广播到的范围即为广播域(Broadcast Domain),广播域越大,可用的带宽就越少,必须处理的广播就越多!广播域是基于第二层(链路层)
交换机:使用交换机对网络进行分段,交换机连接的每个网段都是独立的冲突域
集线器:不能将网络分段,只连接网段,只是增大了相应交换机端口连接的冲突域
路由器:默认对广播域进行分割,也对冲突域进行分割
网络&传输介质
用来传输数据的载体称为介质,网络可以使用各种介质进行数据传输,包括物理线缆,无线电波、光波等。
不同介质具有不同的特性:编码方式、传输速度、传输距离
主要局域网技术
已淘汰的:令牌环网、FDDI环网
以太网
共享式以太网(物理层)
共享式以太网中,所有的终端主机都处于同一个冲突域中,局域网中的所有接入终端共享总线的带宽。
使用HUB集线器就是共享式以太网
冲突域
 1.概念 冲突域(物理分段):连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合或以太网上竞争同一带宽的节点集合。这个域代表了冲突在其中发生并传播的区域,这个区域可以被认为是共享段。在OSI模型中,冲突域被看作是第一层的概念,连接同一冲突域的设备有Hub,Reperter或者其他进行简单复制信号的设备。也就是说,用Hub或者Repeater连接的所有节点可以被认为是在同一个冲突域内,它不会划分冲突域。而第二层设备(网桥,交换机)第三层设备(路由器)都可以划分冲突域的,当然也可以连接不同的冲突域。简单的说,可以将Repeater等看成是一根电缆,而将网桥等看成是一束电缆。 简单说:就是一条路上走,就有遇到的机率。 2.应用 全双工交换机(比如三层管理交换机),每个物理通道可以单独,比如使用vpn,这样就不存在。但是你也可以配置成互通的,这就存在冲突域了!
冲突域(物理分段):连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合或以太网上竞争同一带宽的节点集合。
CSMA/CD载波侦听多路访问/冲突检测技术
作用:CSMA/CD是一种在共享式网络上检测并避免冲突的机制。 解决信号冲突的办法一般是采用CSMA/CD载波侦听多路访问/冲突检测技术CSMA/CD载波侦听多路访问/冲突检测技术 (Carrier Sense Multiple Access/Collision Detection) 基本工作过程如下: CSMA/CD的工作原理可简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发。
(Carrier Sense Multiple Access/Collision Detection)
CSMA/CD的工作原理可简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发。
交换式以太网(链路层)
在交换式以太网中,交换机的每个端口处于独立的冲突域中,终端主机独占端口的带宽
如何实现隔离冲突域:端口使用MAC地址表,目的MAC地址属于此端口下的数据才转发,否则丢弃
网桥只有2-4个端口(输入输出),且开始使用一对多MAC地址表(端口可能下接HUB,固为一对多)
交换机有多个端口,使用一对一MAC地址表
MAC地址:
厂家在网卡ROM中烧录的全球唯一的物理地址
相比之下IP地址为由操作系统在RAM中设置
48位二进制数,常用12位16进制数标识,如:00 - E0 - FC - 01 - 23 - 45
前24位由OUI组织分配给厂家
后24位由厂家分配
MAC地址表
MAC地址表初始化:交换机刚启动时,MAC地址表内无表项
MAC地址表的获取查看后续ARP协议说明
简单说明:主机需要与网络中的另一主机或网络设备通信时,需要先发ARP广播请求,目标为广播,源为自己的MAC。此时交换机收到帧即可做相应映射。 Learning,交换机初始化时,MAC地址表是空的。交换机将使用收到的源MAC地址在MAC表中新建一个条目。然后将MAC地址与收到该帧的端口进行配对(映射),形成CAM表或称之为MAC-Address-Table。
常用物理介质
双绞线(Twisted Pair)

STP(Shielded)屏蔽
UTP(Unshielded)非屏蔽
光纤
 光纤连接器种类很多,常用的连接器包括ST,FC,SC,LC连接器。(此处距离为多模距离)
单模光纤(只能传输单一模式的光,无模间色散,脉冲展宽低,适用长距离传输)
多模光纤(同时传输多种模式的光,模间色散大,脉冲展宽高,局域网短距传输)
双工模式
同一物理链路上相连的两台设备的双工模式必须保持一致。
半双工(half-duplex mode)
1、通信双方都能发送和接收数据,但不能同时进行。当一台设备发送时,另一台只能接收,反之亦然。对讲机是半双工的典型例子。
冲突域
全双工(full-duplex mode)
通信双方都能同时接收 和发送数据。电话网络是典型的全双工例子。
无冲突
以太网帧结构
以太网是根据IEEE 802.3标准来管理和控制数据帧的
通信协议的概念

不同协议栈用于定义和管理不同网络的数据转发规则
什么是协议:为了使数据可以在网络上传输到目的地,所有设备要使用相同的语言
决定数据的格式和传输的一组规则或者惯例
OSI分层参考模型
 国际标准化组织ISO 于1984 年提出了OSI RM ( Open System Interconnection Reference Model,开放系统互连参考模型)。OSI参 考模型很快成为了计算机网络通信的基础模型。 OSI参考模型具有以下优点:简化了相关的网络操作;提供了不同厂商 之间的兼容性;促进了标准化工作;结构上进行了分层;易于学习和操 作。
OSI模型相关概念
上层协议:--关注逻辑数据关系的协议
低层协议:--关注物理数据流的协议
思科解释
上三层指定终端中的应用程序如何通信,以及如何与用户交流
下四层指定数据如何通过物理介质,进行端到端的传输
每一层都使用自己的协议实现对等通信(平行/对等层),每一层都利用下层提供的服务与对等层通信
PDU:指对等层之间传递的数据单位!各层使用控制信息对数据进行封装,封装后的数据统称为协议数据单元(Protocol Data Unit)
原始数据单元
应用层:APDU
表示层:PPDU
会话层:SPDU
物理层的 PDU是 数据位(bit), 数据链路层的 PDU是 数据帧(frame), 网络层的PDU是 数据包(packet),或分组 传输层的 PDU是 数据段(segment), 封装了对应层协议报头的PDU称为报文(message)。
OSI层次优点:将服务、接口、协议这3个概念区分开来
服务:某一层为上一层提供什么功能
接口:上一次如何使用下一层服务
协议:如何实现本层的服务
7层:应用层
定义:OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。
应用层是应用程序之间的接口,应用程序并不位于应用层,而只是与应用层协议进行交互
(多终端使用同一协议的应用程序)
表示层
定义:提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
还提供数据压缩解压、加密解密
会话层
定义:负责建立、管理和终止表示层实体之间的通信会话,将用户数据分开。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
工作模式:单工、半双工、全双工
会话层只建立会话并确认会话的工作模式,以及区分数据,不参与具体的数据传输
例子:同时打开多个程序,必须保证浏览器的数据不会发送到QQ,QQ的数据不会和视频的混淆~
传输层
定义:建立、维护、管理端到端的连接(进程/协议),提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。
1、非面向连接的:无连接服务是指数据传输之前无需与对端进行任何信息交流,直接构造数据分组,直接发送出去!
2、面向连接服务:是指在数据传输之前,需要交换一些控制信息,建立连接,然后在传输数据,数据传输接收后还需拆除连接(虚连接)
传输层将数据进行分段,并重组为数据流;位于传输层的服务接收来自应用程序的各种数据,并将它们合并到一个数据流中
传输层流量控制:确保数据完整性!让接收方能控制发送方发出的数据量
控制方式:缓冲、窗口技术、拥塞避免
缓冲
接收方缓冲区数据满时,发送信号:未准备好,停止发送
缓冲区数据处理完毕,发送信号:准备就绪,继续发送
传输层窗口机制:用于控制未确认的数据段的数量!
窗口大小决定收到对方确认前可发送的信息量(字节)
例:窗口为8字节,则每次传输8字节都需确认;窗口为2048字节,则每次传输2048字节再确认
传输层还和会话层紧密合作,将来自不同应用程序的数据分开,这称为会话多路复用
客户端打开多个浏览器会话,服务器则将这些会话的数据分开以区分传输
网络层
定义:提供逻辑地址,供路由器确定路径;负责在位于不同网络中的设备之间进行数据传输。
网络层使用的数据分组有2种:
1、数据分组:用于互联网络中传输用户数据
用于支持用户数据的协议称为被路由协议(用户数据是被路由的数据)
2、路由更新分组:用于更新有关互联网络中路由器连接的网络信息
发送路由更新分组的协议称为路由选择协议
数据链路层
定义:控制物理层和网络层之间的通信(如使用网络层ARP获取目标MAC地址 ),将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质(网卡都绑定唯一的MAC地址),并进行差错检测(FCS效验,结果不对则丢弃)。
IEEE802.3包含两个子层
介质访问控制MAC(Ethernet_II仅有此层)
定义了如何通过介质传输分组(物理地址和逻辑拓扑)。采用“先到先服务”的访问方式
逻辑链路控制LLC
负责识别网络层协议并对其进行封装。工作原理类似于:收到帧后,查看LLC报头,确定要将分组交给谁。
1层:物理层
定义:在设备之间传输比特流,规定了电平、速度和电缆针脚。
举例:
OSI层次举例: 发送信息是从上往下处理: ①甲地写信的人(应用层处理,如QQ) ②防止泄密,对信息进行了加密(表示层处理,数据格式化、加密、解密) ③这个人可能会写很多信件(多个会话),为了区分这些信是写给哪些人的将每封信<会话>的信息记录下来(会话层处理,建立、维护和管理会话) ④选择传递方式(如顺丰、邮局,传输层处理,可靠传输/不可靠传输) ⑤顺丰/邮局处理,信件该发往哪里(网络层处理,IP寻址/路由选择) ⑥将信件/信息进行打包处理(数据链路层处理,控制网络层与物理层之间的通信。) ⑦将同目的地的信件包裹采用空运(光纤)、陆运(双绞线)等方式送达目的地(物理层处理,比特流传输)乙地收信人。 邮局对于写信的人来说是下层,运输部门是邮局的下层----下层是为上层提供服务的 写信人与收信人之间使用相同的语言----即协议 甲乙两地邮局之间的约定----同层次之间使用相同的协议 --------------------- 版权声明:本文为CSDN博主「swordsf」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/swordsf/article/details/72229267
TCP/IP协议栈详解
TCP/IP分层模型
  TCP/IP模型将网络分为四层。TCP/IP模型不关注底层物理介质,主要 关注终端之间的逻辑数据流转发。TCP/IP模型的核心是网络层和传输层, 网络层解决网络之间的逻辑转发问题,传输层保证源端到目的端之间的 可靠传输。最上层的应用层通过各种协议向终端用户提供业务应用。 
应用层
通过各种协议向终端用户提供业务应用
对应OSI上三层
传输层
核心层:保证源端到目的端之间的可靠传输
网络层
核心层:解决网络的逻辑转发问题
网络接口层
对应OSI的2个子层:数据链路层、物理层
TCP/IP不关注底层物理介质,主要关注终端之间的逻辑数据流转发
TCP/IP数据封装
应用数据需要经过TCP/IP每一层处理之后才能通过网络传输到目的端, 每一层上都使用该层的协议数据单元PDU(Protocol Data Unit)彼此交 换信息。不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予 了不同的名称 协议栈逐层向下传递数据,并添加报头 和报尾的过程称为封装。 
应用层PDU
下发
传输层Segment(数据段)
添加TCP报头
网络层Packet(数据包)
添加IP报头
数据链路层Frame(数据帧)
添加链路层报头
物理层Bit(比特流)
转为Bit
终端之间的通信
 数据包在以太网物理介质上传播之前必须封装头部和尾部信息,封装后 的数据包称为数据帧,数据帧中封装的信息决定了数据如何传输。
数据帧中封装的信息决定了数据如何传输,帧有两种格式,哪种格式由TCP/IP协议簇中的网络层决定
帧格式
 以太网数据帧长度在64-1518字节之间。 这两种格式的主要区别在于Ethernet II格式中包含一个Type字段, 标识以太帧处理完成之后将被发送到哪个上层协议进行处理,IEEE 802.3格式中,同样的位置是Length字段。 以太帧中还包括源和目的MAC地址,分别代表发送者的MAC和接收者的MAC 还有帧校验序列字段FCS,用于检验传输过程中帧的完整性。
Ethernet II
以太网中大多数的数据帧使用的是Ethernet II格式。  Ethernet_II的帧中各字段说明如下: 1. DMAC(Destination MAC)是目的MAC地址。DMAC字段长度为6 个字节,标识帧的接收者。 2. SMAC(Source MAC)是源MAC地址。SMAC字段长度为6个字节, 标识帧的发送者。 3. 类型字段(Type)用于标识数据字段中包含的高层协议,该字段长 度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字 段取值为0x0806的帧代表ARP协议帧。Ethernet_II中使用的协议,取值都≥1536(0x0600) 4. 数据字段(Data)是网络层数据,最小长度必须为46字节以保证帧 长至少为64字节,数据字段的最大长度为1500字节以保证帧 长不大于1518字节。  5. 循环冗余校验字段(FCS)提供了一种错误检测机制。该字段长度 为4个字节。
Type值≥1536(十六进制0x0600)
Type字段用于标识数据字段中包含的高层协议
0x0800的帧代表IP协议帧
0x0806的帧代表ARP协议帧
数据字段(Data)是网络层数据, 最小长度必须为46字节以保证帧长至少为64字节, 数据字段的最大长度为1500字节以保证帧长不大于1518字节。
IEEE 802.3
 IEEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被 802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和 SNAP字段。 1. Length字段定义了Data字段包含的字节数。(区别于Ethernet_II的Type,标识高层协议) 2. 逻辑链路控制LLC(Logical Link Control)由目的服务访问点DSAP ( Destination Service Access Point ) 、源服务访问点SSAP (Source Service Access Point)和Control字段组成。 3. SNAP(Sub-network Access Protocol)由机构代码(Org Code) 和类型(Type)字段组成。Org Code三个字节都为0。Type字段的 含义与Ethernet_II帧中的Type字段相同。IEEE802.3帧根据DSAP和 SSAP字段的取值又可分为以下几类: 1)当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware- ETHERNET帧,用来承载NetWare类型的数据。 2 ) 当DSAP 和SSAP 都取特定值0xaa 时, 802.3 帧就变成了 ETHERNET_SNAP帧。ETHERNET_SNAP帧可以用于传输多种协议。 3)DSAP和SSAP其他的取值均为纯IEEE802.3帧。(一般不用了) DATA最小长度必须为38字节以保证帧长至少为64字节,数据字段的最大长度为1492字节以保证帧长不多于1518字节。
Length值≤1500(或十六进制0x05DC)
Length字段定义了Data字段包含的字节数
读取LLC,判断承载数据类型及交付给谁
DATA最小长度必须为38字节以保证帧长至少为64字节, 数据字段的最大长度为1492字节以保证帧长不大于1518字节。
只有在一些协议里,如STP协议:交换机之间相互发送控制BDU的时候使用此协议
以太网数据帧(2种类型统一)长度在64-1518字节之间。
数据帧传输
 以太网在二层链路上通过MAC地址来唯一标识网络设备,并且实现局域网上网络设备之间的通信。
数据链路层基于MAC地址进行帧的传输,以太网在二层链路上通过MAC地址来唯一标识设备,并实现局域网中网络设备之间的通信。
以太网的MAC地址
 MAC地址包含两部分: 前24 比特是组织唯一标识符( OUI , Organizationally UniqueIdentifier),由IEEE统一分配给设备制造商。例如,华为的网络产品的 MAC地址前24比特是0x00e0fc。 后24位序列号是厂商分配给每个产品的唯一数值,由各个厂商自行分配(这里所说的产品可以是网卡或者其 他需要MAC地址的设备)。
MAC地址全球唯一,长度为48Bit,通常使用十六进制表示
帧的发送方式
单播
指从单一的源端发送到单一的目的端。 在冲突域中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。  MAC地址共6字节(48bit)
MAC第一字节第8bit固定为0
组播
组播转发可以理解为选择性的广播,主机侦听特定组播地址,接收并处理目的MAC地址为该组播MAC地址的帧。 
MAC第一字节第8bit固定为1
广播
表示帧从单一的源发送到共享以太网上的所有 主机,广播方式会产生大量流量,导致带宽利用率降低,进而影响整个网络的性能。 
MAC地址所有字节为FF:FF:FF:FF:FF:FF
帧的发送和接收
目的MAC非本机,丢弃
目的MAC为本机,接收
1、进行FSC帧序列校验,与本机计算的值进行对比确保完帧的完整性
不同,丢弃
相同,解封头部尾部,并根据头部Type字段确定发送给上一层相应协议处理。
Type: 0x0800 IP 0x0806 ARP
网络层IP编址协议
有了MAC地址为什么还要IP地址
特性:MAC是烧录在ROM中无法改变,IP则是在RAM中且随时改变 举个例子,你的身:份证号是你的唯一标识,不会重复,而且一出生落户就有了(网卡一出厂就有MAC了)。 但是我要与你通信(寄信给你),我就在信封上写一个“姓名+身:份证号”,你觉得能送到你手中吗? 明显不能。 身:份证号前6位能定位你出生的县,MAC地址前几位也可以定位生产厂家。但是你出生后是会离开这个县的(哪怕真定位到县也找不到你),网卡出厂后是要卖到全世界各地使用的。 这个时候,就需要根据网卡接入因特网的实际地点(或者说网络拓扑上的地点)分配一个IP,就像你换了个新家要有对应的门牌和邮编,以这样规则的编码才能在网络中一级一级地向下找到你,就像邮编能逐级定位国家、省、县、街道一样。
从功能上来说:MAC处于二层不能隔离广播;IP处于三层可以隔离广播,并作为网络寻址和区分主机是否在一个网段,MAC地址做不到
其他待续
网际协议IP(Internet Protocol
网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一,与 IP 协议配套使用的还有三个协议:
网际控制报文协议 ICMP
(Internet Control Message Protocol)
网际组管理协议 IGMP
(Internet Group Management Protocol)
地址解析协议 ARP
(Address Resolution Protocol)
网际:连接多个网络
IP实现两个基本功能:寻址和分段
网络通信遇到的问题
不同的寻址方案
不同的最大分组长度
不同的超时控制
不同的差错恢复方法
不同的状态报告方法
不同的路由选择技术
不同的服务(面向连接服务和无连接服务)
解决问题的办法:每层都有每层的规则和问题,封装在报文头里,由头来解决
上层协议类型
 本例中的帧头部Type字段表示该帧需要上送到IP协议进行处理。以下将介绍帧的头部和尾部被剥掉后, IP协议将如何处理帧中的数据。
在剥掉帧的头部和尾部之前,网络设备需要根据帧头中Type字段确定下一步将帧发送到哪个上层协议进行处理。
IP报文头部(详记注释内容)
 IP报文头部长度为20到60字节,IP报文头部信息用于指导网络设备对报文进行路由和分片。 需详记报文头部结构及英文 占位
IP报文头部用于指导网络设备对报文进行路由和分片。同一个网段内的数据转发通过链路层即可实现,而跨网段的数据转发需要使用网络设备的路由功能。
IP包分片

网络中转发的IP报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度(MTU),则报文就需要分割成若干个较小的片段才能够在链路上传输。将报文分割成多个片段的过程叫做分片。
标识符(Identification) 标识符用于识别属于同一个数据包的分片
标志(Flags) 用于判断是否已经收到最后一个分片。最后一个分片的标志字段设置为0,其他分片的标志字段设置为1
目的端在收到标志字段为0的分片后,开始重组报文
片偏移(Fragment Offset)表示每个分片在原始报文中的位置。第一个分片的片偏移为0, 第二个分片的片偏移表示为紧跟第一个分片后的第一个比特的位置。
如果首片报文包含1259比特,那么第二分片报文的片偏移字段值就应该为1260。
子主题
生存时间TTL
 Time to Live
报文在网段间转发时,如果网络设备上的路由规划不合理,就可能会出 现环路,导致报文在网络中无限循环,无法到达目的端。
环路发生后,所有发往这个目的地的报文都会被循环转发,随着这种报文逐渐增多, 网络将会发生拥塞。
为避免环路导致的网络拥塞,IP报文头中包含一个生存时间TTL(Time To Live)字段,报文每经过一台三层设备,TTL值减1。
初始TTL值由源端设备设置,一般默认为255。当报文中的TTL降为0时,报文会被丢弃。
丢弃报文的设备会根据报文头中的源IP地址向源端发送ICMP错误消息。
协议号Protocol

目的端的网络层在接收并处理报文以后,需要根据协议字段决定下一步对报文该做如何处理
协议字段标识了将会继续处理报文的协议。
可以是网络层协议,如ICMP(Internet Control Message Protocol,因特网控制报文协议),ARP
或是上层协议,如TCP(Transmission Control Protocol , 传输控制协议, 对应值0x06 ) 、UDP ( User Datagram Protocol,用户数据包协议,对应值0x11)。
源地址和目的地址
根据源和目的IP地址可以判断目的端是否与发送端位于同一网段,如果二者不在同一网段,则需要采用路由机制进行跨网段转发。
IP编址

IP地址用来标识网络中的设备,具有IP地址的设备可以在同一网段内或跨网段通信。
网络号(网络地址):表示IP地址所属的网段
主机号:唯一表示本网段中的某台网络设备
特殊地址
网络地址:表示一个网段
主机位全为0,如192.168.1.0
广播地址:所有设备接收
主机位全为1,如192.168.1.255
进制及进制转换
 网络中的数据可以采用二进制、十进制或十六进制来表示,
进制:也就是进位计数制,如满2进位,满10进位,满16进位
二进制每一位只有0和1两个值,基值为2,二进制数的每一位都可以用2的x次幂来表示,x表示二进制数的位数。 十六进制的每一位可以有16个数值,范围为0-F(即0-9和A-F),A对应十进制的10,F对应十进制的15(二进制的1111)。
如十进制,个位9,十位99,百位999,满10即向左进一位
二进制,右到左1位1,2位11,满2即向左进一位
进制转换列表

记忆二进制8个比特位各自2的0-7次方和数值
二进制和十进制转换
 32位的IP地址分为4个字节,每个字节有256个取值。因此,理论上IPv4可以有4,294,967,296个IP地址,但实际上只有其中一部分地址可以分配给网络设备使用。 将二进制格式的IP地址转换为十进制格式时,需要把二进制中每一位1所代表的值加在一起,得出IP地址的十进制值。
IP地址分类
 IPv4地址被划分为A、B、C、D、E五类,每类地址的网络号包含不同的字节数。 A类,B类和C类地址为可分配IP地址,每类地址支持的网络数和主机数不同。
单播地址
A类 网络位8位,第一字节最高位固定为0
0 网络位8bit | 主机位24bit
B类 网络位16位,第一字节最高位固定为10
10 网络位16bit | 主机位16bit
C类 网络位24位,第一字节最高位固定为110
110 网络位24bit | 主机位8bit
D类 组播 第一字节最高位固定为1110
E类 保留 第一字节最高位固定为1111
一般用于科研
IP地址类型

私有地址
为主机分配私网地址节省了公网地址,可以用来缓解IP地址短缺的问题。企业网络中普遍使用私网地址,不同企业网络中的私网地址可以重叠。默认情况下,网络中的主机无法使用私网地址与公网通信;当需要与公网通信时,私网地址必须转换成公网地址。
A类:10.0.0.0~10.255.255.255; B类:172.16.0.0~172.31.255.255; C类:192.168.0.0~192.168.255.255
日常生活中使用私有地址访问外网,需要使用NAT(网络地址转换/翻译),转换成公网地址访问
特殊地址
特殊IP地址,如127.0.0.0网段中的地址为环回地址, 用于诊断网络是否正常。 IPv4中的第一个地址0.0.0.0表示任何网络,这个地址的作用将在路由原理中详细介绍。 IPv4中的最后一个地址255.255.255.255是0.0.0.0网络中的广播地址。
环回地址127.0.0.0~127.255.255.255; 任何网络0.0.0.0 ; 广播地址255.255.255.255;
网络通信简述

已知目的IP地址
检查是否同一网段
是
下发报文到底层协议处理
否
获取下一跳路由器IP
未知目的IP地址
获取下一跳路由器IP
下发报文到底层协议处理
子网掩码

作用:用于区分IP地址的网络部分和主机部分,掩码表示方法和IP地址相同采用点分十进制
子网掩码和IP地址做一个与运算,告诉IP设备(三层设备)只要把数据发送到下一跳某个网络号的设备中即可,不需要精确发送到某台主机(发送到具体主机是交换机的工作):掩盖主机位(0)标识网络位(1)
IP地址和子网掩码都转换为二进制做逻辑与运算的结果为本网段的网络号,是区分不同网段的方法。
与运算
1与0=0
1与1=1
0与1=0
0与0=0
二进制表示:掩码中1表示网络位,0表示主机位
支持的网络数越多,主机数越少
默认子网掩码:
A类IP地址子网掩码默认为8位,255.0.0.0=11111111.00000000.00000000.00000000
B类IP地址子网掩码默认为16位,255.255.0.0=11111111.11111111.00000000.00000000
C类IP地址子网掩码默认24位,255.255.255.0=11111111.11111111.11111111.00000000
地址规划

通过掩码可以判断主机所属网段、广播地址、可用主机数;
例:IP192.168.1.7 ,子网掩码24位
可判断主机位于192.168.1.0/24网段
可得到该网段广播地址192.168.1.255
主机数位2^8次方=256(32位-24位=8),减去网络地址和广播地址,可知可用IP地址为254个
可变长子网掩码VLSM
Variable Length Subnet Mask,可变长度子网掩码
VLSM借位方向--->增加了路由表的大小
有类IP地址缺陷

企业网中划分多个网段,使用默认子网掩码的编制方案,IP地址使用率很低,造成IP地址浪费。
可变长子网掩码
本质为网络位向主机位借位
一个子网位有2个取值,因此可划分子网数位2^n次方,n为借位数
变长子网掩码块的大小
如1个完整的C类子网块大小为256(2^8次方)
1个子网位,子网数2^1次方=2,每个子网块大小为256/2=128(或可理解为11111111被借1位变成01111111,可得128个主机数(0-127))
网络号1:192.168.1.0/25,可用IP范围为1-126; 网络号2:192.168.1.128/25,可用IP范围为129-254;两个子网掩码都为255.255.255.128(11111111.11111111.11111111.10000000)
2个子网位,子网数2^2次方=4,块大小为256/4=64
网络号1:192.168.1.0/26,可用IP范围为1-62; 网络号2:192.168.1.64/26,可用IP范围为65-126; 网络号3:192.168.1.128/26,可用IP范围为129-190; 网络号4:192.168.1.192/26,可用IP范围193-254; 四个子网掩码都为255.255.255.192(11111111.11111111.11111111.11000000)
以此类推
VLSM内块之间互ping
块之间
192.168.1.10/26 和192.168.1.100/26 无法ping通
(属不同网段,/26为借2位,子网块大小64)
块重叠
192.168.1.10/26 和192.168.1.1-62/25可以ping通
两个网段的主机位1-63重叠,可以ping通
注意:在同一个局域网内、在同一个VLAN中的(未测试)同一个网段/子网,或块重叠的PC,不用网关可以互通
举例:
 此图不准,按后续案例,D还需分配2个VLAN,每个VLAN容纳200个用户;标注ABC各连一个以太网 
需求1:使用网段172.16.0.0/16
需求2:IP范围172.16.12.0 to 172.16.15.255
需求3:D分配2个VLAN,每个VLAN容纳200个用户
需求4:ABC各连接1个以太网,分别与1个24口交换机相连
分析
先判断需要划分几个网络
1、D有2个Vlan 2*≥200用户
2、ABC到D路由连接各需要1个网络 3*≥2用户
3、ABC到24口交换机各一个网络 3*≥24用户
一共需要8个网络,按先大后小的原则划分
 
1、2个VLAN, 2^8=256-2 大于需求200, 子网不借位,网段不能划分,故VLAN1使用172.16.12.0/24;VLAN2使用172.16.13.0/24网段
2、3个交换机≥24用户,2^5=32-2 大于需求24 ,子网借位3位,可用网段2^3=8个,块大小32,可使用网段172.16.14.0/27(00000000);172.16.14.32/27(00100000);172.16.14.64/27(01000000)...
3、3个路由器≥2用户,2^,2=4-2 大于等于2 子网借位6位,可用网段2^6=64个,块大小4,因172.16.14.0网段使用到172.16.14.64/27,且之前使用的块大小为32,故可从172.16.14.96,开始使用,分别使用172.16.14.96/30;172.16.14.100/30;172.16.14.104/30;
大型金融网络划分案例

总网段10.0.0.0/8
按省、直辖市划分为34个区域
1、先判断子网借位数:因2^6=64,>34个子网,故需向右借6位;借位6+原子网占位8=14 ,故子网位表示为 /14
2、块大小(每个子网可用主机数位):2^(32-14)次方=262144,块过大,不便于手工计算下一网络号,故使用步长的计算方法
3、快速计算网络号的方法(步长)
1、先判断变长子网掩码断位,本例为10.0.0.0
2、子网掩码第二段中(11111100)借位6位,剩余2位,
3、步长为本段剩余位数2的2次方=4(4*第三段2^8*第四段2^8一样得块大小262144)
4、由步长推算网络号:如10.0.0.0/14;10.4.0.0/14;10.8.0.0/14.....10.252.0.0/14 共64个
每个省大约10个地市
一个省分配一个子网网络号,进行子网再划分,如福建10.4.0.0/14,分出10个地市
1、子网数:2^4=16,右借4位,原/14 现/18
2、子网掩码第三段中(11000000)借位2位,剩余6位,
2、步长:为本段剩余位数2的6次方=64,或256/借位2^2=64
3、得网络号:10.4.0.0/18;10.4.64.0/18;10.4.128.0/18...10.7.128.0/18;10.7.192.0/18 共16个
每个地市约50个网点
厦门10.4.64.0/18,再分50个网点
1、子网数:2^6=64,右借6位,原/18 现/24
2、子网掩码第三段(11111111)借位8位,剩余0位
3、步长:2的0次方=1,或256/2^8=1
4、得网络号:10.4.64.0/24,10.4.65.0/24,,,10.4.127.0/24 共64个
5、只能到10.4.127.0/24,再往后为 10.7.128.0/18的其他市区段
无类域间路由CIDR(超网)
 无类别域间路由,Classless Inter-Domain Routing, 
CIDR借位方向<---减小路由表大小
CIDR将多个路由集中起来,使一个IP地址代表主要骨干提供商服务的几千个IP地址,减小路由表规模,从而减轻Internet路由器的负担。
超网内不同网段可实现通信,但一般不这么操作

网关

如果目的主机与源主机不在同一网段,报文需要先转发到网关,然后通过网关将报文转发到目的网段
网关是指接收并处理本地网段主机发送的报文并转发到目的网段的设备,网关必须知道目的网段的IP地址
网关设备上连接本地网段的接口地址即为该网段的网关地址。
IP协议原理
图解IP协议
网络层ICMP协议
定义
为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
ICMP(Internet Control Message Protocol)英特网控制消息协议 是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送控制报文,传递差错、控制、查询等信息。
ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
ICMP 不是高层协议,而是 IP 层的协议。
ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。
从技术角度来说,就是“错误侦测与回报机制”
ICMP报文种类
ICMP 差错报告报文
ICMP 询问报文
作用
重定向Redirect
 网关RTB收到报文后,检查报文信息,发现报文应该转发到与源主机在同一网段的另一个网关设备RTA,因为此转发路径是更优的路径,所以RTB会向主机发送一个Redirect消息,通知主机直接向另一个网关RTA发送该报文。主机收到Redirect消息后,会向RTA发送报文,然后RTA会将该报文再转发给服务器A。
用于支持路由功能,确定更优路径
1)当路由器从某个接口收到数据还需要从相同接口转发该数据时;
差错检测Echo
通过Echo Request和Echo Reply来请求查询和响应某些信息,进行差错检测
常用于诊断源和目的地之间的网络连通性,还可以提供其他信息,如报文往返时间等。
ICMP数据包格式

ICMP消息封装在IP报文中
Type字段为消息类型8bit
错误类型
Code字段为消息具体参数8bit
错误具体的原因
Checksum字段校验消息完整与否16bit
图下方报文内容包含32bit可变参数
一般不用,设置为0
Redirect消息中,用来指定网关IP地址,主机以此进行重定向
Echo请求消息中,包含标识符和序号,源端向目的端发送多个Echo请求消息时,需要根据标识符和序号将Echo请求消息和回复消息一一对应。
ICMP消息/编码类型
 此处仅列部分类型:完整消息 编码类型 参考百度
记忆常用类型、编码及对应描述
3类(目标不可达)错误从大到小:网络-主机-协议-端口
ICMP应用
Ping

检测网络连通性,同时收集相关信息
Ping常用配置参数
Ping常用的配置参数说明如下: 1. -a source-ip-address指定发送ICMP ECHO-REQUEST报文的源IP地 址。如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHO REQUEST 报文发送的源地址。 2. -c count指定发送ICMP ECHO-REQUEST报文次数。缺省情况下发 送5个ICMP ECHO-REQUEST报文。 3. -h ttl-value指定TTL的值。缺省值是255。 4. -t timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHOREPLY 的超时时间。 第
Ping利用ICMP Echo请求消息(Type值为8)来发起检测目的可达性。目的端收到ICMP cho请求消息后,根据IP报文头中的源地址向源端发送ICMP Echo回复消息(Type值为0)。
Tracert

基于报文头中的TTL值来逐跳跟踪报文的转发路径。
为了跟踪到达某特定目的地址的路径,源端首 先将报文的TTL值设置为1。该报文到达第一个节点后,TTL超时,于是 该节点向源端发送TTL超时消息,消息中携带时间戳。然后源端将报文 的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超 时消息,以此类推,直到报文到达目的地。这样,源端根据返回的报文 中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往 返时间。
是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。
Tracert常用的配置参数
Tracert常用的配置参数说明如下: 1. -a source-ip-address指定tracert报文的源地址。 2. -f first-ttl指定初始TTL。缺省值是1。 3. -m max-ttl指定最大TTL。缺省值是30。 4. -name使能显示每一跳的主机名。 5. -p port指定目的主机的UDP端口号。
如果IP数据包在到达目的地之前TTL值已经降为0,则收到IP数据包的网络设备会丢弃该数据包,并向源端发送ICMP消息通知源端TTL超时。
跟踪报文转发路径应用举例
源端(RTA)向目的端(主机B)发送一个UDP报文(eNSP使用此命令默认发送的是UDP,真实设备此命令发送的是ICMP Echo Request,使用tracerouter才发送UDP),TTL值为1,目的 UDP端口号是大于30000的一个数,因为在大多数情况下,大于30000 的UDP端口号是任何一个应用程序都不可能使用的端口号。 第一跳(RTB)收到源端发出的UDP报文后,判断出报文的目的IP地址 不是本机IP地址,将TTL值减1后,判断出TTL值等于0,则丢弃报文并 向源端发送一个ICMP超时(Time Exceeded)报文(该报文中含有第 一跳的IP地址10.0.0.2),这样源端就得到了RTB的地址。 源端收到RTB的ICMP超时报文后,再次向目的端发送一个UDP报文, TTL值为2。 第二跳(RTC)收到源端发出的UDP报文后,回应一个ICMP超时报文, 这样源端就得到了RTC的地址(20.0.0.2)。 以上过程不断进行,直到目的端收到源端发送的UDP报文后,判断出目 的IP地址是本机IP地址,则处理此报文。根据报文中的目的UDP端口号 寻找占用此端口号的上层协议,因目的端没有应用程序使用该UDP端口 号(因上面使用了超大端口号),则向源端返回一个ICMP端口不可达(Destination Unreachable) 报文。 源端收到ICMP端口不可达报文后,判断出UDP报文已经到达目的端, 则停止Tracert程序,从而得到数据报文从源端到目的端所经历的路径 (10.0.0.2;20.0.0.2;30.0.0.2)。
网络层ARP协议
图解ARP协议
Address Resolution Protocol 地址解析协议
通过目的IP地址获取MAC地址,实现数据链路层的可达性

实现从 IP 地址到 MAC 地址的映射
光有IP不知道MAC还有一个问题,因IP是可变的,目的端IP改变后无法发送数据到指定设备
ARP数据包格式
 【注意】ARP报文没有IP报头 网络设备通过ARP报文来发现目的MAC地址。ARP报文中包含以下字段: 1. Hardware Type表示硬件地址类型,一般为以太网; 2. Protocol Type表示三层协议地址类型,一般为IP(0x0800); 3. Hardware Length和Protocol Length为MAC地址和IP地址的长度, 单位是字节; 4. Operation Code指定了ARP报文的类型,包括ARP Request和ARP Reply; 5. Source Hardware Address指的是发送ARP报文的设备MAC地址; 6. Source Protocol Address指的是发送ARP报文的设备IP地址; 7. Destination Hardware Address指的是接收者MAC地址,在ARP Request报文中,该字段值为0; 8. Destination Protocol Address指的是接收者的IP地址 ------------------- Hardware type :硬件类型,标识链路层协议 Protocol type: 协议类型,标识网络层协议 Hardware size :硬件地址大小,标识MAC地址长度,这里是6个字节(48bti) Protocol size: 协议地址大小,标识IP地址长度,这里是4个字节(32bit) Opcode: 操作代码,标识ARP数据包类型,1表示请求,2表示回应 Sender MAC address :发送者MAC Sender IP address :发送者IP Target MAC address :目标MAC,此处全0表示在请求 Target IP address: 目标IP
ARP Request报文中,Destination Hardware Address 字段值为0,帧头中目的MAC地址为FFFFFF(广播)
 ETH_II报头 目的MAC为广播地址 ARP报文中 目的MAC设置为0
ARP缓存 (ARP Cache)
存放IP地址和MAC地址的关联信息。
设备发送数据前,先查找ARP缓存表
有目的MAC,采用,封装帧、发送
无目的MAC,发送ARP Request报文,获取
目标设备位于其他网络,采用网关MAC,报文发送给网关,再由网关转发(代理ARP)
缓存表关联信息存在时效性,过期自动删除,并且如果电脑或者通信设备重启的话,这张表就会清空;
ARP工作原理
ARP请求(ARP Request)

1、源主机A的ARP缓存表不存在目的主机C的MAC地址,需要发送ARP Request 来获取MAC
2、ARP Request 封装在以太帧中的IP报文(PDU)
3、Operation Code 设置为Request
4、ARP Request 报文包含源IP,目的IP,源MAC,目的MAC,其中目的MAC为(00-00-00-00-00-00)
先有"自我介绍",然后才是询问
5、帧头目的MAC为广播地址FF-FF-FF-FF-FF-FF,故ARP Request报文会在整个网络上传播,网关会阻止该报文发送到其他网络上。
ARP响应(ARP Reply)

主机C接收到ARP Request 报文后,检查目的IP是否为自身IP
不匹配
不响应/丢弃
匹配
将源主机MAC和IP记录到自己的ARP缓存表
通过ARP Reply 响应

含目的IP地址,源IP(本机),目的MAC,源MAC(本机)
Operation code 设置为 Reply
ARP Reply 报文以单播方式发送
APR缓存
主机A收到ARP Reply,检查ARP报文中目的MAC与自己的是否匹配
否
丢弃
是
缓存主机C的IP和MAC到表
ARP代理 (Proxy ARP)
 位于不同网络的设备在不配置网关的情况下,可通过ARP代理实现通信。
图解代理ARP
原理:当ARP请求的目标跨网段时,网关设备收到此ARP Request,会用自己的MAC地址返回给请求者
 上面这张图中,电脑发送ARP请求服务器8.8.8.8的MAC地址,路由器(网关)收到这个请求时会进行判断,由于目标8.8.8.8不属于本网段(即跨网段),此时便返回自己的接口MAC地址给PC,后续电脑访问服务器时,目标MAC直接封装为MAC192.168.1.254。
代理ARP本质是一个"善意的欺骗",是一个"错位"的映射。
 从图中我们看到服务器地址的正常映射是,而路由器返回给电脑的,却是 。不管是不是"欺骗",至少最终电脑可以与外网的服务器实现通信,以PC Ping Server为例=>
实际网络中,代理ARP由网络中的网关设备来执行
1.网关开启代理ARP功能
2.网关只响应那些在自己的路由表里能找到的网段
实际通信中,无论同网段还是跨网段,绝大情况下使用正常ARP,而非代理ARP,因为代理ARP“受制于沿途网关设备”
如网关连接电脑的接口没有开启(不支持)代理ARP功能
 此时便造成一个尴尬的情况:电脑反复询问到8.8.8.8的MAC地址,路由器收到之后,处理流程跟正常ARP是一致的,"问自己的则回复,不是问自己的则丢弃"。因此,当网络通信采用代理ARP时,可能会"受制于沿途网关设备",造成网络通信故障。
代理ARP仅仅是正常ARP的一个拓展使用,是可选项不是不要项
代理ARP有特定的应用场景,与网关/路由的设置有直接关系::当电脑没有网关/路由功能时,并且需要跨网通信时,则触发代理ARP。
正常环境下,都会通过DHCP协议或手工配置的方式得到IP和网关信息
即:有网关/路由功能,则不需要代理ARP
正常环境下,当用户接入网络时,都会通过DHCP协议或手工配置的方式得到IP和网关信息(所以不需要代理ARP)。
和正常ARP对比,如图:
当电脑没有网关时,PC Ping 8.8.8.8,采用代理ARP =>  当电脑有网关时,PC Ping 8.8.8.8,采用正常ARP => 
1、电脑没有网关---ARP直接询问目标IP对应的MAC(跨网段),采用代理ARP
路由回复的将是目标IP及网关MAC
2、电脑有网关---ARP只需询问网关IP对应的MAC(同网段),采用正常ARP
路由回复的将都是网关IP及网关MAC
3、正常APR和代理ARP,最终得到的都是同一个目标MAC地址:网关MAC
和正常ARP对比2,如图:
当电脑没有网关时(采用代理ARP ),PC 依次Ping 8.8.8.8、8.8.4.4、114.114.114.114=>  当电脑有网关时(采用正常ARP ),PC 依次Ping 8.8.8.8、8.8.4.4、114.114.114.114=> 
1、当电脑没有网关(采用代理ARP)时:"跨网段访问谁,就问谁的MAC"
2、当电脑有网关(采用正常ARP)时:"跨网段访问谁,都问网关的MAC"
3、无论哪种ARP,跨网段通信时,发送方请求得到的目标MAC地址都是网关MAC。
4、正常ARP第一次获取网关MAC后,后续通信不在需要重新进行ARP请求,而代理ARP每次访问新的外网地址,都需要再次请求
免费ARP(Gratuitous ARP)无理由ARP
 主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的 IP地址在网络上是否是唯一的,以避免地址冲突。
在没有人问自己的情况下,无缘无故自问自答
作用:探测IP地址是否冲突
IP发生变更后,主机将ARP Request 广播报文中的目的IP地址和自己的IP地址设置为相同
若IP已被使用,则已使用此IP的主机或网关会回应APR Reply报文

互怼,直到一方修改IP
IP未被使用或无ARP回应,收到广播的主机将更新自己ARP缓存表内和源主机IP相同的条目中的MAC
双机热备(有相应控制机制)
主机A IP:192.168.1.100 MAC:1111-1111-1111
主机A宕机
主机B IP:192.168.1.100 MAC:2222-2222-2222
主机B接管
发送ARP Request 广播
收到广播的主机更新自己ARP缓存表内和源主机IP相同的条目中的MAC::1111-1111-1111变为2222-2222-2222
传输层协议

传输控制协议TCP(Transmission Control Protocol)

主机通信之前,需要TCP在他们之间建立可靠连接(端到端)
TCP端口号
每台主机可以拥有多个应用端口,每对端口号、源和目标IP地址的组合唯一地标识了一个会话
知名端口:网络服务使用的固定端口 0-1023,如FTP、HTTP、Telnet...
动态端口:不固定分配给某个服务 1024-65535
TCP头部
 源端口和目的端口,各占2个字节,分别写入源端口和目的端口; 序号,占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始; 确认号,占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。例如,B收到了A发送过来的报文,其序列号字段是501,而数据长度是200字节,这表明B正确的收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701; 数据偏移Header Length/Offset,占4位,它指出了 TCP报文段的数据起始处 距离 整个TCP报文的起始处 有多远。(注意 段数据起始处 和 报文起始处 的意思);实际上是指出了 TCP 报文段的首部长度 保留RESV,占6位,保留今后使用,但目前应都位0; 紧急URG,当URG=1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据; 确认ACK,仅当ACK=1时,确认号字段Acknowledgemt Number)才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1; 推送PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时候就将PSH=1; 复位RST,当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接; 同步SYN,在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1;一般称携带 SYN 标志的 TCP 报文段为「同步报文段」 终止FIN,用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放; 窗口,占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受;该字段明确指出了现在允许对方发送的数据量,它告诉对方本端的 TCP 接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。 检验和,占2字节,校验首部和数据这两部分;由发送端填充,接收端对 TCP 报文段执行 CRC 算法,以检验 TCP 报文段在传输过程中是否损坏,如果损坏这丢弃。 检验范围包括首部和数据两部分,这也是 TCP 可靠传输的一个重要保障。 紧急指针,占2字节,仅在 URG = 1 时才有意义,指出本报文段中的紧急数据的字节数; 选项,长度可变,定义一些其他的可选的参数。
TCP通常使用IP作为网络层协议,此时TCP报文段被封装在IP数据包内
TCP建立连接

三次握手建立可靠连接(协商初始序列号)
 最开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的为客户端,被动打开连接的是服务器。 1、TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态; 2、TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。  3、TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。这个报文也不能携带数据,但是同样要消耗一个序号。  4、TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,此ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。TCP规定,此ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。  5、当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
服务器B处于LISTEN(监听)状态
1、主机A发送标识了SYN=1的数据段,初始序号为x,请求建立连接(seq=x,SYN=1)
主机A处于SYN-SEND同步已发送状态
2、服务器B回复标识了SYN+ACK的数据段,初始序号为y;并发送确认序号为x+1 以此作为对主机A的SYN报文的确认,相当于告诉主机A接下来可以发送的数据序列号为x+1。(seq=y,ack=x+1,SYN=1,ACK=1)
服务器B处于SYN-RCVD同步已接收状态
3、主机A发送标识了ACK的数据段,序号为x+1,确认序号为y+1以此作为对服务器B的SYN报文的确认。 (seq=x+1,ack=y+1,ACK=1)
客户端进入ESTABLISHED(已建立连接)状态
当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了
为什么要第三次握手?而不是2次
主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
假设使用2次握手:客户端第一次连接请求在网络滞留,未收到确认报文并重发请求,第二次建立通过2次握手连接并完成传输。随后第一次请求到达服务器后将再次连接,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。
第3次握手:服务器收到客户端确认后才进入ESTABLISHED状态(同时分配资源),若无第3次或迟迟未到,服务器直接进入建立连接状态同时分配资源,将造成资源浪费(N多个连接同时建立,服务器奔溃)
TCP传输过程
 主机A向服务器A发送TCP数据段,为描述方便假定每个数据 段的长度都是500个字节。当服务器A成功收到序列号是M+1499的字节 以及之前的所有字节时,会以序列号M+1499+1=M+1500进行确认。另 外,由于数据段N+3传输失败,所以服务器A未能收到序列号为M+1500 的字节,因此服务器A还会再次以序列号M+1500进行确认。
TCP的可靠传输还体现在使用了确认技术来确保目的设备收到准确无误的数据
目的设备接收到源设备发送的数据段时,会向源端发送确认报文,源设备收到确认报文后,继续发送数据段,如此重复。
TCP流量控制
 如图所示,主机A和服务器A之间通过滑动窗口来实现流量控制。为方便理解,此例中只考虑主机A发送数据给服务器A时,服务器A通过滑动窗口进行流量控制。 主机A向服务器发送4个长度为1024字节的数据段,其中主机的窗口大 小为4096个字节。服务器A收到第3个数据段后,缓存区满,第4个数据 段被丢弃。服务器以确认号ack 3073(3072+1)响应,窗口大小调整为3072,表明服务 器的缓冲区只能处理3072个字节的数据段。于是主机A改变其发送速率,发送窗口大小为3072的数据段。服务器A收到第6个数据段后,再以确认号ack 6145(6144+1)响应.....以此类推(窗口可能随时调整)。。。
TCP滑动窗口技术通过动态改变窗口大小来实现对端到端设备之间的数据传输进行流量控制。
UDP无此机制
发送端窗口大小取决于接收端窗口大小
TCP关闭连接

四次挥手
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1阶段)状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack还是=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。 为什么客户端最后还要等待2MSL? 最长报文段寿命MSL(Maximum Segment Lifetime最长报文段寿命),TCP允许不同的实现可以设置不同的MSL值。 第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。 第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。 为什么建立连接是三次握手,关闭连接确是四次挥手呢? 建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
客户端发送完了,不代表服务器的数据发送完了,故需要4次握手
客户端发送FIN=1,squ=u
服务器确认ACK=1,squ=v,ack=u+1
u+1为请求发送下一个数据序列
数据未传送完毕,故不发送FIN=1
服务器发送FIN=1,ACK=1,squ=w,再次ack=u+1
w为最终发送完数据后的序列号+1
客户端发送ACK=1,squ=u+1,ack=w+1
此时客户端收到服务器的FIN=1,才发送u+1的序列
用户数据包协议UDP(User Datagram Protocol)
 UDP头部的标识如下: 1. 16位源端口号:源主机的应用程序使用的端口号。 2. 16位目的端口号:目的主机的应用程序使用的端口号。 3. 16位UDP长度:是指UDP头部和UDP数据的字节长度。因为UDP头 部长度为8字节,所以该字段的最小值为8。 4. 16位UDP校验和:该字段提供了与TCP校验字段同样的功能;该字 段是可选的。
UDP特性
当应用程序对传输的可靠性要求不高,但是对传输速度和延迟要求较高时,可以用UDP协议来替代TCP协议在传输层控制数据的转发
无需事先建立连接。
无确认及重传机制,不保证可靠性,无法避免接收到重复数据的情况
传输效率高、开销小(UTP报头仅8字节,TCP报头20字节)
UDP头部

UDP报文段被封装在IP数据包内
UDP传输过程
 主机A发送数据包时,这些数据包是以有序的方式发送到网络中的,每 个数据包独立地在网络中被发送,所以不同的数据包可能会通过不同的 网络路径到达主机B。 这样的情况下,先发送的数据包不一定先到达主机B。因为UDP数据包没有序号,主机B将无法通过UDP协议将数据包按照原来的顺序重新组合,所以此时需要应用程序提供报文的到达确认、排序和流量控制等功能。通常情况下,UDP采用实时传输机制和时间戳来传输语音和视频数据。
TCP和UDP对比
1.基于连接与无连接
2.TCP要求系统资源较多,UDP较少;
3.流模式(TCP)与数据报模式(UDP);
4.TCP保证数据顺序,UDP不保证
5.TCP连接是点到点;UDP支持一对一,一对多,多对一 ,多对多的通信
6.TCP保证数据正确性,UDP可能丢包
传输层多路复用和分用
一个网络层数据包,可能含有多个数据段:多个应用程序进程(端口)的数据
接口socket:各层之间的接口,供上层调用下层服务
应用层和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
数据转发过程
TCP/IP协议簇和底层协议的配合,保证了数据能够实现端到端的传输。
数据转发过程就是一系列封装与解封装的过程
 数据可以在同一网络内或者不同网络间传输,数据转发过程也分为本地 转发和远程转发,但两者的数据转发原理是基本一样的,都是遵循TCP/IP协议簇。 本示例中,主机A需要访问服务器A的Web服务,并且假定两者之间已经建立了TCP连接。接下来会以此示例来讲解数据在不同网络间的传输过程。
主机A需要访问服务器A的Web服务,并已经建立了TCP连接:
1、主机对待发送的应用数据(PDU)进行加密和压缩等操作,之后进行传输层封装
2、传输层使用TCP进行报文封装,填充源端口、目的端口、初始序列号和确认序列号字段,标识位,窗口字段以及校验字段。
 此例中数据段的源端口号为主机A随机选择的1027号端口,目的端口号为服务器A的TCP知名端口80。
传输层分段vs网络层分片的关系
3、网络层使用IP协议进行封装,填充源IP,目的IP,TTL,上层协议(TCP),若IP报文超出最大传输单元(MTU),则进行分片

4、查找路由:主机发送数据前检查能否达到目的端,主机A拥有一条到达‘任何网络’的路由(0.0.0.0),数据通过网关10.1.1.254,经接口10.1.1.1转发

5、ARP获取下一跳的MAC地址(网关MAC地址)。
检查ARP缓存表
存在网关MAC地址表项
不存在,发送ARP请求获取MAC
6、以太网封装(数据链路层)

遵循Ehternet_II或IEEE 802.3标准,添加D.MAC(网关MAC),S.MAC,Type(0x0080,IP协议),FCS
7、数据帧转发

假定主机工作在共享以太网(半双工状态),会使用CSMA/CD检测链路是否空闲
如果空闲,添加一个前导码(Preamble) 和一个帧首定界符(SFD)到帧头,并发送
前导码的作用是使接收设备进行同步并做好接收数据帧的准备。前导码是包括了7个字节的二进制“1”、“0”交替的代码,即1010…10共56位。 帧首定界符是长度为1个字节的10101011二进制序列,它的作用是使接收端对帧的第一位进行定位。
共享以太网中所有设备都收到帧,首先进行FCS校验,通过校验的检查目的MAC地址,如果相同,剥去帧头帧尾,根据帧头Type字段发送到网络层对应协议模块接着处理

8、数据包到达路由器

RTA的网络层检查IP数据报头完整性,根据目的IP查找路由表,确定能否转发到目的端
对TTL值进行处理,同时检查报文大小,超过MTU值则分片,处理完成后发送到数据链路层重新封装
数据链路层封装新的源MAC(RTA的MAC)和下一跳MAC(RTB),如不知道则用ARP来获得
9、数据帧解封装
 该示例中,服务器A处于一个共享以太网中,两台服务器都会收到RTB发送的数据帧。该帧的目的MAC地址与服务器B的接口MAC地址不匹配,所以会被服务器B丢弃。
服务器A收到帧,检查MAC地址并通过FSC校验。
剥离帧头帧尾,根据Type字段发送到网络层对应协议处理(本例为IP协议)
10、数据包解封装

通过校验和字段来验证报文头的完整性,匹配IP地址
组合分片,剥掉IP头部,根据Protocol字段发送到对应协议处理(网络层其他协议或传输层协议)
11、数据段解封装

TCP协议处理头部信息,检查目的端口号为80
剥离数据段头部,并发送剩余应用数据到目的端口号80对应的HTTP协议进行处理