TCP协议
本帖最后由 古月不傲 于 2020-10-6 23:56 编辑TCP协议的作用主要是在计算机间可靠地传输数据包。
TCP协议是面向连接的协议,两端建立一条虚电路,他比较安全、稳定,但是效率不高,占用资源较多。
由于它的可靠性,已经成为当今互联网协议事实上的标准。
TCP协议数据段格式
含义如下:
源端口: 呼叫方端口号
目的端口: 接受方端口号
序号: 用于确保数据到达的正确顺序
确认号: 期待的下一个TCP字段的编号
报头长度: 报头的字数(字长为32位)
保留域: 设置为0
标志位: 控制功能(比如会话的建立和终止,对应下面6个)
窗口: 发送者愿意接收的字节数
校验和: 报头和数据字段的校验和
紧急指针: 指明这是紧急数据的末尾
可选: 当前定义项,可选
数据: 上层协议数据
TCP协议报头中包含6个重要标志位→
SYN: 用来建立连接,让连接双方同步序列号。如果SYN=1,而ACK=0,则表示
该数据包为连接请求;如果SYN=1,而ACK=1,则表示接受连接。
FIN: 表示发送端已经没有数据要求传输了,希望释放连接。
RST: 用来复位一个连接。RST标志位的数据包称为复位包,一般情况下,如果TCP
协议收到的分段明显不属于该计算机上的任何一个连接,则向远端发送一个复位包。
URG: 为紧急数据标志。如果它为1,表示本数据包中包含紧急数据。此时紧急数据指针
有效,可以优先发送。
ACK: 为确认标志位。如果为1,表示包中的确认号是有效的,证明数据包有效收到,
可以接受下一个数据包的发送请求。否则,包中的确认号无效。
PSH: 置位标志,接收端应尽快把数据传送给应用层。
TCP协议的可靠性通过“校验和”、“定时器”、“数据序号”、“应答”提供的。
通过给每个发送的字节分配一个序号,接收端接受到数据后发送应答来确保数据的可靠传输。
数据序号用来保证数据的顺序,剔除重复的数据。
在一个TCP协议会话中,有两个数据流(每个连接端从另外一端接受数据,同时向对方发送数据),
因此,在建立连接时,必须要为每一个数据流分配ISN(初始序号)。ISN是建立一个TCP连接时的开始号,
用于提供通信顺序并确保多个包传输时无数据丢失。在连接过程中交换初始号可以确保在以后
出现问题时恢复丢失的数据。
同步是通过各个携带有初始序号和1位被称为SYN控制位的段之间的交换过程来实现的。
同步需要通信双方都发送自己的初始序号,并接受本次连接中另一方发送的一个确认和初始序号。
每一方都必须接受另一方的初始序号,并发送一个确认应答。
这就是著名的TCP连接的3此握手。3次握手的目的是同步连接双方的序列号和确认号并
交换TCP窗口大小信息。
3次握手过程:
1:主机A向主机B发送一个序列号为X的TCP分段,其中包含连接的初始序列号和
一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区大小)。
2:主机B收到分段后,如果确认可以进行传输连接,则发送一个序列号为Y的分段,
其中包含它选择的初始序列号和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区大小)与主机A发送的分段X的确认信息。
3:主机A在收到主机B发送的分段和确认信息后再次选择是否可以立即进行数据传输连接,
确认后发送一个序号为X+1的分段和B主机Y分段的确认信息。
这样传输连接就建立成功,可以正式进行数据传输了。
在TCP传送一个数据包时,它同时把这个数据包放入重发队列中,并启动计数器,
如果收到了关于这个包的ACK,则将此包从队列中删除;如果计时超时则需要重新发送此包。
数据传输完成后,还要进行TCP连接的拆除和关闭,使用4次挥手同上。
相关帖子:https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc
TCP 是一个没有确认或否认的滑动窗口协议。 建议查询一下虚电路的概念,TCP提供有连接的服务,这个有连接的服务和虚电路是否是一回事? 有助于小白学习,可以的 这个可以经常惠顾了解一下的 x.25协议使用的是虚电路方式。 谢谢大家的提醒 学习了,学习使我快乐{:17_1082:} wow!,收藏吃灰{:1_887:}{:1_905:}
页:
[1]