TCP报文段的首部格式

TCP:传输控制协议
TCP是TCP/IP体系中非常复杂的一个协议 。
主要特点如下:
(1)TCP是面向连接的运输层协议 。应用程序使用前必须先建立连接,数据传送完毕后,必须断开连接 。
(2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点 。
(3)TCP提供可靠的交付 。即无差错、不丢失、不重复、并且按序到达 。
(4)TCP提供全双工通信 。允许双方应用程序在任何时候发送数据 。两端设有发送缓存和接收缓存,用来临时存放双向通信的数据 。发送时,应用程序把数据传送给TCP缓存后就可做自己的事,TCP则在合适的时候把数据发送出去 。接收时,TCP把收到的数据放入缓存,上层应用程序在合适的时候读取缓存中的数据 。
(5)面向字节流 。TCP中“流”指流入到进程或从进程流出的字节序列 。
TCP报文段的首部格式
TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段 。一个TCP报文段分为首部和尾部两部分,而TCP的全部功能都体现在它首部各字段的作用 。
TCP报文段首部的前20个字节是固定的,
后面4N字节是根据需要而增加(N为整数) 。因此TCP首部最小长度20字节 。
1.长度:从0-31,所以每一行为32位,占4个字节 。至少占5行,TCP报头最小20个字节,最大60字节 。
2.16位源端口号:发送端端口号
3.16位目的端口号:接收端端口号
4.32位序号:即编号,初始值:第一个数据在第一次交互时由系统随机生成 。
序号值如何变化?第一个为随机值,第二个就是发送的数据在整个字节流中的偏移量 + 第一次生成的值
数据值也是从小到达排列:可以保证数据不乱序

TCP报文段的首部格式

文章插图
5.32位确认号:数据发送出去接收端接收后,接收端给发送端回馈确认机制 。
若接收端接收到2000,则回复2001 。
确认号还能够处理重复的报文段,一旦接收到相同的序号就丢弃
6.4位头部长度:15个4字节,最多60个字节 。
对于底层而言,控制协议是一堆数据,发送的还是一堆数据,接收端接收到后如何确定哪些是头部哪些是所携带的数据?
4位头部长度可确认,前20个字节为报头后面是携带的数据 。若选项部分携带4字节,则前24字节为头部后面为携带数据 。
7.6位保留:占6位,保留为今后使用,目前应设置为0
8.控制位UGR、ACK、PSH、RST、SYN、FIN:
紧急UGR:当UGR置1时,发送应用进程就告诉发送方的TCP有紧急数据要传送 。于是发送方的TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据 。
确认ACK:确认报文段,仅当ACK=1时确认号字段才有效 。当ACK=0时,确认号无效 。
推送PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方响应 。在这种情况下,TCP可以使用PSUH(推送操作) 。这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去 。接收方TCP收到PSH=1的报文段,就尽快(推送)交付给接收应用进程,而不在等整个缓存都填满了再向上交付 。
复位RST:当RST=1时,表明TCP连接出现了严重差错,必须释放连接,然后重新建立新运输连接 。**RST=1还可以用来拒接一个非法报文段或拒绝打开一个连接 。
同步SYN:在建立连接时用来同步序号 。当SYN=1,ACK=0时,表明这是一个连接请求报文段;对方若同意连接,则应在相应的报文段中使SYN=1,ACK=1 。因此SYN置1就表示这是一个连接请求或连接接受报文段 。
终止FIN:用来释放一个连接,当FIN=1时,表明此报文段的发送方数据已经发送完毕,并要求释放运输连接 。