在计算机网络中有OSI七层模型及TCP/IP四层模型的说法,而且也是计算机很重要的知识。下面我们就来分析一下它们:
OSI七层模型及TCP/IP四层模型的对比:
从上面两张图我们知道,每层之间是相互独立的,而且完全解耦,具有很大的灵活性。下面我们就详细的分析每层的作用。
为操作系统或网络应用程序提供访问网络通信服务的,它以报文的形式进行数据传输。那么它主要包含的协议有哪些呢?
DNS(域名解析协议)、HTTP协议(Hyper Text Transfer Protocol)、SMTP(邮件传送协议),POP3协议(邮局协议)、FTP(文件传送协议)、Telnet(远程登录协议)、
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务,它通常运行在UDP之上,默认端口53。它主要解决IP地址复杂难以记忆的问题,存储并完成自己所管辖范围内主机的 域名 到 IP 地址的映射。
比如www.baidu.com就叫做域名,它是由点、字母和数字组成。分为分为顶级域(com,cn,net,gov,org,us,uk)、二级域(baidu,csdn,bilibili)、三级域(www, mail)
域名解析的顺序:
域名层次结构浏览器缓存
系统缓存,即找本机的hosts文件
路由器缓存
ISP-DNS缓存
找DNS服务器(本地域名、顶级域名、根域名)->迭代解析、递归查询
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上,默认端口80。它是基于C/S模式,且面向连接的,数据传输可靠协议。它的信息交换过程:建立连接、发送请求信息、发送响应信息、关闭连接(即HTTP本身是没有连接的)。
HTTP请求报文方式:
GET:请求指定的页面信息,并返回实体主体
POST:向指定资源提交数据进行处理请求
DELETE:请求服务器删除指定的页面
HEAD:请求读取URL标识的信息的首部,只返回报文头
OPETION:请求一些选项的信息
PUT:在指明的URL下存储一个文档
报文格式
请求报文格式如下:
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
应答报文格式如下:
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
但是HTTP存在一定的安全系数,所以为了更加安全,我们就有了HTTPS协议。它是基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护。
传输层是整个网络体系结构中的关键层次之一,主要负责向两个主机中进程之间的通信提供服务。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。同时还处理端到端之间的流量控制、分段/重组和差错控制问题。
传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输,避免报文的出错、丢失、延迟时间紊乱、重复、乱序等差错。在这一层,信息传送的协议数据单元称为段或报文。
网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口(端口是使用16bit表示数据,即0 ~ 65535)。
传输层基本功能:
分割与重组数据
按端口号寻址(即使用端口标记不同的网络进程)
连接管理
差错控制和流量控制,纠错的功能
那么传输层有哪些协议呢?
TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议)
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP主要特点:
基于字节流的方式
面向连接
可靠通信方式
一个连接有两端,即点对点通信
全双工通信
TCP主要功能:
对应用层报文进行分段和重组
面向应用层实现复用与分解
实现端到端的流量控制
拥塞控制
传输层寻址
对收到的报文进行差错检测(首部和数据部分都检错)
实现进程间的端到端可靠数据传输控制
TCP报文格式:
TCP段的首部长度最短是20B ,最长为60字节。但是长度必须为4B的整数倍。
图形解释:
--Source Port是源端口,16位。
---Destination Port是目的端口,16位。
---Sequence Number是发送数据包中的第一个字节的序列号,32位。
---Acknowledgment Number是确认序列号,32位。
---Data Offset是数据偏移,4位,该字段的值是TCP首部(包括选项)长度除以4。
---标志位: 6位,URG表示Urgent Pointer字段有意义:
ACK表示Acknowledgment Number字段有意义
PSH表示Push功能,RST表示复位TCP连接
SYN表示SYN报文(在建立TCP连接的时候使用)
FIN表示没有数据需要发送了(在关闭TCP连接的时候使用)
---Window表示接收缓冲区的空闲空间,16位,用来告诉TCP连接对端自己能够接收的最大数据长度。
---Checksum是校验和,16位。
---Urgent Pointers是紧急指针,16位,只有URG标志位被设置时该字段才有意义,表示紧急数据相对序列号(Sequence Number字段的值)的偏移
可靠性:
有哪些原因会引起不可靠传输呢?
比特差错、乱序、重传、丢失等
基于不可靠信道实现可靠数据传输采取的措施:
差错检测:利用编码实现数据包传输过程中的比特差错检测
确认:接收方向发送方反馈接收状态
重传:发送方重新发送接收方没有正确接收的数据
序号:确保数据按序提交
计时器:解决数据丢失问题;
停止等待协议:是最简单的可靠传输协议,但是该协议对信道的利用率不高。
连续ARQ(Automatic Repeat reQuest:自动重传请求)协议:滑动窗口+累计确认,大幅提高了信道的利用率。
可靠传输:基于连续ARQ协议,在某些情况下,重传的效率并不高,会重复传输部分已经成功接收的字节
流量控制:让发送方发送速率不要太快,TCP协议使用滑动窗口实现流量控制
拥塞控制:是基于整个网络,全局性的考虑来控制流量,与流量控制不同,流量控制是基于点对点的通信量的控制。拥塞控制的方法:慢启动算法+拥塞避免算法
TCP拥塞控制算法(也称AIMD算法):
(1)慢启动
每当建立一个TCP连接时或一个TCP连接发生超时重传后,该连接便进入慢启动阶段。进入慢启动后,TCP实体将拥塞窗口的大小初始化为一个报文段,即:cwnd=1。此后,每收到一个报文段的确认(ACK),cwnd值加1,即拥塞窗口按指数增加。当cwnd值超过慢启动阐值(ssthresh)或发生报文段丢失重传时,慢启动阶段结束。前者进入拥塞避免阶段,后者重新进入慢启动阶段。
(2)拥塞避免
在慢启阶段,当cwnd值超过慢启动阐值(ssthresh)后,慢启动过程结束,TCP连接进入拥塞避免阶段。在拥塞避免阶段,每一次发送的cwnd个报文段被完全确认后,才将cwnd值加1。在此阶段,cwnd值线性增加。
(3)快速重传
快速重传是对超时重传的改进。当源端收到对同一个报文的三个重复确认时,就确定一个报文段已经丢失,因此立刻重传丢失的报文段,而不必等到重传定时器(RTO)超时。以此减少不必要的等待时间。
(4)快速恢复
快速恢复是对丢失恢复机制的改进。在快速重传之后,不经过慢启动过程而直接进入拥塞避免阶段。每当快速重传后,置ssthresh=cwnd/2、cwnd=ssthresh+3。此后,每收到一个重复确认,将cwnd值加1,直至收到对丢失报文段和其后若干报文段的累积确认后,置cwnd=ssthresh,进入拥塞避免阶段。
慢启动和拥塞避免直观图:
快速重传和快速恢复直观图:
三次握手和四次挥手是很重要的知识这里只是简单描述了解一下,更加详细的请看深入理解TCP三握四挥
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议。它提供面向事务的简单不可靠信息传送服务,主要应用于实时性要求比较高,而对可靠性要求不高的场景,比如直播,视频会议,语音等场景。
UDP协议特点:
UDP是无连接协议
UDP不能保证可靠的交付数据
UDP是面向报文传输的
UDP没有拥塞控制
UDP首部开销很小,即8B
UDP报文格式:
UDP传输的段(segment)有8个字节的报头和有效载荷字段构成。而UDP报头由4个域组成,其中每个域各占用2个字节,即源端口号|目标端口号|数据包长度|校验值。格式如下图:
先说说 TCP 是如何计算负载数据长度:
其中 IP 总长度 和 IP 首部长度,在 IP 首部格式是已知的。TCP 首部长度,则是在 TCP 首部格式已知的,所以就可以求得 TCP 数据的长度。
大家这时就奇怪了问:“ UDP 也是基于 IP 层的呀,那 UDP 的数据长度也可以通过这个公式计算呀? 为何还要有「包长度」呢?”
这么一问,确实感觉 UDP 「包长度」是冗余的。
因为为了网络设备硬件设计和处理方便,首部长度需要是 4 字节的整数倍。
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。数据交换技术是报文交换(基本上被分组所替代):采用储存转发方式,数据交换单位是报文。
网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。
网络层的重点:
1. 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能
2. 基本数据单位为IP数据报
3. 重要的设备:路由器
4. 包含的主要协议:IP协议(Internet Protocol,因特网互联协议),ICMP协议(Internet Control Message Protocol,因特网控制报文协议),ARP协议(Address Resolution Protocol,地址解析协议),RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)
IP是整个TCP/IP协议族的核心,也是构成互联网的基础。它分割顶层网络应用和底层网络技术之间的耦合关系,屏蔽了物理网络之间的差异,解决了在虚拟网络中数据报传输路径的问题。
IP协议报文格式:
一个IP分组由首部和数据两部分组成。首部的前20字节是所有IP分组必须具有的,也称固定首部。在首部固定部分的后面是一些可选字段,其长度是可变的。
IPv4 IPv4IP协议的转发流程:
计算机A需要跨设备将数据传输给计算机C,仅有数据链路层是无法解决的,因此需要网络层。有了路由表和前边了解到的IP协议的内容,就可以实现跨设备的数据传输了。
IP地址的划分:
IP地址分为A、B、C、D、E五类
子网划分A类地址范围:1.0.0.1~126.255.255
A类地址=网络地址+主机部分+主机部分+主机部分
(有类边界)默认子网掩码为/8,即为255.0.0.0B类地址范围:128.0.0.1~191.255.255.254
B类地址=网络部分+网络部分+主机部分+主机部分
(有类边界)默认子网掩码为/16,即255.255.0.0C类地址范围:192.0.0.1~223.255.255.254
C类地址=网络部分+网络部分+网络部分+主机部分
(有类边界)默认子网掩码为/24,即255.255.255.0D类地址范围:224.0.0.1~239.255.255.254
E类地址范围:240.0.0.1~239.255.255.254
NAT技术通过对IP报文头中的源地址或目的地址进行转换,可以使大量的私网IP地址通过共享少量的公网IP地址来访问公网。
NAT是将IP报文报头中的IP地址转换为另一个IP地址的过程,一般的NAT转换设备都维护着一张地址转换表,所有经过NAT转换设备(处于内部网络和外部网络的连接处,常见的设备有:路由器、防火墙等)并且需要进行地址转换的报文,都会通过这个表做相应的修改。地址转换的机制分为如下两个部分:
1、内部网络主机的IP地址和端口转换为NAT转换设备外部网络地址和端口。
2、外部网络地址和端口转换为NAT转换设备内部网络主机的IP地址和端口。
也就是:
<私有地址+端口>与<公有地址+端口>之间的相互转换。
地址解析协议 ARP(Address Resolution Protocol):为网卡(网络适配器)的IP地址到对应的硬件地址提供动态映射。可以把网络层32位地址转化为数据链路层MAC48位地址。
RARP(Reverse Address Resolution Protocol)协议指逆地址解析协议,可以把数据链路层MAC48位地址转化为网络层32位地址。
网际控制报文协议(Internet Control Message Protocol),可以报告错误信息或者异常情况,ICMP报文封装在IP数据报当中。主要应用于如下:
Ping应用:网络故障的排查
Traceroute应用:可以探测IP数据报在网络中走过的路径
简单介绍了各个层次的作用和对各个层次基础协议做简单介绍,感谢阅读哈~