写在前面:本文章是针对《计算机网络第七版》的学习笔记
TCP虽然是面向字节流的,但是TCP传输的数据单元却是报文段。一个报文段可以分为首部和数据两部分。
TCP报文段的首部的前20个字节是固定的,后面的4n字节是需要增加的选项。因此TCP首部的最小长度是20字节。
首部部分字段的意义如下:
源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号。TCP的分用功能也是通过端口号实现的。
序号:占4字节。在TCP连接中传送的字节流中的每一个字节都按照顺序编号。首部中的序号字段值则代表本报文段所发送的数据的第一个字节的序号。
确认号:占4字节。代表期望收到对方下一个报文段的第一个数据字节的序号。需要注意:
若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到
数据偏移:占4位。他指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。一般情况下为20字节,但是首部中还有不确定的选项字段。它的单位是4字节,而它的最大值是15,因此数据偏移最大值为60字节,也就是说选项不能超过40字节。
保留:占6位。以防后续使用。
下面是6个控制位,每个占一位:
紧急URG:当URG=1时,表明紧急字段有效,它告诉系统此报文中有紧急数据,应该尽快传送。
确认ACK:仅当ACK=1时确认号字段才有效。
推送PSH:当两个应用进程进行交互式的通信时,有时一端的应用进程希望在键入一个命令后立即就能收到对方的相应,这时设置PSH=1。
复位RST:当RST=1时,表明TCP连接中出现严重错误,必须释放连接,再重新建立运输连接。RST=1还可以用来拒绝一个非法的报文段或拒绝打开一个连接。
同步SYN:在建立连接时用来同步序号。当SYN=1,ACK=0时代表是连接请求报文段。若对方同意建立连接,则应在相应报文段中使SYN=1,ACK=1。也就是说,SYN=1代表连接请求或者连接接受报文。
终止FIN。用于释放一个连接。当FIN=1时,代表此报文段的发送方的数据已发送完毕,并且请求释放运输连接。
控制位到这结束。
窗口:占2字节。窗口值告诉对方:从本报文段中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以设置这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其窗口大小的依据。
检验和:占2字节。检验的范围包括首部字段和数据字段。和UDP检验的方法一样,只不过把伪首部第四个字段的17改成6.
紧急指针:占2字节。只有在紧急URG=1时才有效,它指出本报文段中的紧急数据的字节数。
选项:长度可变,最大40字节
TCP最初只规定了一种选项,即最大报文长度MSS。MSS是每一个TCP报文段中的数据字段的最大长度,而并不是整个TCP报文段的长度。