传输层提供了进程间的逻辑通信,向高层用户屏蔽了网络层的细节。
1.TCP三次握手和四次挥手
1.1 三次握手
1.1.1 流程
- 客户端—发送连接请求报文SYN=1,ACK=0,初始序号seq=x—服务端
- 服务端—发送连接确认报文SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y—客户端
- 客户端—发出连接确认报文,ACK=1,确认号ack=y+1,序号seq=x+1
1.1.2 为什么要三次握手
答:确保可靠的通信通道,让双方都确认对方和自己的接收和发送功能是正常的。比如:Client发送的连接请求A在网络中滞留,Client就重传请求B,若没有三次握手,Server会打开两个连接,反之,Server会忽略滞留的请求A。
1.1.3 为什么Server要传回SYN
答:Server传回SYN是为了告诉Client,我接收到的信息是你发送的信息,证明Client到Server通信通道无问题。
1.1.4 为什么Server传了SYN,还要传ACK
答:传了SYN,证明Client到Server通信通道无问题,还需要ACK验证Server到Client的通信通道。
1.2 四次挥手
1.2.1 流程
ACK在连接建立后都为1。
- 客户端—发送连接释放报文FIN=1,初始序号seq=u—服务器
- 服务器—发出确认收到报文ACK=1,确认序号ack=u+1,初始序号seq=v—客户端
- 服务器—关闭连接,发送连接释放报文FIN=1,确认序号ack=u+1,初始序号seq=w—客户端
- 客户端—发回确认收到报文ACK=1,确认序号seq=w+1,初始序号ack=u+1—服务器
1.2.2 为什么要四次挥手
答:Client发出连接释放通知,Server确认收到后,Client就进入半关闭状态(Client只能收消息不能发送),Server把未发完的数据发送完毕后,发送连接释放通知,Client确认后就关闭连接。
1.2.3 为什么Client要等待2msl
答:MSL(Maximum Segment Lifetime)最大报文生存周期,Client发送ACK进入Time_Wait状态,等待2MSL是为了防止最后一次ACK没有正确传给Server,Server会再发送FIN信号,等待结束进入Close状态。
2. TCP可靠传输
2.1 超时重传
答:若一个已经发送的报文段在超时时间内没有收到确认,就重传这个报文段。超时时间RTO略大于加权往返时间RTTs。往返时间RTT指一个报文段从发送再到接收到确认所经过的时间。
2.2 ARQ自动重传
答:ARQ包括停止等待ARQ和连续ARQ。
- 停止等待ARQ协议:基本原理是每发完一个分组就停止发送,等待对方确认,收到确认后再发送下一组,没有收到就重传。优点是简单,缺点是信道利用率低。总结:发完一个就停止,确认后再发下一个
- 连续ARQ协议:维持一个发送窗口,在窗口内的分组可以连续发送不用等待确认,接收方对到达的最后一个分组发送确认。优点是信道利用率高,缺点是发送方无法知道接收方正确收到的分组信息,重传需要回退N。总结:不用确认就能发,对last one确认,失败需要回退N
2.3 滑动窗口
答:发送方的滑动窗口大小根据接收方来设置,接收方通过tcp告知自己的滑动窗口大小。
发送窗口的最左部为已发送但未收到确认的第一个字节,接收窗口的最左部为已发送确认并交付主机。
接收窗口只对最后一个按序到达的字节进行确认。如:收到31,34,35,只对31进行确认。
2.4 流量控制
答:流量控制是为控制发送方发送速率,保证接收方能及时接收。通过滑动窗口实现流量控制。
2.5 拥塞控制
答:拥塞控制是为了防止过多数据注入网络,导致网络过载。TCP的拥塞控制采用四个算法实现:慢开始、拥塞避免、快重传、快恢复。
发送方维护一个拥塞窗口(cwnd)的状态变量。
- 慢开始:cwnd初始值为1,每个轮次cwnd加倍
- 拥塞避免:慢开始门限ssthresh,当cwnd>ssthresh时,进入拥塞避免,让cwnd每个轮次+1。出现超时,就令ssthresh = cwnd/2,重新进行慢开始。
- 快重传:接收方只对最后一个收到的有序报文段进行确认,若发送方介绍重复确认,就判断下一个报文段丢失,执行快重传,即立即重传下一报文段。
- 快恢复:若丢失个别报文段,执行快恢复,令ssthresh = cwnd/2, cwnd = ssthresh,直接进入拥塞避免。
3. TCP和UDP区别
3.1 两者区别
答:总结下:
- TCP:面向连接的可靠交付,以字节流传输,效率低,耗费资源少,适用于对通信数据严格的场景,如文件传输。首部20-60字节。
- UDP:无连接的尽最大努力交付,以数据报文段传输,速度快,耗费资源少,适用于对通信速度要求高的场景,如在线视频。首部8个字节。
3.2 UDP首部格式
答:UDP首部只有8个字节,包括源端口、目的端口、长度、检验和。
3.3 TCP首部格式
答:包含如下:
- 序号:对字节流编号。
- 确认号:期望收到的下一个报文段序号。eg.B收到A的序号201,长度100,则B发给A的确认报文段的确认号为301。
- 数据偏移:指首部的长度。
- 确认ACK:当ACK=1时,确认号字段有效,否则无效。连接建立后,ACK都为1。
- 同步SYN:在建立连接时用来同步序号。当SYN=1 ACK=0时,为请求连接报文,SYN=1 ACK=1为建立连接的响应报文。
- 终止FIN:释放连接。当FIN=1时,为此报文端的发送方数据发送完毕,请求关闭连接。
- 窗口:作为接收方让发送方设置其发送窗口的依据。