网络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状态。

  

 

posted @ 2018-07-18 09:45  chyuanliu  阅读(178)  评论(0编辑  收藏  举报