JN-PDD

导航

传输控制协议TCP

一、TCP特点

  

二、TCP是面向连接的协议。运输连接是用来传送TCP报文的。

  TCP运输连接的建立和释放是每一次面向连接的通信中不可缺少的过程

  (1) 建立连接要解决什么问题?如何建立连接?

    TCP连接建立过程中要解决三个问题:

      ~ 要使每一方都能够确知对方的存在

      ~ 要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)

      ~ 能够对运输实体资源(如缓存大小、连接表中的项目等)进行分匹配

    用三次握手建立连接:

    B 的 TCP 服务器进程先创建传输控制块TCP(存储每一个连接中一些重要的信息,如TCP连接表、到发送和接受缓存的指针、

  到重传队列的指针、当全的发送和接受序号等,和进程控制块的PCB类似),准备接受客户A进程的链接请求。然后如无其进

    程就处于listen(收听)状态,等待客户的链接请求。如有,即做出响应

    A 的 TCP客户进程创建TCB,向 B 发送请求报文段,首部的同步位SYN=1,初始序号seq=x。TCP规定,SYN报

  文段(SYN=1)不能携带数据,但要消耗一个序号。           这时,TCP客户进程进入SYN-sent(同步已发送)状态

    B 收到链接请求报文段后,如同意建立链接,则向A发送rcvd。在rcvd报文中应把SYN位和ACK位都置1,确认号是ack=x+1,

  给自己选择一个初始序号seq=y,同上这个报文段不能携带数据,同样消耗一个序号。        这时,TCP客户端进入SYN-sent状态

    此时,如果B同意链接,一次握手完成,B可以知道自己能接受到 A 给自己发送的报文,但是不知道 A 能否接受自己发送报

    文

    A 收到 B 的确认后,还要向 B 给出确认。确认报文段的ACK置1,确认号ack=y+1,自己的序号seq=x+1, TCP规定,ACK报

  文段可以携带数据。但是如果不携带数据则不消耗序号。   这时,TCP链接已建立,A进入estABlished状态

    此时,二次握手完成,A 知道 B 可以接受自己发送的报文

    当 B 收到 A 的确认后,也进入 EstABlished状态。

    此时,三次握手建立链接完成,B 知道自己发送报文 A可以接受到。既然三次握手已经可以建立可靠的链接,那么,四次、

    五次··· 当然是可以的,但是为了实际效率和节省资源等问题还是选择三次握手

   (2) TCP的链接释放(四次挥手)?

   

  ***为什么 A 要进入TIME-WAIT状态?

  A 在最后一次收到 B 的确认(链接释放报文)后,必须对此发出确认,此时,TCP链接还没有释放掉,必须经过

  时间等待计时器(time-wait timer)设置的时间2MSL后,A 才进入CLOSE状态。“MSL”是最长报文寿命

  ***为什么 A 在 time-wait 状态必须等待2MSL的时间呢?

  第一:为了保证 A 发送最后一个 ACK 报文段能够到达 B 

  第二:防止已失效的链接请求报文段

 

我认为三次握手、四次挥手,我们思考时,思想一定要完整一点,任何一方发送报文,一定要确定自己 可以发,并且

确定对方可以收到自己发送的报文,这才算是最简单的一方完整。

 

  

 

posted on 2017-06-30 16:53  JN-PDD  阅读(272)  评论(0编辑  收藏  举报