UNP——第二章,TCP握手与挥手分析
1.握手 说明: 下面涉及 FIN,SYN,ACK之类数据时,都是由TCP服务收发, 涉及 accept, listen 之类api,都是 应用进程 完成。 都统一使用 客户端,服务端描述,请自行分辨。 (1)首先描述下3次握手,TCP协议做了什么。 客户端,主动打开,发送自己的序列号SYNj,并期待对方回复ACKj+1 服务端,被动打开,接送自己的序列号SYNk和ACKj+1,并期待对方回复ACKk+1 客户端,接收对方ACK,己方打开完成,接收对方SYN,发送ACKk+1 服务端,接收对方ACK,己方打开完成。 分析下: 首先打开分为,被动打开和主动打开。 当接收到对方的ACK,则己方打开完成,则可以使用socket进行读写操作,但并不保证正常。 (2)结合 系统调用分析三次握手 客户端,listen,进行被动打开 服务端,connect ,进行主动打开,发送SYNj(如果乙方此时没有listen 完成,则connect 失败) 客户端,回复SYNk + ACKj+1, 应用层无任何变化。 服务端,收到 ACKj+1 + SYNk,并回复 ACKk+1, 甲方打开完成,connect 返回。 客户端,收到ACKj+1,可以进行 read,write。 服务端,accept,如果乙方没有收到 SYNj 则会阻塞,否则返回 服务端,收到ACKk+1,可以进行