详述TCP协议中的格式及其传输机制

详述TCP协议中的格式及其传输机制

一、TCP协议解析:

在这里插入图片描述

1. 整体协议格式

  • 16位源端端口,16位对端端口,32位序列号,32位确认序列号,4位头部长度,6位保留位,6位标志位,16位窗口大小,16位校验和,16位紧急指针,0~40字节的选项数据和数据。

2. 各个位置上的功能描述:

  • 16位源端口、16位对端端口:描述通信两端进程;
  • 32位序列号、32位确认序列号:完成包序管理,以及确认应答的功能;(序列号决定了当前数据在原始数据中的位置,确认序列号是告诉发送方确认序号之前的数据都已经收到了);
  • 4位头部长度:以4字节为单位,描述tcp报头长度,tcp报头最小20字节,最大60字节,其中选项数据字段是0~40字节;
  • 6位保留位:有些字段还没想好其功能,留待后用;
  • 6位标志位: URG,ACK,PSH,RST,SYN,FIN;
  • URG:紧急数据,一般情况下置为0;
    ACK:1包含应答信息,0不包含应答信息;
    PSH:1包内含数据,0此包为空包;
    RST:1表示进程结束或者无此进程,一般情况下置为0;
    SYN:1表示想要建立tcp连接,一般情况下置为0;
    FIN:1表示想要关闭tcp连接,一般情况下置为0。
  • 16位窗口大小:用于实现滑动窗口机制,进行流量控制;
  • 16位校验和:进行数据一致性校验;
  • 16位紧急指针:紧急数据在数据包中偏移,紧急数据一般放在包尾;
  • 0~40字节选项数据:通常是一些协商数据,比如三次握手阶段协商的MSS大小。

二、 基于TCP协议的定义来理解其中的机制

1. TCP协议的定义

  • TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。

2. TCP协议中的机制

  • 面向连接: tcp是基于连接的,通信前双方需要建立连接,tcp协议中有状态管理;
  • 可靠传输:
  • 保证数据安全到达:确认应答机制,超时重传机制,包序管理机制,校验和机制;
  • 避免丢包:滑动窗口机制,拥塞机制;
  • 提高性能:快速重传机制,延迟应答机制,捎带应答机制,延迟发送机制;
  • 基于字节流:提供有序的,安全的,双向的,基于连接的字节流传输服务,字节流传输服务是以字节作为最小传输单位的传输方式(没有最大固定长度的上限)。

3. 具体详述各种机制及其作用

  1. 面向连接:通信双方必须同时具备数据收发的能力;
  2. 确认应答机制: tcp中的丢包检测机制,接收方针对收到的每一条数据都要进行确认回复,具体是通过协议字段确认序号告诉发送方,哪些数据已经收到了;
  3. 超时重传机制:丢包重传机制,丢包后重新发送丢失的数据报(是发送方长时间没有得到数据确认回复,认为数据丢了,进行丢包重传);
  4. 包序管理机制:通过协议字段序列号+确认序列号实现,接收方根据序列号确定当前数据在原始数据中的位置;
  5. 校验和机制:通过协议字段校验,校验数据一致性。
  6. 滑动窗口机制:依赖协议字段中的窗口大小字段实现,是接收方通过窗口大小字段告诉发送方,最多再发送多少数据,超过窗口大小的数据就不要发送,从而实现流量控制。

具体来讲,有时候发送方发送数据过快过多,但是接收方数据一直在接收缓冲区中堆积,来不及取出,则缓冲区满溢后,则后续到达的数据就会被丢弃。所以为了避免这种情况的发生,接收方会根据自己的接收缓冲区中的剩余空间大小,计算窗口大小通过确认回复,响应给发送方。

在这里插入图片描述

滑动窗口机制的实现:窗口是通过起始序号和结束序号来维护的
发送窗口:

  • 窗口后沿:发送数据的起始序号,收到后沿发送的后沿数据的确认回复之后,后沿向前移动
  • 窗口前沿:当前所能发送数据的结束位置,随确认回复中的窗口大小而定(前沿-后沿不能大于窗口大小)

