TCP/IP各层以及三次握手,四次挥手学习笔记

Posted by 陈宇瀚 on November 20, 2018

TCP/IP 协议和 OSI 7层 参考模型

TCP/IP可以说是OSI 7层 参考模型的简化版,TCP/IP中将OSI7层模型中的应用层表示层会话层合为一个应用层 image

TCP/IP协议分为四层有以下两种情况:

  • 应用层 传输控制层 网络层 链路层
  • 传输控制层 网络层 链路层 物理层 或者五层
  • 应用层 传输控制层 网络层 链路层 物理层 image 每层的作用简单概括下就是
    1. 应用层:直接为用户的应用进程提供服务。在因特网中的应用层协议很多,如支持万维网应用的HTTP协议,支持电子邮件的SMTP协议,支持文件传送的FTP协议等等。
    2. 传输控制层:负责网络连接中的两各主机之间的数据传输。主要使用两种协议:TCP(传输控制协议)和UDP(用户数据包协议)
    3. 网络层:处理在网络上流动的数据包。规定了通过怎样的路径(所谓的传输路线)到达另一主机,并把数据包传送给另一主机。再主机之间通过多台主机或者网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
    4. 链路层:处理连接网络的硬件部分。包括控制操作系统,硬件的设备驱动,NIC(网络适配器,即网卡),以及光钎等物理可见部分(还包括连接器等一切传输媒介)。 硬件上的范畴均在链路层的作用范围之内。 5.物理层:为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。

      TCP

      TCP是面向连接的,可靠的传输协议,会采用采用三次握手确认建立一个连接

      三次握手

      image

    5. 第一次握手:建立连接时,客户端client服务器server发送一段TCP报文,其中:
  • 标记位为SYN,表示“请求建立新连接”;
  • 序号为seq= i(i一般为1);
  • 随后客户端进入SYN-SENT阶段。
    1. 第二次握手:服务器server接收到来自客户端client的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文,其中:
  • 标志位为SYNACK,表示“确认客户端的报文seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”(即告诉客户端,服务器收到了你的数据);
  • 序号为seq=y;
  • 确认号为ack=i+1,表示收到客户端的序号seq并将其值加1作为自己确认号ack的值;随后服务器端进入SYN-RCVD阶段。
    1. 第三次握手:客户端client接收到来自服务器server的确认收到数据的TCP报文之后,明确了从客户端client服务器server的数据传输是正常的,结束SYN-SENT阶段。并返回最后一段TCP报文。其中:
  • 标志位为ACK,表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了);
  • 序号为seq=i+1,表示收到服务器端的确认号ack,并将其值作为自己的序号值;
  • 确认号为ack=y+1,表示收到服务器端序号seq,并将其值加1作为自己的确认号Ack的值;
  • 随后客户端进入ESTABLISHED阶段。

完成三次握手后就可以开始进行数据发送和交换了。

四次挥手

image

  1. 第一次挥手:客户端client想要释放连接,向服务器server发送一段TCP报文,其中: - 标记位为FIN,表示“请求释放连接“;
    • 序号为seq=m;
    • 随后客户端client进入FIN-WAIT-1阶段,即半关闭阶段。并且停止在客户端client服务器server方向上发送数据,但是客户端client仍然能接收从服务器server传输过来的数据。
  2. 第二次挥手:服务器server接收到从客户端client发出的TCP报文之后,确认了客户端client想要释放连接,随后服务器server结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文,其中:
    • 标记位为ACK,表示“接收到客户端client发送的释放连接的请求”;
    • 序号为seq=n;;
    • 确认号为ack=m+1,表示是在收到客户端client报文的基础上,将其序号seq值加1作为本段报文确认号ack的值;
    • 随后服务器server开始准备释放与客户端client方向上的连接,客户端client收到从服务器server发出的TCP报文之后,确认了服务器server收到了客户端client发出的释放连接请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段。
  3. 第三次挥手:服务器server再次向客户端client发出一段TCP报文,其中:
    • 标记位为FINACK,表示“已经准备好释放连接了”。注意:这里的ACK并不是确认收到服务器server报文的确认报文。
    • 序号为seq=w;
    • 确认号为ack=m+1;表示是在收到客户端client报文的基础上,将其序号seq值加1作为本段报文确认号ack的值。
    • 随后服务器server结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止在服务器server客户端client的方向上发送数据,但是服务器server仍然能够接收从客户端client传输过来的数据。
  4. 客户端client收到从服务器server发出的TCP报文,确认了服务器server已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器server发送一段报文,其中:
    • 标记位为ACK,表示“接收到服务器server准备好释放连接的信号”。
    • 序号为seq=m+1;表示是在收到了服务器server报文的基础上,将其确认号ack值作为本段报文序号的值。
    • 确认号为ack=w+1;表示是在收到了服务器server报文的基础上,将其序号seq值作为本段报文确认号的值。
    • 随后客户端开始在TIME-WAIT阶段等待2MSL

服务器server收到从客户端client发出的TCP报文之后结束LAST-ACK阶段,进入CLOSED阶段。由此正式确认关闭服务器server到客户端方向上的连接。

客户端client等待完2MSL之后,结束TIME-WAIT阶段,进入CLOSED阶段,由此完成“四次挥手”。

tcp标志位,有6种标示:

  • SYN(synchronous建立联机)
  • ACK(acknowledgement 确认)
  • PSH(push传送)
  • FIN(finish结束)
  • RST(reset重置)
  • URG(urgent紧急)
  • seq(序号,占4个字节,范围[0,4284967296])

socket:ip+port ip+port 每一个socket是独立且隔离的