2018-09-25
TCP:
全称:Transmission Control Protocol(传输控制协议),是工作在OSI七层模型(Open System Interconnect,开放式系统互联)中的传输层,是一种面向连接的、可靠的、基于字节流的通信协议。
TCP层将应用层的数据流分成报文段,再继续向网络层传输。为了数据传输的可靠性,TCP层将每个报文段进行了编号,用来保证接收端数据的我完整性。
TCP层每传输一个报文段,就向接收端发送一次确认信息。在一定时间内,如果接收端没有返回确认信息,发送端将重新发送丢失的报文。
UDP:
全称:User Datagram Protocol(用户数据报协议),与TCP一样工作在传输层,是一种面向无连接的、不可靠的通信协议。
UDP仅将应用层的数据流分成报文直接进行传输,不进行排序。数据安全没有保障,但操作效率高,适合普通数据传输(QQ)。
TCP连接的三次握手:
连接时:
1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1和序号x+1的ACK报文,一个标准的TCP连接完成。
#TCP断开连接四次挥手过程:
1. Client端发起中断连接请求,也就是发送FIN报文。
2. Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。
3. 这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。
4. Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
本文来自 tensorzhl 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/tensorzhl/article/details/75797364?utm_source=copy