一、TCP简介及报文格式
1、简介
TCP提供面向连接、可靠的字节流服务。
2、报文格式
重点字段:
- 序号:Seq序号,32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
- 确认序号:ACK序号,32位,只有ACK标志位为1时,确认序号字段才有效,Ack = Seq + 1。
- 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等。
标志位 | 具体含义 |
---|---|
URG | 紧急指针(urgent pointer)有效 |
ACK | 确认序号有效 |
PSH | 接收方应尽快将报文交给应用层 |
RST | 重置连接 |
SYN | 发起一个新连接 |
FIN | 释放一个连接 |
- 注意
- (a)不要将确认序号Ack与标志位ACK搞混;
- (b)确认方Ack = 发起方Req + 1,两端配对。
二、三次握手(Three-way Handshake)
1、含义
建立TCP连接时,客户端和服务器总共发送3个包。
2、目的
连接服务器指定窗口,建立TCP连接,并同步连接双方序列号和确认号并交换。TCP窗口大小信息在socket编程中,客户端执行connect()时,将触发三次握手。
- 注意:下图要达到熟练默写程度。
3、过程
- 1st 握手 - SYN 报文:
SYN=1,seq=x
客户端发送一个TCP的SYN标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序列号X,保存至包头的序列号(Sequence Number)字段里。