计算机网络--传输层
协议
-
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的原因:
- 确保最后一个报文可以发送成功到服务端
- 使得本次连接产生在网络中报文消失
四次挥手的原因:让服务端可以发发送未发送完的数据。