TCP连接之报文首部

在面试时,会经常被问到TCP报文的一些细节,可以说TCP报文是不少企业用来考察面试者对网络的掌握程度的一道题目。

TCP连接作为网络传输的一个环节,是不可或缺的一部分。例如,OSI七层模型的应用层HTTP就是基于TCP连接实现的。

TCP连接的三次握手和四次挥手机制相信是每个后台开发人员耳熟能详的知识点,那么关于TCP的报文细节以及背后的原理是怎么样的呢?TCP是怎样借助报文来实现三次握手和四次挥手呢?笔者通过阅读书本和加上自己的理解。通过本文,来谈谈TCP报文首部以及报文首部背后的原理。

首先先粘上一张TCP报文图

好了,下面介绍一些基础的内容

TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段,一个TCP报文段分首部和数据两部分,其中很关键的就是TCP的报文头,TCP的全部功能都体现在首部中的各个字段中。

TCP报文段首部的前20个字节(上图有标识)是固定的,后面有4n字节(如果有选项最少为4字节)是根据需要添加的选项,所以TCP首部的最小长度是20字节。

1. 源端口号和目的端口号:

各2个字节,分别写入源端口号和目的端口号。端口就是我们熟悉的65536个套接字的端口号,显然,源端口号和目的端口号跟TCP的分用功能有着密切的关系,不同的应用使用不同的端口号,这样就可以互不干扰。而通信的双方的端口号必须相同,才能保证这一条通道是连接畅通的。

2.序列号(32位)

TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都是按顺序编号。整个要传送的字节流的起始序号必须在连接建立时就要设置。首部中的序号字段值指的是本报文段所发送的数据的第一个字节的序号。例如一个报文段的序号字段值是101,它的长度是100,那么跟在它后面的报文的序号字段值就是从201开始。

3. 确认号(32位)

是期望收到对方下一个报文段的第一个数据字节的序号。例如TCP通信双方分别为A和B,在B正确收到A发送过来的一个报文段,例如就上面的101-200字节,那么B期望的收到下一个报文段就必须是从201开始。于是B在发送A的确认报文段中把确认号设置为201。

说到这里,上面叙述的三次握手机制的实现原理就比较清晰了,TCP连接通过序号和确认号精确地把一定长度的数据段从连接的一端传送到另一端。

4. 数据偏移

因为选项字段部分,数据偏移就显得尤为重要了。因为选项部分报文段的长度是4n,这个长度是不确定的,如果不标记这个报文段的报头长度,就无法确定报文段的数据部分是从哪一个字节开始,这样在解析报文的时候会出现麻烦。数据偏移就是为了解决这个问题而设计的。

5. URG(紧急)

当URG等于1时,表明紧急指针字段有用。它用来告诉系统,这个报文段中有紧急的数据,应该尽快发送。当紧急标志被置1的时候,紧急数据就会被放在本报文段的首部,这样做的好处是,让紧急数据尽快发送到TCP的接收方。例如:在一大段程序通过TCP连接从发送方发往接收方,已经发送了一部分,但由于一些原因,例如发送方发送了像Ctrl+C(通常为中断服务器服务)这类指令的时候,希望接收方尽快收到这样的紧急信号,如果放在数据报的末尾,未免太慢了,因为这两个字符会被放置在接收方缓存的末尾,在所有数据都被处理完毕后才交付到接收方的应用进程。

6. ACK(确认)

这个字段是TCP通信过程比较常见的字段。当ACK=1时,确认号字段才有效,而确认号字段在上文已经说过,是发送端希望接收端下一次发送的数据的序列号。TCP协议规定,当TCP连接建立之后,所有的发送的报文ACK都置为1。也就是说,ACK字段能够辨别TCP连接是否建立成功。如果是一个运维工程师,抓包来分析不同的字段,这个字段应该是再熟悉不过了。

7. PSH(推送)

有时当两个应用进程进行交互式的通信,有时在一段的应用进程希望在输入一个命令的时候得到接收方的响应,这个时候,TCP就可以使用推送操作。接收放收到推送字段置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓冲都填满了再向上交互。但是据说实际上这个字段用得很少,因为TCP本身可以实现这个功能。

8. RST(复位)

当RST = 1时,表明TCP连接中出现了严重错误。例如主机崩溃或者其他原因,必须释放连接。然后在 重新建立运输连接。

9. SYN(同步)

在连接建立时用来进行同步的信号。当SYN = 1而ASK = 0时,表明这是一个连接请求报文。对方若同意建立连接,则在响应的报文段中使SYN = 1 ,ACK = 1。

10 .FIN(终止)

用来释放一个连接,当FIN = 1时,表明此报文段的发送方的数据已经发送完毕,并释放TCP连接,这个字段只有在TCP的四次挥手时候才会被置为1.

11.检验和

检验和字段检验(报文的)范围包括首部和数据两部分。在计算检验和时,都要在TCP报文段的前面添加12字节的伪首部。检验和有什么用?这关系到报文的正确性问题。为了保证TCP连接上传输的数据的正确性,即从发送方传送到接收方没有出现错误,用检验和来确定数据传输过程是否发生了错误。

