1.TCP协议的特点
①面向连接。进程与进程之间直接连接(虚连接)
②是两个端点的点对点通信
③可靠有序,不丢不重
④全双工通信
⑤面向字节流。传输的数据一律视为按顺序从小到大编好序号的一个个字节。
2.TCP报文段
数据部份:存放要传输的字节。
首部:
①源端口、目的端口
②数据部分中第一个字节的序号(序号seq)
//例如上图中序号=1
③期望受到下一个报文段的第一个字节的序号(确认号ack)
//例如上图中确认号=4
④6个控制位
ACK确认位:ACK=1时,确认号字段才有效。所有报文段ACK初始值均置1
SYN同步位:SYN=1时,说明这是一个 连接请求/连接接受 报文。
SYN=1, ACK=0时,是连接请求报文
SYN=1,ACK=1时,时连接接受报文
FIN终止位: FIN=1时,说明发送方数据发送完毕,要求断开连接。
URG
PSH
RST
⑤其他
3.TCP连接管理
①连接的建立(三次握手)
Ⅰ. 发送连接请求报文段。SYN=1,ACK=0,seq(序号)=x,选择一个初始序号
Ⅱ. 服务器为客户分配接收缓存,并返回确认报文段,接受连接。
SYN=1,ACK=1,seq=y,ack(确认号)=x+1
Ⅲ. 客户为服务器分配发送缓存,并返回确认的确认,可以携带数据
SYN=0,ACK=1,seq=x+1,ack=y+1
②连接的释放(四次挥手),两个进程都可以申请断开
Ⅰ. 客户停止发送数据,并发送连接释放报文段。FIN=1,seq=u
Ⅱ. 服务器返回确认报文段,不再接受客户发送的数据,连接处于半关闭状态。
ACK=1,seq=v,ack=u+1
Ⅲ. 服务器数据发完后,发送连接释放报文段。 FIN=1,ACK=1,seq=w,ack=u+1
Ⅳ. 客户端返回确认报文段,连接彻底关闭。 ACK=1,seq=u+1,ack=w+1