在互联网上所有的信息交互,都离不开网络传输。
其中网络传输主要分为以下7大层
物理层 实现计算机系统与网络间的物理连接
数据链路层 进行数据打包与解包,形成信息帧
网络层 提供数据通过的路由
传输层 提供传输顺序信息与响应
会话层 建立和中止连接
表示层 数据转换、确认数据格式
应用层 提供用户程序接口
今天我们主要讨论传输层的协议,也就是大家熟悉的 TCP 和UDP传输协议
TCP(Transmission Control Protocol) 是传输控制协议,提供的是面向连接、可靠的数据流传输。当客户端和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能顺序地从一端传到另一端。
UDP(User Datagram Protocol)是用户数据报协议,提供的是非面向连接的、不可靠的数据流传输。它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。UDP在传输数据前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,不保证数据按顺序传递,故而传输速度很快。
TCP一般用于文件传输(对数据准确性要求高,速度可以相对慢);UDP一般用于即时通信,网络游戏包的数据传输( 对数据准确性和丢包要求比较低,但速度必须快)
所以tcp连接需要断开需要以下过程:
三次握手:建立连接
建立连接时,客户端发送syn包到到服务器,服务器收到syn包时,向客户端发送ACk 包,同时发送一个自己的syn包,客户端收到服务器的SYN+ACK包后向服务器发送ACK 这样就建立三次握手连接
四次挥手:断开连接
断开连接可以是客户端发起,也可以是服务器端发起。假设客户端发起中断连接请求。客户端首先发送FIN报文给服务器端,表示客户端这边已完成发送数据的任务。服务器接到FIN报文后,如何此时服务器端还有数据没有发送完成,可以继续发送数据,所以服务器先发送ACK 包给客户端。 当服务气短确定数据已经发送完成,则向客户端发送FIN 报文,告诉客户端,服务器这边数据发送完了。 客户端接收到FIN报文后,就知道可以断开连接了。但是他还是不相信网络,所以发送ACK包给服务器进入TIME_WAIT状态,服务器端收到ACK后就断开连接了。 客户端在等待了一段时间后没有收到来自服务器的回复,则证明,服务器端已经正常关闭,最后客户端关闭连接 最终完成了4次挥手的断开连接