[计算机网络] TCP连接——TCP三次握手

Note:本文内容参考自《计算机网络 自顶向下方法 原书第六版》


前言:TCP是面向连接的协议,提供透明、可靠的数据流传输。传输连接有三个阶段,即连接建立、数据

传送和连接释放。传输连接的管理就是是传输连接的建立和释放都能正常运行。在TCP连接的建立过程中

要解决三个问题:首先要使每一方都能够感知对方的存在;其次要允许双方协商一些参数(如最大报文段

长度、最大窗口大小、服务质量等);最后能对传输实体资源(如缓存大小、连接表中的项目等)进行分

配。TCP的连接建立采用的是C/S方式,主动发起连接建立的应用进程成为客户Client,被动等待连接建立

的应用进程成为服务器Server,TCP连接通过三次握手建立。


TCP连接的建立——TCP三次握手过程

第一步:客户端首先向服务端发送一个特殊的TCP报文段。

该报文段(也称SYN报文段)中不包含应用层数据,主要包括的内容有:

  • 报文段首部中的一个标志位,SYN位,被置为1
  • 客户端随机选取的一个初始序号(client_isn)

客户端会将初始序号放置于TCP SYN报文段的序号字段中,而整个TCP报文段会被封装在一个IP数据报

中发送给服务器。


第二步:服务端接收到客户端发送过来的IP数据报,会从中提取出TCP SYN报文段,为该TCP连接分配

TCP缓存和变量,并向客户端发送允许连接的报文段(SYNACK报文段),该报文段中也不包含应用层

数据,主要包括3个重要信息:

  • SYN位,被置为1
  • 首部确认字段ACK,被置为client_isn+1
  • 服务端选择的自己的初始序号server_isn,将其放置到TCP报文段首部的序号字段中

这个SYNACK报文段实际上是在向客户端传递一个这样的信息:“我收到了你发起的连接请求SYN分组,

该分组带有初始序号client_isn。我同意建立该连接,我自己的初始序号为server_isn。”


第三步:收到服务端的SYNACK报文段之后,客户也要给该连接分配缓存和变量。此时客户端会向服务端

发送第二个报文段,这也是三次握手过程的最后一个报文段,其主要包括的内容如下:

  • SYN位,被置为0,表示连接已成功建立
  • 序号值client_isn+1
  • 首部确认字段ACK,被置为server_isn+1
  • 报文段负载中携带客户端到服务端的数据(可选)

一旦完成以上三个步骤,客户和服务器就可以相互发送包含数据报的报文段了,在以后的每一个报文段中,

SYN比特都将被置为0,表示连接已建立,除非连接关闭,否则SYN的值会一直保持为0。


图示


一个有趣的问题

另外,书上就“为什么需要3次握手,而不是两次”这个问题提供了一个有趣的类比说明,内容如下:

一个攀岩者和一个保护者(位于攀岩者下方,他的任务是处理好攀岩者的安全绳索)他们之间就使用

了与TCP相同的三次握手通信协议,以确保在攀岩者开始攀爬前双方都已经准备好了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值