TCP协议之特点和首部格式

TCP协议一


TCP协议二: TCP协议之可靠传输
TCP协议三: TCP的三次握手和四次挥手
TCP协议四: TCP协议中的几个机制



一、TCP协议

TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。


二、TCP的主要特点

TCP 的主要特点,有连接,可靠传输,面向字节流,全双工


1.TCP是面向连接的运输层协议。

1.理解TCP的连接

简单而言,就是说应用程序在使用TCP协议之前,必须先建立TCP连接,在传送数据完毕后,必须释放已有的TCP连接,可以将TCP连接比喻成"打电话",通话前要先拨号建立连接,通话结束后要挂机释放连接

2.TCP的连接

1.每一条TCP连接只能有两个端点每一条TCP连接只能点对点
2.首先理解什么是端点,TCP连接的端点叫作套接字(socket)或者插口,根据RFC793的定义: 端口号拼接到IP地址即构成了套接字
3.套接字的表示方法是在点分十进制的IP地址后面写上端口号,中间用冒号或者逗号隔开
4.例:IP地址是192.3.4.5,而端口号是80 ->得到套接字(192.3.4.5:80)
5.公式为: 套接字socket = (IP地址:端口号)
每一条TCP连接唯一的被通信两端的两个端点(即套接字对 socket pair)所确定
6.公式为: TCP连接 = {socket1,socket2} = {(IP1:port1),(IP2:port2)}
并且一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中

3.总结

TCP是一种面向连接的运输层协议,它提供了可靠的数据传输服务。在使用TCP之前,必须先建立TCP连接,在传输完成后释放连接。每一条TCP连接只能有两个端点,即两个套接字(socket)。每个套接字由IP地址和端口号组成。每一条TCP连接都是唯一的,由通信两端的两个套接字所确定。一个IP地址可以对应多个不同的TCP连接,同一个端口号也可以出现在多个不同的TCP连接中。这种特性使得TCP能够在复杂的网络环境中实现可靠的数据传输。


2.TCP提供可靠交付的服务,即可靠传输

TCP提供可靠的交付的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达,具体的实现方式在下面的核心机制中将会详细分析。


3.TCP是面向字节流

1.首先,先来理解什么是"流(stream)",流即像水流一样,是连续不断的.

2.TCP是一种面向字节流的协议,这意味着TCP将数据视为一系列连续的字节流,就像水流一下持续不断的输送,而不是一系列离散的消息。这种方式使得TCP可以在不知道消息大小的情况下传输任意长度的数据并支持多个消息的同时传输,而无需为每个消息建立新的连接。

3.总之,TCP的面向字节流的特性使得它可以高效地传输任意长度的数据,并支持多个消息的同时传输,从而提高了数据传输的效率。


4.TCP提供全双工通信

1.首先我们先区别两个概念,“全双工”和"半双工“

2.全双工:一个通信通道,可以双向传输(既可以发送,也可以接收)

类似一条八车道的公路,既可以过去,也可以回来
在这里插入图片描述

3.半双工:一个通信通道,只能单向传输

类似一根水管,是单向传输的,一次只能传输一遍边
在这里插入图片描述

4.说完这两个概念,我们再来理解TCP中的全双工:

TCP提供全双工通信,支持双向传输,TCP允许通信双方在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。


三、TCP报文段的首部格式

TCP报文段的首部格式

在这里插入图片描述

(1) 源端口和目的端口

各占2个字节,分别写入源端口号和目的端口号

(2)序号

占4个字节,序号范围是[0,2^23-1]

(3)确认号

1.占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号

2.例.主机A向B发送一个报文段——数据(1001-2000),主机B向A返回一个2001,这个数据是B期望收到A的下一个数据序号是2001,于是B在发送给A的确认报文端把确认号置为2001。

在这里插入图片描述

3.公式:
若确认号=N,则表明:到序号N-1为止的所有数据都已经正确收到

(4)数据偏移

1.占4位,它是指TCP报文段的数据起始处距离TCP报文段的起始处有多远,即TCP报头段的首部长度,一个TCP报头,长度是可变的,数据偏移(一些文章叫首部长度)描述了TCP报头的具体长度,选项之前的部分是固定长度(20字节)。

2.这里的数据偏移是占4位的,所以 4 bit ->可以表示 0-15,特别注意数据偏移的单位不是字节,而是4字节。

3.所以当数据偏移是5,表示整个TCP报头是 5X4字节 = 20字节(即没有选项)
当数据偏移是15,表示整个TCP报头是 15X4字节 = 60字节(选项相当于是40字节),这也是TCP报头的最大长度(即选项长度不能超过40字节)

4.公式:
选项长度 = 数据偏移(首部长度) - 20字节

在这里插入图片描述

(5)保留

1.占6位,表示现在还没有用,但是可能以后会使用到,所以先占个位置

2.例如在C语言中,有一类单词叫做关键字,除了关键字之外,还有一类单词叫做保留字,此时这里的保留字就类似于保留。

3.假设TCP出现新的功能,就可以使用这些保留位字段,而不用去更改前面的部分,从而减少成本,对TCP本来的报头结构影响比较小,老的设备即使不升级也可以兼容。

(6)紧急URG

当URG=1,表明紧急指针字段有效,它告诉系统此报文段中有紧急数据,应该尽快传输,于是发送方就把紧急数据插入到本文段数据的最前面,而紧急数据后面的数据仍是普通数据,并且需要配合首部的紧急指针字段配合使用。

(7)确认ACK(ACKnowledgment)

当且仅当ACK = 1时,确认字号段才有效,表示为应答报文,当ACK = 0时无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。

(8)推送PSH(PuSH)

当两个进程进行交互式通信时,有时一端的程序希望输入一个命令能立即收到对方的响应,基于这个需求,从而产生了PSH,当PSH = 1时,就立即创建一个报文段发送过去,简而言之,就是提示接收端应用程序立刻从TCP缓冲区把数据读走

(9)复位RST(ReSeT)

当RST = 1时,表明TCP连接出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。RST也可称为重建位或重置位。

(10)同步SYN(SYNchronization)

在连接建立时用来同步序号,当SYN = 1而 ACK = 0 表明这是一个连接请求报文段,如果对方同意建立连接,则应在响应的报文段中使用SYN = 1和ACK = 1,简而言之,SYN即请求建立连接,我们把携带SYN标识的称为同步报文段

(11) 终止FIN(FINish)

用来释放一个连接。当FIN = 1时,表明此报文的发送发数据已发送完毕,并要求释放运输连接,即要关门了,我们把携带FIN标识的称为结束报文段

(12)窗口

占2个字节,窗口指的是发送本报文段的一方的接收窗口(不是自己的发送窗口).窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位),简单而言就是,接受方目前允许对方发送的数据量(以字节为单位),因为接收方的数据缓存空间是有限的。

(13)检验和

检验和字段检验的范围包括首部和数据这两部分,发送端填充,CRC校验,接收端校验不通过,则认为数据有问题,此处的校验和不光包含TCP首部,也包含TCP数据部分。

(14)紧急指针

占2个字节,紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。

(15)选项

长度可变,最长可达40字节,参考 (4)数据偏移

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值