TCP概述

本文详细介绍了TCP协议的特点,包括点对点连接、全双工传输、可靠按序的字节流、流量控制、面向连接传输和流水线协议。此外,还解析了TCP报文的格式,包括源/目的端口、序号、确认号、首部长度等字段,以及紧急指针、标志位等。TCP的序号和确认机制确保了数据的可靠传输,累计ACK策略处理失序数据。
摘要由CSDN通过智能技术生成

建议看本篇文章前先看流水线可靠数据传输协议,因为那篇知识点忘记写了,现在刚补上。看完之后再回过来看TCP

一、TCP特点

TCP特点:
(1)点对点:只有一个发送方、一个接收方,连接状态与端系统有关,不为路由器所知。
(2)全双工数据的数据传输:是同一连接上的双向数据流,可以传输最大报文段长度,有最大的传输单元。
(3)可靠按序的字节流:没有”信息边界“。
(4)流量控制机制:发送方要控制它的流量,不会淹没接收方
(5)面向连接传输:在数据交换前握手(交换控制信息)初始化发送方和接收方的状态。
(6)采用了流水线协议:为TCP拥塞和流量控制设置相应的窗口滑动协议。
TCP发送缓存和接收缓存:
在这里插入图片描述
客户进程通过套接字传递数据流,数据一旦通过套接字,它就由客户运行中的TCO控制了。TCP将这些数据引导到该连接的发送缓存里,数据缓冲区以报文段的方式发到对端主机,对端主机接收到数据报文段之后通过TCP接收数据缓存取出数据,再经过上层套接字通过进程读取数据到应用层。在这个过程中我们可以看到TCP是一个面向流的可靠有序的字节流协议,即没有报文边界。

二、TCP报文格式

在这里插入图片描述
如图所示,TCP报文段由首部字段和一个数据字段组成,数据字段包含一块应用数据。
首部格式如下:
在这里插入图片描述
TCP的首部一般是20个字节,由以下组成:
(1)源端口和目的端口字段:各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
(2)序号字段:占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
(3)确认号字段:占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
(4)数据偏移:也就是首部长度,占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。”数据偏移“的单位是32位字(以4字节为计算单位)。
(5)保留字段:占6位,保留为今后使用,但目前应置为0。
1)紧急URG:当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高级优先级的数据)。
2)确认ACK:只有当ACK=1时确认号字段才有效。当ACK=0时确认号无效。
3)复位RST:当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其它原因),必须释放连接,然后再重新建立运输连接。
4)同步SYN:同步SYN=1表示这是一个连接请求或连接接受报文。
5)终止FIN:用来释放一个连接。FIN=1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
(6)窗口字段:占2字节,用来让对方设置发送窗口的依据,单位为字节。
(7)校验和:占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。
(8)紧急指针字段:占16位,指出在本报文端中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
(9)填充字段:是为了使整个首部长度是4字节的整数倍。

三、TCP序号和确认

(1)序号:数据段中第一个字节在数据中的位置编号。
(2)确认:确认就是期望从另外一边收到的下一个字节的序号,在这个过程中要进行累计ACK即累计应答。
这时就会有一个问题:接收方如何处理失序的数据段呢?这里TCP规范并没有明确的规定,需要编程人员处理。
最后我们举个简单的序号与确认的例子:
在这里插入图片描述
主机A在键盘上输入C,Seq的值等于42,ACK的值等于79,发送的数据是C,将数据发给主机B,主机B收到信息之后将数据改位确认显示C,确认显示C中Seq的值就是上层ACK的值,ACK确认它上一次收到数据,在42的基础上加上1变为43,把确认的数据发给主机A之后,主机A对接收到的字母C回显,给出确认,ACK的值是上面Sep的值又加1变为80,Seq值为43,确认值收到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值