TCP报文首部详解

首先我们需要知道TCP的固定包头为20个字节,每一行32bit(4Byte),5行。TCP与UDP区别是,TCP是面向连接的可靠传输(数据有保证),UDP则是面向对象的不可靠传输(数据没保证)。 

TCP报文首部详解_第1张图片
第一行:源端口与目的端口 
根据OSI七层模型我们知道TCP属于传输层,IP属于网络层,最终数据都在物理层上传输,其中从传输层到网络层会在发送数据前会封装IP首部,表示要传给那台IP地址的机器。然后我们需要知道端口的概念:端口可以认为是 设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口。我们这里指的源端口与目的端口是指虚拟端口的网络端口。根据计算机网络的知识我们知道端口对多有65535个。也就是16个二进制位。因此源端口与目的端口各16bit,占了一行。 
第二行:序号。TCP中每传输的一个数据都有一个序号。因为如果数据太大,我们会将数据切割成不同的数据报,有序号后就不会因为数据包在网络停留时间不一而导致的接受顺序不一样使得数据出现乱序。序号占用32bit,当序号超出2^32-1的话从0重新开始记。 
第三行,确认号。表示期望下一次发送数据。如果确认号为N,那么表示发送该报文的机器已经接受到了N-1及其以前的数据。 
第四行,数据偏移;保留;URG;ACK;PSH;RST;SYN;FIN;窗口。他们占用的大小分别为(bit):4;6;1;1;1;1;1;1;16。 
数据偏移是指TCP数据起始位置距离TCP报文起始位置的距离,一般情况下为报文首部长度20字节,但TCP首部有一个可选长度要注意。保留很明显就是现在没用。URG,当URG=1,表示该报文是紧急报文,因此发送方会将该报文放在最开头传输,要配合TCP首部紧急指针一起用。ACK,仅当ACK=1时确认号字段才有效,TCP规定,连接建立后所有传送的报文段都必须把ACK置1。PSH,当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。在这种情况下,TCP就可以使用推送操作。RST,当RST=1时,表明TCP连接中出现严重错误,必须释放连接,然后再重新建立运输连接。SYN,在连接建立时用来同步序号,当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意时,则应在响应的报文段中使SYN=1和ACK=1,因此,SYN置1就表示这是一个连接请求或连接接受报文。FIN,用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。上述的这些标志位,都可以参考TCP的握手和挥手来理解。窗口,占2个字节,窗口指的是发送本报文段的一方的接收窗口,不是自己的发送窗口,告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值作为接受方让发送方设置其发送窗口的依据,一般用来平衡双方的数据传输速率(带宽)不一致问题。 
第五行,校验和;紧急指针。校验和,占2字节。校验和字段检验的范围包括首部和数据这两部分。紧急指针,占2个字节,紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数。当所有紧急数据处理完毕时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为0时也可发送紧急数据。 
第六行(可选)。

TCP首部的可操作位有很多,我们可以参考TCP握手和挥手来理解。或是在一些实际问题中来理解。

你可能感兴趣的:(计算机网络,面试)