TCP/IP协议是一个分层联网协议。它包含IP和位于其上的其他协议层。

TCP/IP协议具有一个重要原则——封装。其关键概念为:低层不会对高层传来的信息进行解释。

当信息从高层传向低层,会加一层本层的头信息。而信息从低层传向高层时,会有一个解包的过程。

一个应用A向应用B传输信息的大致过程

             封装为 包      封装为 帧               检查 IP 头部 若匹配,剥离 IP 头部,将段交给传输层。
             添加 IP 头部   添加 帧头和帧尾          若不匹配且本机为路由器,则重新路由转发
             |             |                     |
应用A->传输层->网络层->数据链路层->网络介质->数据链路层->网络层->传输层->应用B(接收数据)
       |                       |       |                |
       添加 传输层头部           比特流   剥离帧头和帧尾      检查端口号,确定目标应用    
       封装为 段 或 数据报。              校验帧完整性       剥离传输层头部,将原始数据交给应用层。
高层                        低层      低层                        高层

IP是一种无连接不可靠的协议。它不保证包到达的顺序和发送的顺序一致。也不保证不会重复发送和到达接收者。网络的可靠性由如TCP一样的可靠传输层协议维护。

TCP是一种面向连接的、可靠的传输协议。 它需要先建立连接,后传输数据。

TCP通过三次握手建立连接,通过四次挥手终止连接

三次握手

  1. 客户端向服务器发送一个带有标志位

    SYN

    的数据包,表明自己希望与服务器建立连接。 客户端的TCP状态变为

    SYN_SENT

  2. 服务器回复一个带有标志位

    SYN

    ACK

    的数据包,表示同意建立连接。 服务器的TCP状态变为

    SYN_RECEIVED

  3. 客户端接收到服务器的

    SYN-ACK

    包后,回应一个

    ACK

    包,表示连接建立。 服务器和客户端的TCP状态都变为

    ESTABLISHED

    ,连接建立。

三次握手
服务器: LISTEN -> SYN_RCVD -> ESTABLISHED
客户端:     CLOSED -> SYN_SENT -> ESTABLISHED

四次挥手

  1. 主动方向被动方发送一个带标志位

    FIN

    的数据包,表示自己想要终止连接。 主动方进入

    FIN_WAIT_1

    状态。

  2. 被动方收到

    FIN

    包,回应一个

    ACK

    包,表示确认收到关闭请求。 被动关闭方进入

    CLOSE_WAIT

    状态。 主动方接收ACK后进入

    FIN_WAIT_2

    状态

  3. 被动方在数据发送完毕后,向主动方发送一个带

    FIN

    标识位的数据包,表示被动方也要终止连接。 被动方进入

    LAST_ACK

    状态。

  4. 主动方收到

    FIN

    包后,向被动方发送一个

    ACK

    包,并进入

    TIME_WAIT

    状态。被动方接收

    ACK

    后终止连接,主动方一段时间后终止连接。

                        发送FIN          接收ACK        接收FIN并发送ACK
四次挥手                    |             |             |
主动方:     ESTABLISHED -> FIN_WAIT_1 -> FIN_WAIT_2 -> TIME_WAIT -> CLOSED
被动方:     ESTABLISHED -> CLOSE_WAIT -> LAST_ACK   -> CLOSED
                         |              |           |
                        接收FIN,回应ACK  数据发送完毕   接收ACK

评论