前置知识
1 为什么需要TCP连接?
因为是这套机制是以不同的五元组描述的通道进行管理的
2 什么是连接(Connection)?
抽象层面上:五元组唯一标识的一条通信通道
OS层面上:一个Connection对象,描述五元组信息+各种信息管理(SN/ASN+缓冲信息区)
OS通过List/Map把Connection对象组织起来
3.连接管理
需要有创建连接的过程和销毁连接的过程
因此有了三次握手建立TCP连接和四次挥手释放连接
生命周期1)建立连接 2)连接可用(进行正常通信)3)连接释放
4.什么是Socket(套接字)
三次握手建立连接
1.主要过程(客户端与服务器之间的通信过程)
SN:序列号
SYN:表示想建立连接
ASN:确认序列号
ACK:确认应答用的,表示确认之前接收到的segment,配合确认序列号(ASN)使用空的ACK不需要再次应答
描述三次握手的过程
第一次:客户端发送含SN,SYN的包到服务器
第二次:服务器发送含ACK,SYN的包到客户端,ASN=Client’S+1
第三次:客户端发送含ACK,ASN=Server‘SN+1的包到服务器
练习
写出上述7个过程的通信过程
三次握手的状态转换:
四次挥手释放连接
TCP是全双工的,需要双向来关闭
主动关闭方VS 被动关闭方(不等同于服务器和客户端)
1)我是主动关闭方
2)我是被动关闭方
3)我是同时关闭方
问题:为什么握手是三次?挥手是四次?
1)对于握手:握手只需要确认双方通信时的初始化序号,保证通信不会乱序。第三次握手的必要性:假设服务端确认丢失,连接并未断开,客户端超时重发连接请求,这样服务器会同时对一个客户机保持多个连接,造成资源浪费
2)对于挥手:TCP是双工的,所以发送方和接收方都需要FIN和ACK,只不过有一方是被动的,所以看上去就成了4次挥手