Contents
  1. 1. 一、 网络基础TCP/IP
    1. 1.0.1. 1. TCP/IP协议族
    2. 1.0.2. 2. TCP/IP的分层管理
      1. 1.0.2.0.1. 分层的优点:
  2. 1.0.3. 3. TCP/IP传输流
  • 2. 二、TCP/IP连接的建立与终止
    1. 2.0.0.0.1. 详解:
  • 一、 网络基础TCP/IP

    通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的。(HTTP协议也属于它内部的一个子集)

    1. TCP/IP协议族

    计算机网络设备需要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标,由哪一边先发起通信、使用哪种语言进行通信,怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们把这种规则称为协议

    TCP/IP 是互联网相关的各类协议族的总称

    2. TCP/IP的分层管理

    TCP/IP 协议族层次分别分为以下4层:应用层、传输层、网络层和数据链路层

    分层的优点:
    • 如果互联网值由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需用把变动的层替换掉即可。
    • 层次化之后,设计也变得相对简单了,处于应用层上的应用可以只考虑分配给自己的任务,而不需要弄清对方在地球上哪个地方,对方的传输线路是怎样的、能否确保传输送达等其他问题。

      3. TCP/IP传输流

      利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接收端则从应用层往上走。
      TCP/IP传输流

    • 首先作为发送端的客户端在应用层(HTPP协议)发出一个想看某个Web页面的HTTP请求

    • 为了传输方便,在传输层(TCP协议)把应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号转发给网络层。
    • 在网络层(IP协议),增加作为通信目的的MAC地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。
    • 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层,才能算真正接收到客户端发送来的HTTP请求。
    • 发送端在层与层之间传输数据时,每经过一层必定会被打上一个该层所属的首部信息,反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。

    这种把数据信息包装起来的做法称为封装
    以下是封装的流程图:
    在这里插入图片描述

    二、TCP/IP连接的建立与终止

    下面这张图详细的介绍了TCP/IP的建立与终止

    在这里插入图片描述

    详解:

    初始化状态

    • 服务器端和客户端初始的状态都是closed,服务器端经过socket、bind、listen进入LISTEN监听状态
    • 同理,客户端经过socket进入connect连接状态

    三次握手

    为了将数据准确无误的送达目标,TCP采用三次握手。

    1. 客户端首先发送一个SYN(synchronize)给服务器端,表明发送一个标有SYN的数据包
    2. 服务器端接收到SYN 并进入到 SYN_RCVD状态,同时向客户端发送标有SYN/ACK 的数据包
    3. 客户端接收到SYN/ACK 后进入ESTABLISHED状态,并向服务器端发送标有ACK 的数据包

    注意

    • 为什么需要三次握手?
      因为第一次只表示客户端到服务器端建立了连接,第二次表示服务器端到客户端建立了连接,每次的连接是独立的;当确认双方连接都建立成功了之后才进行数据的传输。

    数据的传输:

    • read
    • send
    • write
    • recv

    四次挥手:

    1. 客户端向服务器端发送一个 FIN 请求关闭的请求,并进入FIN_WAIT1
    2. 服务器端接收到之后,进入CLOSE_WAIT,并同时向客户端发送ACK
    3. 客户端接收到ACK 后进入FIN_WAIT2, 服务器再向客户端发送FIN 请求关闭,同时服务器进入CLOSE状态
    4. 客户端接收到FIN 后 进入TIME_WAIT, 并向服务器端发送ACK,服务器接收ACK后进行关闭

    注意:

    • 在第二步和第三步时,为什么ACK和FIN不同时发送,而是分步?
      当客户端向服务器端发送FIN时,如果服务器端不作出回应,客户端会一直向服务器端发送FIN,所以一定要先做出ACK回应,再做响应的处理
      然后再向服务器端再向客户端发送请求关闭的FIN,同理,客户端结接收到之后再向服务器端做出ACK响应,服务器端收到ACK响应后就进行关闭。

    • 在服务器端关闭后,为什么客户端要等待2MSL后再关闭?

      1. 服务器端向客户端发送FIN这步需要1MSL
      2. 客户端向服务器端发送ACK需要1MSL
    Contents
    1. 1. 一、 网络基础TCP/IP
      1. 1.0.1. 1. TCP/IP协议族
      2. 1.0.2. 2. TCP/IP的分层管理
        1. 1.0.2.0.1. 分层的优点:
    2. 1.0.3. 3. TCP/IP传输流
  • 2. 二、TCP/IP连接的建立与终止
    1. 2.0.0.0.1. 详解: