TCP三次握手
1.TCP特性
说明:
- TCP提供一种面向连接的、可靠的字节流服务
- 在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP
- TCP使用校验和,确认和重传机制来保证可靠传输
- TCP给数据分节(给每一个传送的数据字节都编号)进行排序,并使用累积确认保证数据的顺序不变和非重复
- TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制
注意:
TCP 并不能保证数据一定会被对方接收到,因为这是不可能的。TCP 能够做到的是,如果有可能,就把数据递送到接收方,否则就(通过放弃重传并且中断连接)通知用户。因此准确说 TCP 也不是 100% 可靠的协议,它所能提供的是数据的可靠递送或故障的可靠通知。
2.TCP首部
说明:
- TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。
- 客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。
- TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)。
解释:
- 序号:seq(Sequence)序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
- 确认序号:ack(Acknowledge)序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
标志位:每个标志位占用1Bit,共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
- URG:紧急指针(urgent pointer)有效。
- ACK(Acknowledge):确认序号有效。
- PSH(Push):接收方应该尽快将这个报文交给应用层。
- RST(Reset):重置连接。
- SYN(Synchronous):发起一个新连接。
- FIN(Finish):释放一个连接。
需要注意的是:
- 不要将确认序号 ack(表示确认信息)与标志位中的 ACK(为1表示确认有效)搞混了。
- 确认方 ack等于发起方 seq+1,两端配对。