继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

TCP的三次握手与四次挥手

Zlear
关注TA
已关注
手记 2
粉丝 4
获赞 44

TCP(Transmission Control Protocol)协议是一种面向连接的、相对可靠的传输控制协议(虽说是面向连接,其实也就是通信双方保持一个‘连接’状态)

三次握手和四次挥手是TCP协议中比较重要的部分,它们都是为数据传输而服务的,一个是在数据传输开始之前建立连接,一个是在数据传输结束之后关闭连接,接下来就简单说一下这个过程:
TCP传输

关于各种状态以及发送的报文信息,上图已经表现的很清楚,就不详述了

三次握手

必须是client先发起请求

  1. Client向Server发起建立请求信息,“我想给你发数据,可以吗?”
    (此步是为了让Server端知道Client能够发送数据)
  2. Server端确认Client发来的请求信息,同时向Client返回确认信息,“可以,你什么时候发?”
    (此步是为了让Client知道Server既能接收到数据也能发送数据)
  3. Client收到Server的确认信息,并向Server发送确认信息,“我现在就发,你接着吧!”
    (此步是为了让Server知道Client能够接收数据)

经过上面的三次握手,会让Client和Server确认彼此双方既能接收数据又能发送数据,然后便可以进入数据传输进程了,一般来说,握手次数达到3就可以保证通信信息被正确传达。
网上发现一个形象化的图例

四次挥手

谁先发起请求都可以

因为Client和Server都能发起请求,所以我们此处用A和B替代通讯双方

  1. A发起请求结束信号(A表示自己不会再传输数据了,请求断开)
  2. B向A发送确认收到A发起的结束请求的确认信号(B知道了A的请求,但是还有数据要处理,暂时还不能断开)
  3. B向A发送请求结束信号(数据发送完成,B同意断开)
  4. A向B发送确认结束信号(A同意断开,很愉快的中断这次TCP连接)

由于TCP是全双工的协议,也就是说两端可以同时进行数据传输,所以,TCP连接的关闭在两端都关闭之后才正式关闭。

网上发现一个形象化的图例


相关疑问点:

  • 建立连接的第二次握手为什么要传回SYN?
    接收端传回发送端所发送的SYN是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。
  • 传了SYN,为啥还要传ACK?
    双方通信无误必须是两者互相发送信息都无误。传了SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要ACK信号来进行验证。
  • 为什么要三次握手?
    为了防止已失效的连接请求报文段突然又传送到了服务端,导致服务器端的一直等待而浪费资源。
    引用书中一个例子:

“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”


纯属个人观点,有什么不对的还请多多指教

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP