目录
在网络的信息传输过程中,我们常常无法之间进行传输,而是需要将每个阶段进行分层处理,让每层都执行与自己相关的操作,互不影响又互相调用以此来完成网络信息的传输,因此就有网络分层的概念。
OSI七层模型是ISO组织定义的一个标准的网络分层模型,提供了一个标准来进行接口的使用和实现,OIS七层模型从上到下依次是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
名称 作用 协议 应用层 给用户提供服务 DNS、HTTP、SMP、POP3、IMAP4、FTP、Telent 表示层 数据处理 会话层 管理应用程序之间的会话 SSL、TLS、DAP、LDAP 传输层 为两台主机进程的通信提供数据传输服务 TCP、UDP 网络层 路由和寻址 IP/IPV6 数据链路层 管理相邻节点之间的数据通信 物理层 利用传输介质实现计算机节点间比特流的传输
TCP/IP四层模型是对OSI模型的一种简化,它自上而下分为:应用层、传输层、网络层、数据链路层。
对比OSI模型,TCP/IP模型更为简单实用,它将OSI模型中应用层+表示层+会话层总结成一个,统称为应用层,将数据链路层+物理层总结成一个数据链路层。
不论是哪种模型,作用就是物理层通过物理方式将电脑连接起来,数据链路层对比特流的数据进行分组,再由网络层建立主机和主机之间的连接,传输层负责建立端口到端口之间的通信,最终由应用层负责建立连接将数据格式转换为用户需要的并反馈给用户。
TCP协议是一个面向连接的可靠的传输方式,所以它在建立端口与端口之间的通信时,会先通过3次握手的过程来确认连接。
- 第一次握手
由客户端先先服务器发送一个数据包,数据包的首部格式为:SYN=1,ACK=0,表示 这是一个主动请求建立连接的数据包。
- 第二次握手
服务器收到客户端发送来的请求建立连接的数据包后,如果同意连接,会给客户端发 送一个数据包作为回应,这个数据包的首部格式为:SYN=1,ACK=1代表同意连接。
- 第三次握手
客户端收到服务器同意连接的数据包后,会再次给服务器发送一个首部格式为: SYN=0,ACK=1的数据包,表示双方都同意连接,自此开始真正的数据传输。
TCP协议的3次握手是为了保证连接的唯一性,避免重复连接引起混乱,除此之外,在3次握手之后,可以得到一个初始化的序列号seq,保证了TCP协议的可靠性传输,当只有2次握手时,无法初始化序列号seq,另外,TCP协议也可以通过4次、5次握手来确认连接,但这样会造成一些资源的浪费,所有3次握手是最恰当的连接方式。
在TCP协议中,两个端口要断开连接,必须进行四次挥手过程才能释放连接。
- 第一次挥手
客户端向服务器发送连接释放的数据包,数据包首部格式为:FIN=1,ACK=0,并停止 继续发送数据。
- 第二次挥手
服务器接收到客户端发送过来的请求释放连接的数据包,给客户端发送一个回应数据 包,数据包首部格式为:FIN=1,ACK=1,表示同意释放连接。
- 第三次挥手
经过第二次挥手后,客户端到服务器的连接已经释放了,TCP连接已经处于半连接的 状态,客户端已经不可以给服务器发送数据了,但服务器还能给客户端发送数据,客户端 也仍能接收;在服务器将所有数据给客户端发送完毕之后,会向客户端再发送确认数据 包,数据包首部格式为:FIN=1、ACK=1,表示服务器已经将客户端需要的数据发送完毕并 且要释放连接。
- 第四次挥手
客户端收到服务器的释放报文后,向服务器发送确认报文,报文首部格式为:ACK=1,FIN=0,表示同意服务器释放连接。
综上,两个端口的连接被释放。
流量控制是为了TCP连接在传输数据时控制发送方发送数据的速率,以此来保证接收方能够接收,确保数据传输的可靠性。
TCP连接不管发送方还是接收方都维护了一块固定大小的缓冲空间,发送方能够发送多少数据是由接收方的决定的,TCP使用的方式是滑动窗口协议,由滑动窗口的大小来控制传输数据的速率。
滑动窗口是TCP协议用于实现流量控制的机制,数据的发送方和接受方分别维护各自的缓冲区,这个缓冲区中则是各自的滑动窗口,发送方的窗口大小由接受方的窗口大小决定。
发送方的滑动窗口中包含:已发送并确认,已发送但未确认,未发送且没有超出接受方滑动窗口的范围,未发送且超出接受方滑动窗口的范围。
接受方的滑动窗口中包含:确认已确认,未收到但可以接收。
由发送方和接收方滑动窗口的组成,整个数据传输过程则是发送方根据接收方窗口的大小,不断发送数据,随着接收方不断接收确认通知发送方,接受方窗口不断向前移动,发送方的窗口也会不断向前移动,接收方可以通过控制窗口的大小,控制发送方的速率,实现流量控制。
拥塞指的是在整个网络中,同一时间传输的数据包数量过多,产生了网络的拥塞,因此,发送方需要维护一个拥塞窗口来控制同一时间内发送数据包的数量,TCP主要通过:慢启动、拥塞避免、拥塞发生、快恢复四个算法来进行拥塞控制。
- 慢开始:
拥塞窗口的值从1开始,采用加倍增长的方式由小到大逐渐增大,而不是一次性变大。
- 拥塞避免:
慢开始每个轮次都会将cwnd加倍,这样的增长方式会很快造成拥塞,所以会设置一个慢开始的门限值ssthresh,当cwnd大于ssthresh时,进入阻塞避免,每个轮次只将cwnd加一,降低了cwnd的增长速度。
- 拥塞发生:
在cwnd不断增大的时候,可能会发生拥塞,当触发了重传机制时,说明已经有数据包丢失了,也就是已经发生了拥塞。
不同的重传机制会有不同的处理方式:
超时重传:当发生超时重传时,说明网络拥塞已经非常严重,这是会将ssthresh设置为当前的cwnd值的一半,然后cwnd重新从1开始慢启动。
快速重传:当发生快速重传,还能够收到数据包,说明网络拥塞还没有很严重,这时会启用快速恢复方式。
- 快恢复:
将ssthresh设置为cwnd值的一半,让cwnd从ssthresh慢开始增长。
TCP和UDP都是传输层的协议,但它们具有很大的区别。
TCP | UDP | |
面向连接 | 面向连接,一对一通信 | 无需建立连接,支持一对一,一对多,多对多的通信 |
可靠性 | 通过确认应答,连接管理,流量控制,拥塞控制等保证可靠性 | 不保证可靠性 |
性能 | 传输效率慢,消耗资源多 | 传输效率高,消耗资源少 |
首部格式 | 需要20-60个字节 | 需要8个字节 |
由于TCP和UDP的区别及特点,这两个协议的使用场景也各不相同。
UDP:UDP传输数据不需要建立连接,接收方接收数据也不需要给出任何确认,虽然不可靠,但他很高效,所以在一些即时通信中使用UDP,例如:直播、视频;
TCP:TCP提供面向连接的可靠性传输,一般使用在:文件传输、发送和接受邮件、远程登录等场景中。