TCP协议:三次握手,四次挥手

这篇文章纯粹是照着谢希仁的那本书敲了一遍,重点在巩固知识。

TCP最主要的特点:
1.TCP是面向连接的运输层协议,这就是说,应用程序在使用TCP协议之前,必须先建立TCP连接,数据
传输结束后,释放TCP连接。
2.每一条TCP只能有两个端点,每一条TCP连接只能是点对点(一对一)
3.TCP提供可靠交付的服务,即TCP连接传送的数据:无差错,不丢失,不重复,并且按序到达
4.TCP提供全双工通信,TCP允许通信双方的应用进程在任何时候都能发送数据,TCP连接的两端都设有
发送缓存和接收缓存,发送时,应用程序会先把数据发送给发送给TCP缓存,然后应用进程就可以先去做
自己的事,而TCP会在合适的时候发出数据,接收时会TCP会把收到的数据放入缓存,上层的应用程序会
在恰当的时候读取缓存中的数据。
5.面向字节流:TCP中的”流“指的是流入进程或从进程流出的字节序列,面向字节流: 虽然应用程序和
TCP的交互试一次一个数据块,但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。接
收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。

TCP的连接:
每一条TCP连接都有两个端点,叫做套接字 = IP地址+端口号,由此可知TCP的连接是抽象的,即TCP连
接就是由协议软件所提供的一种抽象。
每一条TCP连接唯一地被通信两端的两个端点所确定。
同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。
/*端口号就是连接应用程序进程与运输层之间的接口,只有知道目标程序的端口号,才能进行
不同主机之间的进程间通信。*/

TCP的运输连接管理:(TCP连接就是为了不同主机之间的进程进行通信)
TCP是面向连接的协议,运输连接就是用来传送TCP报文的。它的建立和释放时每一次面向连接的通信中
必不可少的过程,因此,运输连接就有三个阶段:连接建立,数据传送和连接释放。
运输连接的管理就是使运输连接的建立和释放都能正常工作

三次握手建立连接:
主机A运行TCP客户端程序,B运行TCP服务器程序,最初的状态都是关闭,图中在主机下面的方框分别是
TCP进程所处的状态:A主动打开连接,B被动打开连接。
这里写图片描述
1.B的TCP服务器进程首先创建传输块TCB,进入收听状态,等待客户的连接请求。
2.A的TCP客户进程也是首先创建传输控制块TCB,然后开始向B发送请求报文段,这时首部的同步位
SYN=1,同时选择一个序列号seq=x,TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但
要消耗一个序号,这是TCP客户进程进入SYN-SENT(同步已发送)状态。
3.B收到连接请求报文段后,若同意建立连接,则向A发送确认,在确认报文段中把ACK位和SYN位都置1.
确认号是ack = x+1,同时也为自己选择一个初始序号seq=y,同样,该报文段无数据,且必须消耗掉一
个序号,TCP服务器进入SYN-RCVD(同步收到)状态。
4.TCP客户进程收到B的确认后,还要向B给出确认,此时确认报文段的ACK位为1,确认号ack = y+1,而
自己的序号seq = x+1;收到确认后:TCP连接建立,A进入ESTABLISHED(已建立连接)状态。TCP标
准规定:ACK报文段可以携带数据,但如果不携带数据则不消耗序号,则下一个数据报文段的序号仍为seq = x+1;
5.当B收到A的确认后,也进入连接状态。

四次挥手释放连接:
此时A,B都处于连接状态:
这里写图片描述
1.A的应用程序先向自己的TCP发送释放连接报文段,并停止发送数据,主动关闭TCP链接,A把该报文段
首部的FIN位置为1,其序号seq=u,它等于前面已传送过的数据最后一个字节的序号加1,这时A进入
FIN-WAIT-1(终止等待1)的状态,等待B的确认。
2.B收到连接释放报文段就发出确认,确认号是ack =u+1,而这个报文段自己的序号是v,仍然是前面B已
经传送过的数据的最后一个字节的序号加1.然后B进入CLOSE-WAIT(关闭等待)状态,TCP服务器进程这
时应通知高层应用进程,因而从A到B这个方向的连接就释放了,但从B到A方向的连接没有被释放。此时
TCP连接处于半关闭状态,即A已经没有数据要发送,但B若发送数据,A仍要接收,这个状态可能要持续
一段时间。
3.A收到来自B的确认后,就进入终止等待2状态,等待B发出的连接释放报文段。当B不在向A发送数据
时,其应用进程就通知TCP释放连接,此时B发送的连接释放报文段必须使FIN位为1,现假定B的序号为
w(半关闭状态B也可能发送数据),B必须重复上次已发送过的确认号ack=u+1,这时B就进入
LASK-ACK(最后确认)状态,等待A的确认。
4.最后一步,A收到B的连接释放报文段后,必须对此发出确认,ACK置1,确认号ack=w+1,而自己的序
号是seq=u+1,TCP标准规定,前面发送过的FIN报文段要消耗一个序号,然后进入时间等待状态(这个
时候TCP链接还没有释放掉,必须经过时间等待计时器设置的时间2MSL后,A才进入关闭状态,时间MSL
叫做最长报文段寿命),过了这个时间,再进入关闭状态,才能建立下一个新的连接。当A撤销相应的传
输控制块TCB后,就结束了这次的TCP连接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值