简述TCP协议

TCP(Transmission Control Protocol 传输控制协议)面向连接、可靠的、基于字节流的通信协议。它在传输层,提供端到端的可靠通信。

TCP特点:

  • 面向连接:在传输数据之前,TCP需要在通信的双方建立连接,这个过程通常通过三次握手完成
  • 可靠传输:TCP通过确认机制、序列号、重传控制、校验和、流量控制、拥塞控制等技术手段来保证数据传输的可靠性
  • 字节流服务:TCP将应用程序传输的数据看作一个无结构的字节流,而不考虑这些字节属于哪些结构
  • 全双工通信:TCP允许双方同时发送和接收数据,这意味着数据在两个方向上可以同时传输

TCP可靠机制

  • 确认应答机制(ACK):当发送数据段后,会等待接收方的确认报文,如果一段时间没有发送,发送方会重新发送这个数据段。
  • 序列号数据包重排序:TCP为每一个字节流分配一个唯一的序列号,该序列号用于确认报文段的顺序,同时可以检测丢失的数据包
  • 超时重传机制:如果发送方没有在合理的时间内没有收到报文的确认应答,就会自动重传报文
  • 流量控制:确保不会发送超过对方处理能力的数据
  • 拥塞控制:防止网络出现拥塞而导致数据丢失
  • 校验和:在每个报文的首部会包含一个16位的校验和,用于检测数据在传输中是否被篡改或损坏。如果校验和不匹配,则接收方会放弃该报文并不发生确认应答,发送方会认为数据丢失并重新发送

TCP包头

TCP三次握手四次挥手

三次握手

第一次握手

客户端向服务端发送一个带有SYN(Synchronize)标志位的TCP报文段,表示客户端希望建立连接。报文中包含随机生成的seq序列号,用于标识传输的顺序

服务端收到这个报文后,会直到客户端想建立连接

第二次握手

服务端如果同意连接请求,它会回复一个带有SYN,ACK(Acknowledgment)的标志位的TCP报文段。ACK位表示确认收到了客户端的SYN报文。此时ack(确认号) = x + 1 表示确认收到客户端序列号x。同时,服务端会发送自己的初始序列号 seq = y + 1,准备与客户端进行通信

客户端收到这个报文后,会确认服务端的序列号,并准备发送最终的确认信息

第三次握手

客户端发送一个带有ACK标志位的TCP报文,确认收到服务端SYN报文。此时ack = y + 1 表示确认收到服务端的序列号y,并且发送客户端的下一个序列号seq = x + 1

服务端收到这个报文后正式建立连接,双方可以开始传输数据

四次挥手

第一次挥手

客户端发送FIN(Finish)标志位给服务端,希望服务端能关闭连接。此时客户端进入FIN-WAIT-1状态

第二次挥手

服务端接受FIN包后,发送一个ACK包给客户端,表示可以同意关闭连接。此时服务器进入CLOSE-WAIT阶段,客户端进入FIN-WAIT-2状态

第三次挥手

服务器准备好关闭连接后,发送一个FIN包给客户端,表示服务器也准备关闭连接。此时服务器进入LAST-ACK状态

第四次挥手

客户端收到服务端的FIN包后,发送一个ACK包给服务端,表示确认关闭。服务端收到ACK包后,立即进入CLOSE状态,关闭连接。客户端将等待一段时间,确保服务端收到ACK包,然后进入CLOSE状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值