文章目录
前言
在计算机网络中,传输层协议扮演着至关重要的角色,它们负责在网络中的主机之间可靠地传输数据。其中,TCP(传输控制协议)和UDP(用户数据报协议)是最常见的两种传输层协议。TCP以其可靠性、有序性和流量控制等特性,成为了许多关键应用的首选协议,如文件传输、电子邮件、Web 服务等。然而,TCP的复杂性和性能开销也使得它在某些场景下不如UDP灵活和高效。本文将深入探讨TCP协议的各个方面,从其基本机制到高级特性,再到与UDP的对比,帮助读者全面理解TCP的工作原理和应用场景。
1. TCP 协议概述
TCP 全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的控制;
2. TCP报头结构
一眼看去, TCP协议确实比UDP要复杂的多, TCP协议的报头并不是定长的, 你可能会发现它除了选项和数据的长度是定长的20字节。但是它的选项的长度是不定的. 在前20字节中有一个叫4位首部长度的字段。它代表了报头一共有多大, 范围是: 20~60字节
TCP报头的其他字段数据, 比如: 序号, 确认序号, 窗口大小, 6位标志位等. 就是TCP用来保证它的效率和可靠性时需要使用到的字段
3. 如何理解封装和解包呢?
- OS内可不可以同时存在很多个收到的报文,这个报文还没来得及处理,甚至拷贝到传输层的接收缓冲区,甚至没有交给传输层而在网络层和链路层。
- OS内一定会收到大量还没来得及处理的报文,OS要不要对大量的暂未处理,但以及接收到的报文进行管理呢?要!(先描述,再组织)
添加报头只需要将head指针向左移动(封装的过程就是指针移动+填写报头)
解包就是将head指针强转,再提取他的字段,之后将head指针向又移动。
- 封装和解包,在内核中,只需要进行指针移动即可!
4. TCP的可靠性机制
4.1 TCP的确认应答机制
TCP 保证可靠性!
确认应答保证历史消息被收到了,可靠性是对历史消息的可靠性的一种保证!
确认应答机制:
- 比如主机A给主机B发送了1000字节的数据, 那么这个TCP包中的序号就为1000. 当B主机收到TCP包后, 会给A主机发送确认应答, 并且会将确认序号设置为1001, 代表1001以前的数据我都收到了. 可以从1001个字节开始给我发数据了。
- 同理,要是B主机没有给A发送1001确认序号,而是直接发送了2001. 证明2001以前的数据都收到了, 包括1~1000的
-
tcp 发送消息的模式 ——version0
发送数据和发送应答,一般是是 双方OS自动完成的!(通信细节OS自动解决了!) -
tcp 发送消息的模式 ——version1
根据发送报文的顺序进行排序,根据序号,进行tcp的按序到达!
-
32位的确认序号:收到的序号 + 1 (该确认序号之前的数据,我已经全部收到了,下次发送,请从确认序号开始!)
既想做确认应答,又想发数据!这种方式叫做捎带应答!(既是应答,又携带了数据!)
- 序号存在的意义:按序到达,应答和确认应答
- 确认序号&&序号:同时向双方发送数据的同时,也同时在做应答
- 为什么tcp报头中要有标志位?标志位存在的意义?
答:需要区分不同的报文请求!即区分不同的报文类型!
我们的server一定在通信的过程中,会同时收到各种各样的报文!(即TCP报文是需要类型的!)