12.紧急指针

紧急指针在URG = 1时才有意义,它指出本报文段中的紧

原文地址:https://www.cnblogs.com/thomson-fred/p/9926689.html

时间: 2024-11-06 13:49:09

TCP连接之报文首部的相关文章

TCP三次握手及TCP连接状态 TCP报文首部格式

建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图: 开个玩笑 ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1 SYN(SYNchronization同步):在连接建立用来同步序号.当SYN=1而ACK=0时,表明这是一个连接请求报文.对方若同意建立连接,则应在响应报文中使用SYN=1 ACK=1因此,SYN置1表示这是一个连接请求或连接接受报文 FIN(FINIS)即完,终结的意思,用来释放一个连接.当FIN=1时,表明此报文段发

TCP学习(1)--报文段首部格式

1.TCP的主要特点 (1).TCP的面向连接的运输层协议: (2).每一条TCP连接只能有两个端点(endpoint),是点到点之间的连接,每一个端点称为套接字(socket),套接字socket=(IP地址:端口号). (3).TCP提供可靠支付的服务: (4).TCP提供双工通信: (5).面向字节流. 2.TCP报文段的首部格式 尽管TCP是面向字节流,但是TCP传送的数据单元却是报文段.一个TCP报文段分为首部和数据两个部分,而TCP的全部功能都体现在它首部中各字段的作用. TCP报文

TCP之报文首部格式

TCP虽然是面向字节流的,但TCP传输的数据单元却是报文段: 一个TCP报文段分为数据和首部两部分,而TCP的全部功能都体现在它首部中各字段的作用: TCP报文段首部前20个字节是固定的,后面有4n个字节是根据需要而增加的选项(n是整数).因此TCP首部的最小长度是20个字节. TCP首部中各字段的含义如下: 源端口和目的端口:各占2个字节.端口是传输层和应用层的服务接口.传输层的复用和分用功能都有要通过端口才能实现. 序号:占4个字节,序号范围是(0,2^32 - 1),共2^32(即4294

TCP连接解释及连接过程描述

1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续请求,如有,作出响应.设客户进程运行在主机A中,他先向自己的TCP发出主动打开的命令,表明要向某个IP地址的某个端口建立运输连接,过程如下: 1)主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步比特SYN应置1,同时选择一个序号x,表明在后面传送数据时的第一个数据字节的序号是x. 2)主机B的TCP收到连

【网络协议】TCP连接的建立和释放

转载请注明出处:http://blog.csdn.net/ns_code/article/details/29382883 TCP首部格式 先看TCP报文段的格式,例如以下; TCP报文段首部的前20个字节是固定的,后面有4N字节是依据须要而添加的选项.因此TCP报文段的最小长度为20个字节. 首部固定部分的各字段的意义例如以下: 1.源port和目的port:加上IP首部的源IP地址和目的IP地址,确定唯一的一个TCP连接.另外通过目的port来决定TCP将数据报交付于那个应用程序,从而实现T

10.TCP连接的建立与终止

1.建立连接协议 (1)请求端发送一个SYN段指明客户打算连接的服务器的端口,移机初始序号ISN.这个SYN段为报文段1. (2)服务器发回包含服务器的初始序号的SYN报文段作为应答.同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认.一个SYN将占用一个序号. (3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认. 这三个报文段完成连接的建立,这个过程也称为3次握手. 2.连接终止协议 终止一个连接需要进行4次握手,这是由TCP的半关闭造成的. 当

TCP连接的建立和断开

1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续请求,如有,作出响应.设客户进程运行在主机A中,他先向自己的TCP发出主动打开的命令,表明要向某个IP地址的某个端口建立运输连接,过程如下: 1)主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步比特SYN应置1,同时选择一个序号x,表明在后面传送数据时的第一个数据字节的序号是x. 2)主机B的TCP收到连

计算机网络(11)-----TCP连接的建立和释放

TCP连接的建立和释放 概述 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程,运输连接有三个阶段:连接建立,数据传送和连接释放. TCP连接的建立 如图所示,假定A主机是客户端程序,B主机是服务端程序.最初两端的TCP进程都是出于CLOSED(关闭)状态. (1)B的TCP服务器进程先创建传输控制块TCB(transmission Control Block),准备接受客户进程的连接请求.然后服务器就进入LISTEN(监听)状态,等待客户端的连接请求. (2)A的TCP客户进程

《TCP/IP具体解释》读书笔记(18章)-TCP连接的建立与中止

TCP是一个面向连接的协议.不管哪一方向还有一方发送数据之前.都必须在两方之间建立一条连接.这样的两端间连接的建立与无连接协议UDP不同.UDP向还有一端发送数据报时,无需不论什么预告的握手. 1.建立连接的协议(3次握手) 1)请求端发送一个SYN段指明client打算连接的serverport,以及初始序列号. 2)server发回包含server的初始序号的SYN报文段作为应答.同一时候将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认.一个SYN将占用一个序号. 3)clie