zoukankan      html  css  js  c++  java
  • TCP基本概念

    TCP协议是一个复杂的、可靠的字节流协议.不通用UDP协议。

    TCP提供客户与服务器之间的连接。TCP客户先与给定的服务器建立一个连接,再跨该连接与服务器交换数据,最后终止这个连接。

    TCP提供了可靠性。

    TCP动态估算客户与服务器之间的往返时间(RTT)。

    TCP通过对序列号对发送的数据进行排序。

    TCP提供超时重传机制。

    TCP提供流量控制,维护一个滑动窗口。

    TCP连接是全双工的。

    1 TCP连接的建立——三路握手

    1. 服务器准备好接收外来的连接,通过调用socket、bind、listen这3个函数来完成,称之为被动打开。
    2. 客户通过调用connect发起主动打开,这导致客户发送一个SYN分节。它含有客户将在待建立的连接当中发送数据的初始序列号。
    3. 服务器必须确认(ACK)客户的SYN,同时自己也发送一个SYN分节,它含有服务器发送数据的初始序列号。
    4. 客户必须确认服务器的SYN

    这种交换至少要3个分组,因此成为TCP的三路握手。

    2 TCP选项

    每个SYN可以含有多个TCP选项,常用的有:

    • MSS:最大分节大小
    • 窗口大小
    • 时间戳

    3 TCP连接终止

    终止一个TCP连接需要4个分组。

    1. 某个进程首先调用close,我们称该端执行主动关闭。该端的TCP于是发送一个FIN分组,表示数据发送完毕。
    2. 收到这个FIN的对端执行被动关闭,同时确认这个FIN。此时放一个文件结束符传递给应用进程的排队等待处理的数据之后,表示以后再也没有新的数据需要接收。
    3. 一段时间后,被动关闭的一端调用close函数,相应的发送给对端一个FIN分组。
    4. 对端确认这个FIN

    4 TCP 状态转移图

    5 TIME_WAIT状态

    执行主动关闭的那端经历了TIME_WAIT状态,该状态的持续时间是最长分节生命周期的2倍,成为2MSL

    TIM_WAIT状态存在的两点理由:

    1. 可靠的实现TCP全双工连接的终止。假设最后一个ACK消息丢失了,对端会重传一个FIN消息,因此不得不回应这个FIN。
    2. 允许老的重复分节在网络中消逝。TCP不给处于TIME_WAIT状态的连接发起新的化身,防止来自某个连接的老的重复分组在以及种植连接后再现,被认为是同一个连接的一个新的化身。
  • 相关阅读:
    进程(第三部分)
    02_jni_hello_c函数介绍
    01_ndk目录介绍
    00_前情回顾
    06_锅炉压力案例_progressbar实现
    05_锅炉压力案例_java实现
    ASP.NET MVC的过滤器笔记
    ASP.NET MVC的过滤器笔记
    ASP.NET MVC的过滤器笔记
    ASP.NET MVC的过滤器笔记
  • 原文地址:https://www.cnblogs.com/alwayswangzi/p/6557974.html
Copyright © 2011-2022 走看看