网络原理—传输层TCP协议(重点)

  • 传输层是端对端的传输——进程对进程

    IP:标识网络上的唯一主机。
    port:标识主机上的唯一进程。
    ip + port :标识网络上唯一主机上的唯一进程。
    四元组:端(IP + port) 对 端(IP + port)四个信息标识了唯一的端对端通信。
    五元组信息:四元组 + 协议(TCP或UDP),是TCP/IP协议栈内部用来标识传输层上唯一一个端对端 通信。

一、TCP协议

核心性质>>>>>>端对端的可靠性
网络天生传输是不可靠的,因为:

  1. 传输过程中通过物理介质传输,传输过程有一定概率会改变其二进制值。
  2. 网络上数据是经过一个一个路由器传输的,每台设备都有一定概率损坏。
  3. 即使数据传输成功,也不一定有序。

TCP尽可能的把数据传输到给对方优点如下:

  1. 解决了有序性问题——它给每一份发送的数据做了编号。
  2. 确认应答机制——接收方(TCP)有责任告知发送方(TCP),数据是否收到。
  3. 超时重传机制——若数据丢失(长时间没有收到应答),将会重新发送该数据。

二、 TCP协议Header格式

在这里插入图片描述

  • 源端口号:说明是哪个进程发送的。
  • 目的端口号:说明要发到应用层的哪个进程(分用)。
  • 首部长度:记录TCPHeader长度(解包)。
  • 32位序列号(SN):数据第一个字节的编号,确保发送的数据对方按序收到。
  • 32位确认序列号(ASN):确认对象收到了哪些数据(确认应答),希望发送方从哪开始发送。
  • 6个标志位(0或1):ACK(确认应答)SYN(请求建立连接)FIN(通知对方, 本端要关闭了)RST(发送方发送RST表示我方TCP协议栈遇到了异常 ; 接收方收到RST直接断开连接),PSH(提示接收端应用程序立刻从TCP缓冲区把数据读走),URG(紧急指针是否有效)
  • 16位校验和:确保数据完整。
  • 窗口大小:接收数据能力(滑动窗口机制)
  • 紧急指针:标识哪部分数据是紧急数据。

三、TCP协议实现可靠性⭐⭐⭐

1、三个优点:——对应单个segment如何工作

  1. 解决有序性问题——关于TCP Header中SN和ASN如何进行填写
    TCP协议栈内部维护了一个包用来管理序列号。SN表示发送的数据中第一个字节的编号,ASN表示接收方希望发送方下次发送的数据编号。

    在一次通信中,TCP对发送方的segment中的SN进行填写。接收方收到后,用接收的数据长度(在IP协议中得知)加上SN得到ASN的长度,填写到segment中,并发送给发送方。这样一来发送方就得知下次要从序列号的哪一位开始发送。保证了数据的有序性。
    在这里插入图片描述

  2. 确认应答机制——接收方的职责

    接收方收到TCP段后有责任发送应答数据发送给对方,其中应答数据中要填写以下字段:
    ASN = 收到数据中的SN + 收到数据中的长度

    ACK标志位,置为1,

  3. 超时重传机制——发送方的职责

    ①如果在一定时间内,发送发没有收到应答segment,则需要重新发送segment。所以发送后的数据不能丢掉,一直保留到收到这份数据的应答为止。所以TCP具有发送缓存区。 在代码层面,发送成功只是成功加载到了发送缓存区,至于何时发送就不知道了。

    ②无论是对方没有收到,还是收到了但发送方未收到应答,统一都需要超时重传。对于第二种情况因为segment中有SN序列号的存在,所以也不会产生重复接收的现象

    ③如果因为某种原因一直接收不到应答,以异常的形式通知TCP协议的应用层。

2、连接管理——对应整体的工作

  1. 连接的概念
    TCP协议栈服务的对象是多个发送者对多个接收者。每个发送者都对应一个接受者,他们之间的交互是通过连接实现的。如下图颜色相同的线就连成了一条连接。
    在这里插入图片描述
    以通信双方位例,连接的管理过程如下图所示,每个TCP协议栈都管理自己的连接(不止一个),应用层通过socket控制TCP内部。
    在这里插入图片描述

    他是一个抽象的概念,在计算机层面通过类和对象模拟连接。实际上TCP协议栈是通过Map<五元组,Connection>或Map<Socket,Connection>来管理 ,不同的连接对象一定拥有不同的五元组,所以五元组是连接的唯一标识

    每个连接都有其生命阶段如下图所示:
    在这里插入图片描述

  2. 连接状态转换

    TCP连接的状态转移图如下:
    在这里插入图片描述

  3. 建立连接——三次握手

    在建立连接阶段,双方需要交流一些基本信息同步信息:SYN,SN,窗口大小。确认信息:确认序列号(ASN), ACK标志位。
    假设有主动方与被动方,其同步过程如下图所示:
    在这里插入图片描述

    在该阶段双方需要同步:初始序列号(ISN)、数据的接受能力(window)、最长segment的长度(MSS)。通过三次握手确保将数据同步给对方。三次握手过程在应用层不可见。

  4. 断开连接——四次挥手
    连接的关闭是应用层进程决定的,TCP协议并不能决定一个连接的关闭。

    那么为什么需要四次挥手才能断开连接呢?因为在建立连接的过程中,SYN和ACK标志位可以 保证(百分之百 的) 合并发送,但在断开连接时,FIN与ACK不能百分百保证合并发送,有可能被断开方数据没发送完所以不能发FIN,只能发ack,所以在标准的情况下,双方需要四次通信完成关闭连接的操作。

    当断开连接时,分为主动断开方和被动分开方。因为应用层程序分开情况的不确定性,断开连接主要分三种情况,不论哪种情况,只要是主动关闭方,其状态都是TIME_WAIT状态
    在这里插入图片描述
    结合状态转移,主要有两个状态处理连接关闭的情况 (重要重要):

    CLOSE_WAIT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值