为什么要有TCP/IP协议
定义了一种规范,这种规范使得数据能够在网络中不同计算机之间传递
注意
TCP/IP不单单指TCP和IP协议,而是表示因特网上所使用的整个TCP/IP协议族
计算机网络体系结构(TCP/IP协议的体系结构)
计算机网络体系结构综合了OSI(open system interconnection:开放系统互连)的七层体系结构和TCP/IP体系结构的优点:具有五层协议的体系结构:
从上到下依次是:
- 应用层:应用层直接为用户应用程序提供服务,它提供了一些用户可以直接使用的协议譬如说HTTP协议,FTP协议,邮件传输协议SMTP
- 运输层:运输层为两个主机中进程之间的通信提供服务,运输层主要使用的协议有:TCP协议和UDP协议
- 网络层:网络层为网络中数据报(分组)的传输提供服务。网络层涉及到的协议有IP协议,arp协议和rarp协议
- 数据链路层:数据链路层为主机和路由器之间或者两个路由器之间帧数据的传输提供服务。数据链路层主要的协议有CSMA/CD(载波监听、多点接入、碰撞检测)
- 物理层:数据最终会以比特为单位传输的,物理层为比特流数据的发送和接收提供服务。
基本术语的通用理解
1. IP地址:网络中一台主机或者路由器对应世界上唯一的一个32位标识符(255.255.255.255),即一个IP地址对应于网络中的一台主机或者路由器
2. 域名系统:域名系统是一个分布的数据库,它提供将域名(www.baidu.com)转换成IP地址的服务
3. RFC:RFC(request for comment)就是tcp/ip协议的标准文档(这个不熟)
4. 端口号(port):这样理解:IP地址只是定位了网络中的主机是哪一个,主机上的应用程序要怎么确定呢,这个就要用端口号来确定了。也就是说IP地址+ 端口号确定了网络中特定主机上的特定应用程序。
物理层
(物理层简单理解即可)
- 物理层功能:负责比特流数据的发送和接收
- 物理层数据通信的模型:
源点—发送器—传输系统(信道)—接收器—终点
发送器:比特流数据要通过发送器编码才能在传输系统中进行传输,典型的发送器就是调制器
接收器:将数据还原成比特流数据(解调器) - 与信道相关的基本概念:
1)要对源信号进行调制的三种方法:调频、调幅、调相
2)信号传输时可能会失真:信噪比
3)信号的传输介质:双绞线、同轴电缆、光缆
4)信道的服用技术:频分、时分、波分、码分
数据链路层
- 数据链路层功能:数据链路层为主机和路由器之间或者两个路由器之间传送数据时提供服务。(同一网络中)
- 数据链路层的传输模型:
(路由器只有三层协议) - 链路层中一些基本概念介绍
1) 数据链路(网络适配器):链路(相邻节点间的物理路线) + 实现数据链路层协议的软件硬件
2) 网络适配器(网卡):包含了数据链路层和物理层这两层的功能
3) 数据链路层传输的数据单元——帧:为IP数据报条件首部和尾部封装成帧
4) 数据链路层使用的信道类型:点对点信道的数据链路层 + 广播信道的数据链路层(局域网) - 点对点信道的数据链路层
1) 点对点信道的数据链路层通信过程
a、为IP数据报添加首部和尾部封装成帧
b、通过物理层将帧发送给结点B数据链路层(物理层发送的数据是01数据)
c、若帧无差错,从帧中取出ip数据报交给网络层,否则丢弃这个帧
(点对点通信的三个基本问题:封装成帧 + 透明传输 + 差错检测)
2) 封装成帧:
在IP数据报的前后添加首部和尾部,以确定帧的界限:
3) 透明传输
在帧传输的过程中,会误以为把IP数据报中内容作为帧的结束界定符,从而无法满足透明传输:
解决方式为:字符填充,为IP数据报加入转义字符
4) 差错检测
比特流数据在传输过程中会产生差错(0变1,1变0)
检错技术:CRC(循环冗余检测)
帧检验序列:FCS传输的数据 + 冗余码
5) 点对点协议PPP
ppp帧格式:
帧首部 + IP数据报 + 帧校验序列(差错检测) + 帧尾部 + 字符填充 - 广播信道的数据链路层
1) 局域网与数据链路层的关系:局域网(LAN)就是使用的广播信道,局域网工作层次跨越了数据链路层和物理层,因此谈到数据链路层的时候就应该想到适配器和两种网络:点对点信道的网络(主机—路由器或者路由器—路由器) + 局域网
2) 以太网是目前用的最多的局域网(局域网与以太网等价化), 总线拓扑结构的以太网最常见。
3)既然各个主机共享一条总线发送数据,如果某一时刻碰巧有两台主机同时发送数据帧,这就有可能产生冲突。 - CSMA/CD(Carrier Sense Multiple Access with Collision Detection载波监听多点连接碰撞检测)协议
1) CSMA/CD协议的目的是为了以太网中只允许一台计算机在总线上传输数据,解决冲突问题
2)以太网的工作方式
a、采用无连接的工作方式,即不必先建立连接就可以直接发送数据。而且以太网提供的服务是不可靠交互,也就是尽最大努力的交互(原理是以太网的信号质量好)
b、以太网发送的数据采用的是曼彻斯特编码(红线),这就使得后面的MAC帧不需要结束界定符。
3) CSMA/CD
a、多点接入:多台计算机连接到一条总线上
b、载波监听:在发送数据之前是否有其它计算机发送的数据
c、碰撞检测:边发送边监听,在发送数据的同事,监听其它计算机是否也会发送数据
即基于CSMA/CD协议的数据连路程中帧的发送步骤为:
a、适配器获得网络层的一个IP数据报,加上帧界定符合校验序列,组成帧,准备发送
b、适配器检测总线是否空闲,空闲则发送帧,否者等待
c、发送过过程中会继续检测信道,若未发生碰撞,则发送成功。否则,终止发送,执行指数退避算法,等待信道空闲 - MAC帧介绍
1) 以太网中适配器的的MAC地址(Medium Access Control:媒体接入控制)
我们知道局域网中的数据传输是通过网络适配器实现的(网络适配器实现了数据链路层和CSMD/CD协议),MAC地址可以理解成适配器硬件对应的地址,即世界上每一个适配器有唯一的一个MAC地址,能视频单播、广播和多播。
2) MAC帧格式
源地址 + 目的地址 + 类型(指明数据报的类型,不一定指的是IP数据报 ) + FCS(帧校验序列)
跟PPP帧对比,MAC帧没有结束位的定界符,主要是因为曼彻斯特编码(会将bit转换成起伏的电压),适配器上的电压不再发生变化时的FCS序列之前的数据即为MAC帧数据 - 扩展的以太网(即将多个小的以太网组合成一个大的以太网)
1) 在物理层扩展以太网(不是重点,了解即可)
主要方式是用多个集线器连城更大的以太网
缺点:碰撞域会随之扩大
2) 在数据链路层扩展以太网(使用网桥)
含有网桥的以太网结构:
术语:网段—子以太网;根据转发表来转发帧
优点:隔离了碰撞与,是每个网段的碰撞域独立
3) 透明网桥(目前用的最多的网桥)
透明网桥是通过一种自学习算法来建立相应的转发表,这种自学习算法的思想是:计算机A发送的数据帧通过接口x进入网桥,则从这个网桥的接口x就可以帧传输给计算机A,因此这种网桥能够做到即插即用,而不用人工配置。
透明网桥中的转发表记录的是帧的源地址和接口。
注意不转发的情况:源地址和目的地址有相同接口时不转发
网络层
(一说到网络层,就立马要想到IP协议:IP地址的三种类型 + Mac地址结合ip地址如何定位网络中的特定主机 + AS中的路由选择协议)
网络层为网络中数据报(分组)的传输提供服务。网络层涉及到的协议有IP协议,arp协议和rarp协议
- 网络层的设计思路
网络层的设计思路是:网络层向上只提供简单灵活、无连接、尽最大努力交付的数据报服务。(即发送数据报之前不需要建立连接,数据报的传输也有可能丢失出错,但使得路由器简单廉价,扩展起来方便。) - 网际协议IP
(通过IP协议找到特定网络上的特定主机,并进行通信)
1)与IP协议配套的四个协议
地址解析协议ARP(Address Resolution Protocol)
逆地址解析协议RARP(Reverse Address Resolution Protocol)
国际控制报文协议ICMP(Internet Control Message Protocol:ping)
国际组管理协议IGMP(Internet Group Management Protocol)
注:四种协议的顺序IP协议会用到ARP协议和RARP协议,因此IP协议在这俩个协议之上,同理ICMP协议和IGMP协议一样。
2) 虚拟互连网络
a、把各个存在差异的网络通过ip协议连接起来的网络成为虚拟互连网络(也就是我们平时所说的网络)
b、网络互连的几种中间设备
物理层使用的中间设备是转发器
数据链路层使用的中间设备是网桥
网络层使用的中间设备是路由器
c、路由器介绍
转发器和网桥连接后的网络仍属于同一个网络,而路由器连接的是两个不同的网络 + 路由器只有三层协议 + 路由器对IP数据报的直接交付(要发送的数据报在同一网络中)和间接交付
3)IP地址表示法
ip地址是一个32位的标识符,ip地址用于定位某一网络中的某一注意。ip地址表示法的三个历史阶段:分类的ip地址—子网的划分—构成超网
4) 分类的ip地址(不是重点)
分类的IP地址构成:<网络号,主机号>
5)ip地址<网络号,主机号>的特点
a、路由器只需根据网络号转发分组,而不用考虑主机号
b、ip地址标识一台主机或者路由器,以个路由器连接到两个(多个)不同的网络,因此一个路由器至少要有两个不同的ip地址
c、网桥(数据链路层)连接的网络属于同一网络
6) ip地址与硬件地址(要仔细理解和区分)
a、硬件地址(MAC地址、物理地址)位于链路层MAC帧的首部;ip地址是位于网络层ip数据报的首部
b、MAC地址是固定不变的,固化在适配器上,每个以太网(局域网)中的计算机对应于唯一的一个MAC地址,ip地址的话是可以变化的
c、MAC帧在不同网络中传递时,MAC帧的源地址和目的地址都会发生改变,而ip数据报的源地址和目的地址始终不会发生变化
(MAC地址与交换机关联比较大,ip地址与路由器关系比较大;路由器连接了多少个网络,就应该有多少个MAC地址和ip地址)
如图为数据在不同网络中传输时MAC地址和ip地址的变化过程:
怎么理解MAC地址和IP地址协同工作帮我们定位到特定的主机上呢,这样来理解:
1、路由器的自学习算法会在路由表中记录下目的地址以及到达目的地址的下一跳ip地址
2、ARP高速缓存中记录的是ip地址到硬件地址的映射,根据路由表知道目的ip地址的下一跳地址,再根据ARP高速缓存中查找下一跳地址对应的硬件地址(具体怎么创建这个ARP高速缓存的话是采用了局域网广播)
3、接着找到目的MAC地址的主机,进行数据通信
交换机记录的是局域网的主机的MAC地址
7)地址解析协议(ARP)
(总之就是为了在ip数据报前面加上物理地址形成MAC帧,它解决的是同一局域网上的主机或路由器的ip地址和硬件地址的映射问题)
IP地址—ARP—物理地址;物理地址—RARP—IP地址
将ip地址转化为对应的物理地址ARP协议采用的方法是:在主机ARP高速缓存中存放一个从ip地址到硬件地址的映射表,ARP高速缓存存放的是本局域网上个主机和路由器ip地址到硬件地址的映射表。
步骤为:(缓存中如果有该ip地址对应的物理地址的话就直接附加到MAC帧上,没有的话则)
a、在局域网上主机A广播一个ARP分组(ARP请求):譬如我是IP地址XX,硬件地址为YY,想要知道XX1对应的硬件地址
b、主机B接到请求后,给A返回一个ARP响应分组,A收到响应分组后在ARP高速缓存中记录A的B的ip地址和物理地址,,同时B的ARP告诉缓存也记录A
8)IP数据报的格式(了解)
9)路由器对IP数据报的转发流程
注意
a、路由器会连接到两个或者以上的网络,一次一个路由器也会有两个或以上的IP地址
b、路由器的路由表是根据网络号而非主机号来制作的
c、路由表的构成:目的网络地址 + 下一跳地址
d、稍微了解一下特定主机路由和默认路由
3. 划分子网和构造超网
1) 划分子网(两级的IP地址不好用了,要三级)
a、两级IP升级到三级IP地址结构:<网络号, 主机号>——<网络号,子网号,主机号>
b、两级IP缺点:利用率低 + 不灵活
c、对外仍是一个网络,路由器仍是根据这个网络号转发IP数据报,子网号可以自由分配
2)子网掩码(两级变三级之后,IP数据报定位到网络号之后,再如何定位到是哪一个子网号的主机呢,这里就引入了子网掩码的概念,即子网掩码是为了找出三级IP地址中的子网号)
a、IP地址 AND(与运算)子网掩码 == 网络地址
b、使用子网时IP地址的转发(路由表中添加了子网掩码)
3)无分类编址CIDR(构造超网:子网掩码出来后,三级的IP还是有问题,譬如说B类地址快没了,因此要有进一步的解决方法,这里就引出了无分类编址,也就是构造超网,了解即可)
构造超网的两个特点
a、消除了ABC类地址及划分子网的概念,采用的是无分类的两级编址:<网络前缀, 主机号>(网络前缀代表网络号),例如:128.14.35.7/20
b、CIDR地址块:网络前缀相同的一类地址,例如128.14.35.7/20地址就可以得出20位前缀的最大地址、最小地址
4. 网际控制报文协议ICMP(Internet Control Message Protocol)(也只要了解即可 吧)
1)目的:为了更有效地转发数据报和提高IP数据报的交互成功机会而在网络层使用的协议
2)ICMP协议的应用:ping(Packet InterNet Groper分组网间探测),没有用到运输层TCP或UDP,用于测试与目的主机的连通性
5. 因特网的路由选择协议(即路由表是怎么出来的)
1)路由选择协议的核心是路由算法,一个好的路由算法应该要有自适应性(根据网络的通信量和拓扑情况动态变换路由)
2)因特网采用的路由选择协议为:分层次的路由选择协议
a、分层次的路由选择协议即:将互联网划分成许多较小的自治系统(Auto System),单个AS内部的路由选择协议(称之为内部网关协议IGP(Interior Gateway Protocol)) + AS之间的路由选择协议(外部网关协议EGP(External Gateway Protocol))
b、内部网关协议IGP:RIP(路由信息协议Routing Information Protocol) + OSPF
外部网管协议EGP:BGP
3) RIP:路由信息协议
a、是一种基于距离向量的路由选择协议(该路由器可以直接交互则定义距离(跳数)为1,否则距离为:跨越的路由器数 + 直接交互(1);要选择最短路由,定义距离16为不可达)
b、RIP协议的特点
①和哪些路由器交换信息:仅和相邻路由器交换信息
②交换什么信息:当前路由器知道的全部信息,即路由表
③什么时候交换信息按固定时间间隔交换路由信息,例如30s
c、路由器刚开始工作时,只知道之恋网络的距离1,但是在不断地和相邻路由交换信息之后,最终会知道到达本AD中任何一个网络的最短距离和下一跳地址。
d、RIP的路由选择过程
①对于每一个相邻路由器R1发过来的路由表信息,修改R1的路由信息为R1’:<目的地址不变,距离 + 1,下一条地址改成R1>
②与R2中目的地址相同的路由信息对比,如果
没有该R1’的目的地址,则添加到R2中;
如果下一跳地址相同,不管距离变长变短或者不变,都要更新R2,原因是以最新的为主,很有可能是拓扑结构发生变化。
如果下一跳地址不同,若距离变短,则更新
e、RIP协议总结:RIP协议是让一个自治系统中的所有路由器都和自己的相邻路由器定期交换路由信息,并不断更新其路由表,使得每一个路由器到每一个目的网络的路由器都是最短的
4)开发最短路径优先(OSPF)协议
a、是一种内部网关协议,基于迪杰斯特拉的最短路径算法SPF
b、给哪些路由器发送信息?发送什么信息?什么时候发送信息?
①给AS中所有的路由器发送信息(洪泛法)
②发送的消息是与本路由器相邻的所有路由器的链路状态(链路状态:和哪些路由器相邻 + 代价)
③当链路状态发生改变时,发送消息
因此所有路由器最终会创建一个代表全网拓扑结构的链路状态数据库
5) 网络层的其它协议(了解即可)
a、边界网关协议:BGP(一种外部网管协议,AS之间,Border Gateway protocol)
b、IP多播:一对多通信 + 多播路由器 + 多播地址只用于目的地址不用于源地址
c、网际组管理协议IGMP + 多播路由选择协议
d、虚拟专用网VPN + 网络地址转换NAT
运输层
(一提到运输层就要想到:进程间的通信 + TCP/UDP协议各自的特点 + TCP连接和释放的过程)
运输层为网络中两个主机中进程之间的通信提供服务
- 运输层协议概述
1)进程之间的通信
IP层为网络中主机主机之间提供逻辑通信,但是实际上通信的是网络中主机中的进程,因此引入了传输层,传输层为应用进程之间提供端到端的逻辑通信
2)运输层的两个主要协议
a、用户数据报协议UDP(User Datagram Protocol):无需建立连接 + 提供的是不可靠交付
b、传输控制协议TCP(Transmission Control Protocol):面向连接 + 提供的是可靠交付
3)端口号:IP地址为了找到网络中目的计算机,端口号是为了找到计算机上的特定应用进程(80表示http协议的端口号) - UDP
概述:UPD旨在IP数据报之上添加了复用、分用功能以及差错检测功能
1)特点:无连接(发送之前不需要建立连接) + 不可靠交付(尽最大努力交付) + 面向报文(udp一次交互一个完整的报文,即应用层给我什么报文,在加上首部后我就发什么报文,接收到什么报文,去除首部后就交给应用层什么报文) + udp没有拥塞控制(网络拥塞不会使主机的发送速率降低)
2)UDP数据报首部
源端口 + 目的端口 + 长度 + 校验和
(源应用程序 + 目标应用程序 + udp数据报的长度 + 检测udp用户数据报是否有错,有则丢弃,这里在校验是会添加一个伪首部) - TCP
1)TCP的主要特点
面向连接(在使用TCP协议之前,必须建立TCP连接,数据传送完毕后,释放连接) + 每一条TCP连接只能对应两个端点(一对一通信) + 提供可靠交付 + 提供全双工通信(TCP允许通信双发的应用进程在任何时都能发送数据,因为在发送端和接收端都设有缓存) + 面向字节流(流:字节序列,TCP会根据当前的网络拥塞程序和对方给出的窗口值,来决定发送的报文段长度)
2)TCP的连接
通过TCP两端的套接字Socket实现TCP连接
TCP连接:{socket1, socket2} ={(IP1,port1),(IP2,port2)} - 可靠传输的工作原理(什么叫可靠传输,另外怎么做到可靠传输)
理想的可靠传输:传输信道不会有差错 + 接收方总来得及处理发送方发过来的数据(不拥塞)
1) 停止等待协议:即每发送一个分组就停止发送,等待对方确认。在收到确认才发送下一个分组
停止等待协议会有以下四种情况
a、无差错情况
b、超时重传(发送发在规定的时间内没有收到确认,则重新发送)
发送时应注意:发送分组后,应暂时保留发送的分组副本(确认后才把副本清楚) + 分组和确认都应对应编号 + 重传时间比正常发送时间要长(可能是由于拥塞到时的重传)
c、确认丢失:确认时丢失,应丢弃重传的报文 + 重新发送确认
d、确认迟到:丢弃重传的报文 + 重新发送确认 + 收到迟到的确认什么也不做
正是利用这种确认和重传机制来实现TCP报文传输的可靠通信
e、信道利用率低:,每发送一个分组就停下来等接收到确认后再发送下一个。 TCP报文段的首部格式
1) 序号:TCP是面向字节流的,序号是对每一个字节数据按顺序编号(序号 + 长度 == 报文段)
2) 确认号:确认号为N,则表示N-1为止的数据都已经接收到
3)窗口:指明了对方可以发送的数据量(流量控制作用)TCP可靠传输的实现
1) 以字节为单位的滑动窗口 + 发送/接收缓存来解决信道利用率低的问题
根据TCP报文的窗口确定发送字节流的长度,发送窗口能逐步推进,接收窗口接收字节流数据并返回确认,或者重传。
发送缓存存放:准备发送的数据 + 已发送但没收到确认的数据
接收缓存存放:没被应用程序接收的数据 + 未按时到达的数据
2) 超时重传
3)确认机制:重传所有未被确认的数据块- TCP流量控制
利用滑动窗口来实现流量控制(流量控制:让发送方的发送速率不要太快,使能接收方来得及接收) - TCP的拥塞控制
拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
常见的拥塞控制方法:慢开始 + 快重传 +快恢复 - TCP的运输连接管理
1) TCP建立连接的过程:三次握手
首先服务器进程要处于监听状态,等待客户端的连接请求
第一次握手:客户端进程首先向服务器进程发送一个连接请求的报文段,客户端进程进入SYN-SEND(同步已发送状态)。报文段中的同部位SYN=1,即同部位为1报文段不携带任何数据,同时会产生一个初始序号seq = x(书里面的解释是:连接请求的报文段不携带数据但会消耗掉一个序号,代表我要发送的数据从这个位置开始)
第二次握手: 服务器进程接收到客户端发送过来的连接请求报文段之后,向客户端进程发送确认,这时服务器进程进入SYN-REVD(同步收到)状态。其中确认报文段的同部位SYN和确认位ACK都为1,确认号ack为 x+ 1(表示x之前的数据都接收到了),同时也会产生一个初始序号seq=y。。
第三次握手:客户端进程收到服务器进程发送的确认后,还要发给服务器发送确认,客户端进入established(已建立状态),服务器进程接收到这个确认报文段的时候,也进入established(已建立连接状态)。确认报文段中确认为ACK置1,确认号ack=y+1,自己的序号seq=x+1;这时TCP连接已经建立,
2) TCP连接释放:四次挥手
第一次挥手:客户端进程向服务端进程发送连接释放的报文段,并停止发送数据。此时客户端进程进入FIN-WAIT(终止等待1)状态
第二次挥手:服务端进程接收到客户端进程发送过来的连接释放报文段后,向客户端进程发送确认,这时TCP连接处于半关闭状态,即客户端已经不能向服务器进程发送数据,但是服务器进程要向客户端进程发送数据,客户端进程还是要接收的。客户端进程收到服务端进程的确认后,进入FIN-WATI-2(终止等待2)状态,等待服务器进程发出的连接释放报文段
第三次挥手:当服务端进程没有向客户端进程发送的数据时,就向客户端发送释放连接的报文段,此时服务端进程进入LAST-ACK(最后确认的状态),等待客户端进程的确认
第四次挥手:客户端进程接收到服务端进程发出的释放连接的报文段后,向服务端进程发送确认。服务端进程收到确认后,关闭TCP连接,而客户端进程在经过最长报文段寿命后才关闭连接。