TCP连接的建立和终止

TCP连接的建立和终止

三路握手
  1. 服务器通过调用socke、bind和listen这三个函数准备接受外来连接(被动打开)。
  2. 客户通过调用connect发起主动打开。客户TCP发送一个SYN分节,告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。
  3. 服务器确认ACK客户的SYN,同时自己也发送一个SYN分节,含有服务器将在同一连接中发送的数据的初始序列号。服务器在单个分节中发送SYN(K)和对客户SYN(J)的ACK(J+1)。
  4. 客户必须确认服务器的SYN。

通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部、一个TCP首部及可能有的TCP选项。
客户初始序列号为J,服务器的初始序列号为K。ACK的确认号是发送这个ACK的一段所期待的下一个序列号。因为SYN占据一个字节的序列号空间,所以每一个SYN的ACK的确认号就是该SYN的初始序列号加1。FIN类似。

TCP选项
  • MSS(maximum segment size)。发送SYN的TCP一端使用本选项通告对端它的最大分节大小。本连接的每个TCP分节中愿意接受的最大数据量。发送端TCP使用接收端MSS值作为所发送分节的最大大小。(TCP_MAXSEG套接字选项提取和设置这个TCP选项)
  • 窗口规模选项。TCP连接任何一段能够通告对端的最大窗口大小是65535,因为TCP首部中相应的字段占16位。
  • 时间戳选项。防止由失而复现的分组可能造成的数据损坏。
TCP连接终止

TCP建立一个连接需要3个分节,终止一个连接则需要4个分节。

  1. 主动关闭:某个应用进程首先调用close。该端TCP于是发送一个FIN分节表示数据发送完毕。
  2. 被动关闭:接收到这个FIN的对端。它的接收也作为一个文件结束符传递给接收端应用进程,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
  3. 一段时间后,接收到这个文件结束符的应用进程调用close关闭它的套接字。导致它的TCP也发送一个FIN。
  4. 接收这个最终FIN的原发送端TCP确认这个FIN。

SYN(J) -> [ACK(J+1) with SYN(K)] -> ACK(K+1)
FIN(M) -> [ACK(M+1)] then [FIN(N)] -> ACK(N+1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值