计算机网络--传输层

协议

  • UDP传输协议:一种不面向连接不可靠的传输协议
    进最大努力交付、面向报文、支持一对一、一对多、多对一通信

  • TCP传输协议: 一种面向连接可靠的传输协议
    可靠交付、超时重传、流量控制、拥塞控制、提供全双工通信 、面向字节流 、端到端

    使用UDP协议的例子:实时聊天 实时游戏 流媒体 QQ语音 QQ视频

    使用TCP协议的例子:HTTP超文本传送 FTP文件传输 SMTP传送邮件协议

TCP首部和UDP首部

TCP首部和UDP的首部都是20个字节,其中UDP首部有12个字节是伪首部、TCP首部还包括一个可变字段。两种协议的首部都包括源端口、目的端口、数据长度和效验和。
计算机网络--传输层
UDP首部有12个伪首部、用来补充字节和计算小样和。
计算机网络--传输层

TCP协议的可靠实现

TCP协议依靠 确认应答、超时重传、面向连接、流量控制、拥塞控制、滑动窗口 保证可靠传输。

确认应答

在TCP协议传输中,每次接受到数据后,都会给对方发生一个应答ACK,通过确认号和序号来建立对应关系

超时重传

当发生端发送一个数据时,会开启一个计时器,一定时间内 没有接受到对方的确认ACK时,则认为该数据已丢失,然后发送方会重新发送该数据

滑动窗口

*发送端 和接受端各自都拥有自己的滑动窗口 *

发送端会发送滑动窗口内的所有数据,当收到接受端确认后,根据确认字段中的最大确认号进行滑动。
接受端会讲收到的数据接收到滑动窗口中,进行累计确认和滑动。

流量控制

通过控制发送方的发生速率,保证接受方来得及接收
接收方通过确认包里的窗口字段控制发送方的发送速率

拥塞控制

避免因网络中出现拥塞而陷入更严重的拥塞
控制方法:慢启动、拥塞避免、快速重传、快速恢复

慢开始

拥塞窗口和接受窗口共同影响发生窗口的大小
最开的拥塞窗口设置为一个报文端大小,每收到一个新的报文时,就将窗口扩大为原来的二倍,进行指数增加。

拥塞避免

每收到一个新的报文时,就将拥塞窗口扩大一个单位,进行线性增加。
慢启动和避免拥塞拥有一个界限ssthresh,当拥塞窗口的大小小于ssthresh时进行慢开始,否则进行拥塞避免,无论是慢开始还是拥塞避免,一但产生了拥塞,则立马将拥塞窗口的大小设置为一个单位,讲ssthresh的值设置为拥塞状态时拥塞窗口大小的一半

判断是否拥塞的标志:发生超时者收到重复的确认帧。

快速重传

接收方接收到失序报文立即发出重复确认,发送方收到3次冗余ACK则可以确定报文丢失,进行选择重传

快速恢复

当发送报文时 出现了超时重传或者ACK冗余时,将ssthresh变为此时变为拥塞窗口的一半,将拥塞窗口设置为何ssthresh相同,而不是设置为一个单位。

三次握手

计算机网络--传输层
三次握手一共拥有三个步骤

前提:服务端被动打开、客户端主动打开

  • 客户端向服务端发送连接请求 ,其中TCP首部中SYN=1、ACK=0 客户段进入SYN-SEND状态

  • 服务端向客户端发送确认请求,其中TCP首部中SYN=1、ACK=1服务端进入 SYN-RCVD状态

  • 客户端向服务端发送连接确认请求 ,其中TCP首部中SYN=0、ACK=1 客户段进入监听状态,客户端确定建立连接

  • 服务器接受到客服端发送的连接确认请求后,服务器进入监听状态,服务端确定建立连接。

    若第一次第二次握手丢失 ,客户端会因为处在SYN-SENT等待确认超时, 重新发送连接请求。

    若第三次挥手丢失 服务端会因为处在SYN-RCVD状态超时 重新发送确认请求,使得客户端重新进行第三次握手。

    第三次握手的作用:避免有失效的连接服务到达服务端,让服务器错误打开连接.

四次挥手

计算机网络--传输层

  • 客户端向服务端 发送一个释放请求,其中TCP首部中FIN=1 ACK=1, 客户段进入FiN-Wait1状态

  • 服务端向客户端发送确认请求其中TCP首部中FIN=0 ACK=1 服务端进入 CLOSE-Wait状态

  • 服务端向客户端发送确认关闭请求,其中TCP首部中FIN=1 ACK=1 服务端进入 LAST-ACK状态

  • 客户端向服务器发送确认请求,其中TCP首部中FIN=0 ACK=1 客户端进入TIME-Wait状态

  • 服务端收到确认关闭连接

  • 客户端等待2MSL的时间,关闭连接

    若第四次挥手丢失,服务端会因为等待超时,重新向客户端再次发送确认关闭请求,使得客户端重新第四次挥手

    客户端等待2MSL的原因:

    1. 确保最后一个报文可以发送成功到服务端
    2. 使得本次连接产生在网络中报文消失

    四次挥手的原因:让服务端可以发发送未发送完的数据。