接收窗口:

  • 窗口后沿:当前接收数据的起始序号位置,当收到对应后沿序号的数据后,后沿向前移动
  • 窗口前沿:当前接收数据的结束序号位置,随着接收缓冲区中剩余空间大小而定(前沿-后沿不能大于剩余空间大小)

滑动窗口机制中的一些典型协议:

  • 停等协议:发送的每一条数据,都必须等到确认回复,才会发送下一条数据,应用于网络状况极差的场景;
  • 回退n步协议:发送过程中如果丢包了,则发送方从丢包位置开始往后都进行重传,应用于网络状况一般的场景;
  • 选择重传协议:发送过程中丢包了,则将丢的包进行重传即可,适用于网络状况比较好的场景。
  1. 拥塞机制:以一种网络状况探测的方式逐渐提高发送速度(一种慢启动,快增长的一种传输方式)

发送方在发送数据的时候,一开始并不会因为窗口比较大,就发送大量数据,而是先发送少量数据,然后逐渐增多,发送过程中不断查看网络状态,来判断是否应该继续增加数据的发送量,一旦数据丢包则又重新开始慢启动快增长。

在这里插入图片描述

举例:发送方会维护一个发送窗口:其实大小很小,甚至一个字节,表示当前所能发送的最大数据长度。发送方一开始发送1字节,得到回复后,下次发送2字节,得到回复,则下次发送4字节,指数级的增长速度,直到达到阈值(窗口大小),发送过程中一旦出现丢包,则重新开始慢启动快增长。

  1. 快速重传机制:
    在数据的连续传输情况下,一旦一个数据包丢了,接收方接收到了后边的数据包,则认为前边的这条没收到的数据有可能丢失了,则这时候每次间隔一定时间向发送方连续发送三次丢失数据的重传请求,发送方连续三次收到重传请求,则直接进行数据重传。

连续三次主要是为了防止接收方之前认为丢包的数据延迟到达了,这时候其实就不需要重传了,连续三次给一定缓冲时间,中间如果延迟的数据到达了,则重传请求不足三条则不需要进行重传。

  1. 延迟应答机制:收到数据后,不会立即进行确认回复,而是延迟一会进行回复

接收方接收到数据后,如果数据一直在缓冲区中没有被取出,则剩余空间会变小,则确认回复中的窗口大小就变小了,降低了网络吞吐量。延迟应答,是为了尽可能在这段延迟时间内数据被取出,则可以维持窗口大小不变甚至变大,保证网络吞吐量。

  1. 捎带应答机制:把确认回复信息放到即将要发送给对方的数据中顺带确认(节省了一个确认回复报头)

每一条确认回复,都是一条数据,在tcp报头中,是通过确认序号进行确认回复的,如果刚好这时候即将要发送数据给对方,
则顺便把确认回复集成到这个要发送的数据头部中。(在发送数据的同时进行确认回复)

  1. 面向字节流
    在这里插入图片描述

MSS:最大数据段大小,tcp通信双方在三次握手阶段就会协商mss,告诉对方自己的mss是多少,选择其中较小的一方作为最大数据段大小。然后在tcp传输数据的时候,每次就是从发送缓冲区中取出不大于mss大小的数据封装报头进行发送。

4. 字节流传输相比数据包传输的优缺点:

  • 字节流传输相较于数据报传输好处:传输比较灵活,发送时没有最大固定长度限制,交付时没有整条或者长度限制
  • 字节流传输相较于数据报传输缺陷:字节流传输有可能会造成粘包问题(tcp粘包问题)
  • 粘包问题:多条数据整合在一起进行处理,或者将多条数据当做一条进行处理
  • 本质原因:tcp在进行数据传输的时候,对于应用数据边界并不敏感,多条数据都会放在缓冲区中
  • 解决方案:既然tcp在传输层对数据边界不敏感,不关心数据边界,则程序员需要在应用层进行数据边界管理,即就是需要程序员自己在上层分辨数据的起始位置在哪里,结束位置在哪里
  1. 数据定长(缺陷在于,如果数据比较短,则需要填充数据位)
  2. 特殊字符进行间隔(缺陷在于数据中如果也有特殊字符就需要进行转义处理)
  3. 在应用层协议报头中指定数据长度(比如udp协议,http协议)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值