TCP应知应会(上)
大约 3 分钟
TCP应知应会(上)
TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决的是传输的可靠、有序、无丢失和不重复的问题。
协议特点
TCP是面向连接的传输层协议
每条TCP连接只能由两个端点,每条TCP连接只能是点对点的(一对一)
TCP提供可靠的交付业务,保证传送数据的无差错,不丢失、不重复而且有序
全双工通信,TCP连接的两端都设有发送缓存和接收缓存,用于临时存放双向通信的数据
TCP面向字节流(对比UDP面向报文)
TCP报文段
TCP传送的数据单元称为报文段,TCP报文段用于运载数据、建立连接、释放连接和应答。
字段
直接上图:
常考的有:
源端口和谜底端口字段
确认位ACK:ACK=1时确认号字段才有效,为0确认号无效。TCP规定,在连接后的所有传送的报文段都需要吧ack设置为1
同步位SYN:为1表示这是一个连接请求或者连接接收的报文
终止位FIN:释放连接,为1表示此报文段的发送方的数据已经发送完毕,并要求释放传传输接
窗口字段:表示允许对方发送的数据量,单位为字节
TCP连接管理
TCP连接的管理就是使得连接的建立和释放都能够正常进行。连接分为三个阶段:连接建立、数据传送、连接释放。
TCP连接建立的时候所需要面对(解决)的问题:
- 每一方都要知道对方的存在
- 要允许双方协商一些参数(例如窗口大小、是否扩大窗口、时间戳选项和服务质量等)
- 能够对传输实体的资源(例如缓存大小、连接表中的项目等)进行分配
建立连接(三次握手)
- 客户机先向服务器发送连接请求报文段【SYN = 1,seq = x】
- 服务器接收后,同意建立连接并回付,同时为该TCP连接分配TCP缓存和变量【SYN = 1, ACK = 1,ack = x+1,seq = y】
- 当客户机确认之后,还需要给服务器进行确认,并且也要为该TCP连接分配TCP缓存和变量【ACK = 1,seq = x+1,ack = y+1】
连接释放(四次握手)
- 客户机向其TCP发送一个连接释放报文的,并停止发送数据,主动关闭TCP连接【FIN = 1,seq = u】
- 服务器收到连接释放报文后立即做出确认【ACK = 1,seq = v,ack = u+1】
- 服务器通知客户端TCP释放连接【FIN = 1,ACK = 1,seq = w,ack = u+1】
- 客户机收到连接释放报文之后,发出确认,此时进入等待时间【ACK = 1,seq = u+1,ack = w+1】