zoukankan      html  css  js  c++  java
  • 网络9. TCP/IP网络之传输层

      传输层功能

    分段上层数据
    建立端到端连接
    透明、可靠传输
    流量控制
    

      传输层协议

    主要有TCP/IP协议族的TCP协议和UDP协议。
    

      

      接收方负载高时,会自动控制单位时间数据量。

      

       TCP三次握手机制

    有两个中间状态,syn_sent和syn_rcvd,这两个状态叫着「半打开」状态,就是向对方招手了,但是还没来得及看到对方的点头微笑。syn_sent是主动打开方的「半打开」状态,syn_rcvd是被动打开方的「半打开」状态。客户端是主动打开方,服务器是被动打开方。
    
    syn_sent: syn package has been sent
    syn_rcvd: syn package has been received
    

      TCP数据传输,tcp链接是双工的,双方都可以主动发起数据传输。无论哪方写数据,都需要对方的确认才能认为对方收到了自己的数据。

        TCP四次挥手

    客户端挥手(fin)——服务端伤感地微笑(ack)——服务端挥手(fin)——客户端伤感地微笑(ack)

      之所以中间的两个动作没有合并,是因为tcp存在「半关闭」状态,也就是单向关闭。客户端已经挥了手,可是还没有走,只是不再说话,但是耳朵还是可以继续听,服务端呢继续喊话。等待服务端累了,也不再说话了,服务端向客户端挥了挥手,客户端伤感地微笑了一下,才彻底结束了。非常特殊的状态time_wait,它是主动关闭的一方在回复完对方的挥手后进入的一个长期状态,这个状态标准的持续时间是4分钟,4分钟后才会进入到closed状态,释放套接字资源。不过在具体实现上这个时间是可以调整的。它就好比主动分手方要承担的责任,是你提出的要分手,你得付出代价。这个后果就是持续4分钟的time_wait状态,不能释放套接字资源(端口),就好比守寡期,这段时间内套接字资源(端口)不得回收利用。
      它的作用是重传最后一个ack报文,确保对方可以收到。因为如果对方没有收到ack的话,会重传fin报文,处于time_wait状态的套接字会立即向对方重发ack报文。
      同时在这段时间内,该链接在对话期间于网际路由上产生的残留报文(因为路径过于崎岖,数据报文走的时间太长,重传的报文都收到了,原始报文还在路上)传过来时,都会被立即丢弃掉。
    4分钟的时间足以使得这些残留报文彻底消逝。不然当新的端口被重复利用时,这些残留报文可能会干扰新的链接。
      4分钟就是2个MSL,每个MSL是2分钟。MSL就是maximium segment lifetime——最长报文寿命。这个时间是由官方RFC协议规定的。至于为什么是2个MSL而不是1个MSL,我还没有看到一个非常满意的解释。
      四次挥手也并不总是四次挥手,中间的两个动作有时候是可以合并一起进行的,这个时候就成了三次挥手,主动关闭方就会从fin_wait_1状态直接进入到time_wait状态,跳过了fin_wait_2状态。

      

  • 相关阅读:
    浅谈LBS(基于位置的服务)
    MapBar地图更新啦
    推荐一款软件:Global Mapper
    51ditu、清华地图以及Google地图
    极索(Gsuo)推出新版地图采用Gmap设计思路
    公告:Rover's Official Blog停止更新
    最后的礼物:校园多媒体系统和校园WEBGIS系统
    JAVA中最常用的十个快捷键
    启程去旅行 android之merge布局 http://www.cnblogs.com/travelfromandroid/articles/2133206.html
    Http 范例
  • 原文地址:https://www.cnblogs.com/chyuanliu/p/9327459.html
Copyright © 2011-2022 走看看