1.三次握手
(1)服务器时刻监听 准备接受外来连接 (被动连接)
(2)客户端通过调用connect (主动打开) 客户端TCP 发送一个SYN(同步) 分节, 表明服务器客户将要在(待建立连接)中发送数据的初始序列号。通常SYN部携带数据 所在IP数据报文只含有一个ip首部,一个TCP首部及可能有的TCP选项
(3)服务器需确认(ACK)客户的SYN 同时发送一个SYN分阶,它含有服务器在此次连接中发送数据的初始序列号。
实例一:
IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836
IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837
IP 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1
第一次握手:192.168.1.116发送位码syn=1,随机产生seq number=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立联机;
第二次握手:192.168.1.123收到请求后要确认联机信息,向192.168.1.116发送ack number=3626544837,syn=1,ack=1,随机产生seq=1739326486的包;
第三次握手:192.168.1.116收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,192.168.1.116会再发送ack number=1739326487,ack=1,192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。
2.TCP选项
1.MSS选项 对SYN接收端 通告 对端 的最大分节大小 也就是它在本连接的每个TCP分节中愿意接受的最大数据量
2.窗口规模选项 。 窗口定义详解https://www.cnblogs.com/woaiyy/p/3554182.html
3.时间戳选项
3. TCP 连接终止
(1)某个应用进程首先调用close 成该段为 主动关闭 该端的TCP发送一个FIN分阶表示数据发送完毕。
(2) 接受到FIN的一端执行被动关闭 。 这个FIN由TCP确认 它的接收也作为一个文件结束符 传递给应用进程 。 FIN的接收意味着接收端应用进程在相应连接上再无额外数据可以接收。
(3)收到这个文件结束符的的应用将调用CLOSE 关闭他的套接字 。 它的TCP也发送一个FIN
(4)接受这个最终FIN的原发送端TCP(即执行主动关闭的的那一端) 确认这个FIN