1.传输协议简介
TCP与UDP
TCP协议基于连接传输,需要先建立连接后,保证数据的准确性,传输后关闭连接;
而UDP基于非连接,允许错误存在,只是尽力传输,但是速度非常快。
TCP协议就是要在不可靠的信道上,保证可靠的传输!
TCP如何确保传输
三次握手就是建立连接;传输数据,就是在连接建立之后,完成数据的互发;四次会收就是关闭连接。
TCP——三次握手
三次握手,就是首先由客户端发送SYN给服务器,这是第一次握手;然后服务器就会回复SYN+ACK信号给客户端,客户端进入SYN-SENT模式,而服务器切换到LISTEN模式,这是第二次握手;第三次握手,就是客户端发送ACK信号给服务器。
至此,完成三次握手,客户端和服务器均进入ESTAB-LISHED状态,可以完成数据的互发。
TCP——数据传输
采用TCP协议进行数据传输,是不会造成IP分片的。若数据过大,只会在传输层进行数据分包。
TCP/IP 协议栈中定义了MSS, 为的是提高网络的性能,lwIP定义的MSS大小是1460。这个1460,就是MTU-IP首部20字节-TCP首部20字节的大小。
为了解决丢包问题和乱序问题,TCP协议采取流量控制,其包含两个协议,一个是停止等待协议,一问一答,信道利用率和效率低;另一个是滑动窗口协议,确认之前多个数据发送,信道利用率和效率高。
TCP——滑动窗口协议
发送缓冲区,其格式是TCP的首部(序号+长度),后跟数据内容;回复确认的ACK信号就是序列号+长度(ACK的意义就是下一包的起始序列和长度);组装数据,就根据序列号和长度重组数据。
如果是2号丢失,那么接收端发送ACK接收确认消息,发送端的滑动窗口就会向右移动一个发送5号数据包,且2、3、4会重传(如果3、4正确,重传后的3、4就直接丢弃)。
TCP——四次挥手
客户端在ESTAB-LISHED状态发送FIN给服务器,客户端进入FIN-WAIT-1状态,这就是第一次挥手;然后服务器在ESTAB-LISHED状态接受FIN,回应一个ACK信号给客户端,服务器进入CLOSE-WAIT状态,这就是第二次挥手;然后服务器发送一个FIN信号给客户端,客户端进入FIN-WAIT-2状态,服务器进入LAST-ACK状态,这就是第三次挥手;最后客户端发送ACK信号给服务器,自身进入TIME-WAIT状态(2s),然后进入CLOSED状态,服务器也进入CLOSED状态,这就是第四次挥手。
UDP协议
TCP与UDP区别
UDP速度快,性能损耗少、资源占用少;而TCP稳定可靠、稳定性强、能保证数据传输完整。
总结
比较了传输层协议中的TCP协议和UDP协议,大概了解了TCP协议的传输过程。