计算机网络
一、OSI七层协议(五层)
1、应用层
- 应用层的任务就是通过应用进程间的交互来完成特定网络应用
- 在应用层的协议有很多:
- DNS域名系统
- 将域名和IP地址相互映射的一个分布式数据库
- ⭐HTTP协议(下一篇博客会详细讲到)
- SMTP协议
- DNS域名系统
- 在这一层交互的数据我们称之为报文
- 典型应用:DNS、HTTP
2、运输层
- 负责两台主进程之间的通信提供通用的数据传输服务
- 运输层主要使用以下两种协议:(下面我们会详细讲到)
- TCP
- 提供面向连接的,可靠的数据传输服务
- UDP
- 无连接的,尽最大努力的数据传输服务(不保证可靠性)
- TCP
3、网络层
- 就是说在进行通信的两台计算机之间可能会经过许多的数据链路以及通信子网等,网络层的存在就是选择合适的网间路由和交换节点,确保数据及时送达。
- 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送
- 网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报。
- 典型应用:路由器、防火墙
4、数据链路层
- 简称为"链路层",两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。
- 在两个相邻的节点之间传送数据是,数据链路层的将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
- 数据链路层不仅要检错,而且还要纠错:如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在链路层传输时出现差错,那么就要采用可靠性传输协议来纠正出现的差错。
- 典型应用:交换机、网桥等等
5、物理层
- 物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。
- 应用:网线、网卡、中继器等等
二、⭐TCP三握四挥
为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。
1、三次握手
- 两个概念:SYN、ACK
- SYN: 同步序列编号,是建立连接时使用的握手信号
- ACK:消息响应。
盗用大神一张图:
简单示意图:
- 第一次握手:
- 客户端发送了SYN标志的数据包
- 第二次握手:
- 服务端发送带有SYN/ACK的数据包
- 第三次握手:
- 客户端发送带有ACK的数据包
- ⭐为什么使用三次握手?
- 三次握手的目的就是双方之间建立可靠的通信信道。既然是双方之间进行通信,那么每一方的数据发送和接受都应该是正常的才可以。第一次握手,服务端接收到了消息,说明服务端的接受没有问题;第二次握手客户端接收到消息说明客户端的接受没有问题以及他的发送也是没有问题的,第三次握手说明服务端的发送也没有问题,只有三次握手他们之间才能形成一个闭环。
- 如果两次握手不行么?
- 肯定是不行的,如果少了最后一次握手,那么服务器端就不知道他发送的消息客户端是否接受到了,而且在服务器端预开辟了一块资源等待回复。常见的DDOS攻击的一种就是我用大量的"肉机"同时去请求,最后一次握手不给服务器往回传数据包,那么服务器肯定会崩掉的,所以我们的三次握手缺一不可。
2、四次挥手
断开一个TCP需要 "四次挥手"
日常盗用大神一张图:
- 第一次挥手
- 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
- 第二次挥手
- 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
- 第三次挥手
- 服务器-关闭与客户端的连接,发送一个FIN给客户端
- 第四次挥手
- 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
既然应用大神的图了,那也就在应用大神的例子吧(哈哈哈哈):A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
三、TCP、UDP
1、区别
经典大神一张图(我发现这个大神真不愧是大神):
- TCP是面向连接的,也就是说在传送数据之前必须先建立连接(三次握手),数据传输结束之后需要释放连接,这一性质就导致了TCP需要较多的开销,占用较多的资源以及它的传输效率比较慢。
- 面向连接、安全可靠
- 用于文件传输、发送和接收邮件、远程登录等等
- UDP是无连接的,也就是说他在传送数据之前不需要建立连接,因此他的开销要比TCP小,传输效率比较快,但是他不可靠
- 无连接、不可靠,但是传输快
- 一般用于即时通讯,比如说QQ语音、视频、直播
2、⭐TCP 协议如何保证可靠传输
- 应用数据被分割成 TCP 认为最适合发送的数据块。
- TCP给每发送的一个包进行编号,接收方对数据报进行排序,然后将有序数据传送给应用层
- TCP的接收端会丢弃重复的数据
- 使用滑动窗口来进行流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送他能容纳的数据,当接收方来不及接收处理发送发传来的数据时,提示发送方降低发送的频率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。
- ARQ协议:它的基本原理就是没发送完一个分组后就停止发送,等待接收端发送确认的通知,确认以后再发下一个。
- 拥塞控制:当网路拥塞的时候,减少数据的发送
- 实现拥塞控制的几种常见算法
- 慢开始
- 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd(拥塞窗口)初始值为1,每经过一个传播轮次,cwnd加倍。
- 快重传与快回复(FRR)
- 能快速恢复丢失的数据包。
- 没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。
- 慢开始
- 实现拥塞控制的几种常见算法
- 超时重传:当TCP发送一个包后,会启动一个定时器,等待接收端确认收到这个包,如果不能及时收到,那么他将会重发这个包。