Linux 网络编程5 TCP握手

TCP/IP协议网络封包格式

在这里插入图片描述

  • 以太网头

在这里插入图片描述

  • IP头
    在这里插入图片描述

  • TCP头
    TCP可靠传输,通过确认和重发机制.
    在这里插入图片描述
    TCP把所有要发送的数据进行编号(每一个字节用一个号)
    发送时从当前数据位置开始,发送window大小的数据
    SYN和ACK的表示:
    举例 SYN = 999, ACK =1000,表示前面999个字节都收到,请从1000号开始分配。

  • UDP头
    在这里插入图片描述

三次握手

  • seq:序号。占4B,范围0~2^23-1。TCP是面向字节流的,所以TCP连接传送的字节流中每个字节都需要按顺序编号。序号字段值指的是本报文段所发送数据的第一个字节的序号。
    例如:一段报文的序号字段的值是301,而携带的数据共有100B,表明本报文段的数据的最后一个字节的序号是400,因此下一个报文段的数据序号应从401号开始。
  • ack:占4B,是期望收到收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表明到序号N-1为止的所有数据都已收到。
    例如:B正确收到了A发送过来的一段报文,其序号字段是501,而数据长度是200B(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此B期望收到A的下一个序列号是701,于是B在发送给A的确认报文段中吧确认号置为701。
  • ACK:仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。

连接的建立经过以下3个步骤,通常称为3次握手。
连接建立前,服务器进程处于Listen状态,等待客户的连接请求。

  • 第一步:客户机的TCP首先向服务器的TC发送连接请求报文,这个特殊报文段的首部中同步为SYN置1同时选择一个初始序号seq=x。TCP规定,SYN报文段不能携带数据,但要消耗一个序号。这时,TCP客户进程进入SYN-SENT(同步已发送)状态。

  • 第二步:服务器的TCP收到连接请求的报文段后,如同意建立连接,则向客户机发送确认,并为该TCP连接分配缓存和变量。在确认报文段中,把SYN和ACK位都置1,确认号是ack = x+1,同时也为自己选择一个初始序号seq=y。注意:报文段不能携带数据,但要消耗一个序列号。这时TCP服务器进入TCP-RCVD(同步收到)状态。

  • 第三步:当客户机收到服务器发送的确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量。确认报文段的ACK位置置1,确认号ack=y+1,序号seq=x+1.该报文段可携带数据,若不携带数据则不消耗序号,这时TCP客户进程就进入ESTABLISHED(已建立连接状态)。

四次握手

参与TCP连接的两个进程中的任何一个都能终止该连接。TCP连接释放的过程通常称为四次握手。

  • 第一步:客户机打算关闭连接时,其向TCP发送连接释放报文段,并停止发送数据,主动关闭TCP连接,该报文段的终止位FIN置1,序号seq=u,它他等于前面已传送过的数据的最后一个字节的序号加1,FIN报文段不携带数据,也消耗一个序号。这时,TCP客户进程进入FIN-WAIT-1(终止等待1)状态。TCP是全双工的,即可以想象为一条TCP连接上有两条数据通路,发送FIN的一端不能再发送数据,即关闭了一条数据通路,但对方还能发送数据。
  • 第二步:服务器收到连接释放报文段后发出确认,确认号是ack=u+1,序号seq=v,等于它前面已传送数据的最后一个字节号加1.然后服务器进入CLSOE-WAIT(关闭等待)状态。此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态,但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。
  • 若服务器以及没有要向客户机发送的数据后,就通知TCP释放连接,此时,其发出FIN=1的连接释放报文段。设该报文段的序号为w(在半关闭状态可能又发送了一些数据),还需重复上次已发送的确认号ack = u+1.这时服务器进入LAST-ACK(最后确认)状态。
  • 第四步:客户机收到连接释放报文段后,必须发出确认。把报文段中的确认位ACK置1,确认号ack=w+1,序号seq=u+1,此时TCP连接还未释放,必须经过时间等待计数器置位的时间2MSL后,客户机才进入CLOSED(连接关闭)状态。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值