TCP报文结构

注:内容整理自B站UP主《牛兮兮的书》的系列视频,视频讲解非常好。

1.TCP协议概述

TCP:面向连接的传输层协议,采用客户端(发出请求)+服务端(回应请求)的工作模式。

客户端监听一个通信端口,服务端监听一个通信端口,建立一个双向的连接。

TCP报文结构_第1张图片

客户端:数据的发送方/数据的接收方

服务端:数据的接收方/数据的发送方

端口号:标志数据来源于那个应用程序

2.TCP报文结构示意图

TCP报文结构_第2张图片

 TCP报文的固定长度与IP报文一致,都是20字节

源端口(source port):16 bits,标识数据发送端的应用层程序

目的端口(destination port):16 bits,标识数据接收方的应用层程序。

取值范围为0~65535

序列号(sequence port):32 bits ,标识数据发送方所发出数据的编号,序列号以字节为单位。是一个的随机数字

确认号(acknowledge port):32 bits,标识数据接受方期望下次收到的数据编号(数据接受方表示之前的数据都接受到了,数据发送方,你下次得发这个标号得数据了)。

报头长度(header length):4 bits,标识TCP报头的长度,单位是4字节。所以说TCP的报头的长度范围为20~60字节。

保留位(reserverd): 3 bits

标志位(flag):9 bits

        bit 1: nonce:详见RFC 3450,同样是关于ECN相关的一个参数

        bit 2: congestion window reduce(CWR),拥塞窗口减小,CWR =1表示链路拥塞,会减少TCP窗口。

        bit 3:ECN-Echo(ECE):explicit congestion Notification显式拥塞报告

        bit 4:Urgent (URG):紧急,标志高优先级的紧急数据,URG=1表示报文中有紧急数据,需要优先处理,并且URG=1,TCP报头中的紧急指针字段才会生效

        bit 5:ACK(acknowledgement):确认,表示TCP报头中的确认号是否有效,ACK = 1代表有效。

        bit 6:Push (PSH):推送,PSH=1,表示需要把接收到的数据推送给上层应用程序,而不是缓存起来

        bit 7:Reset(RST):重置,复位,RST = 1

        bit 8:Syn,同步,表示请求建立连接,并同步双方的序列号

        bit 9:Fin ,FIN = 1,表示数据已经发送完毕,请求关闭连接。

窗口大小(windows size):16 bits,用于表示数据接收方当前可以接收的最大的数据量,单位是字节。窗口大小其实代表了数据接受方当前缓存池的大小,告知发送方不要一次发送过量的数据。这个大小会根据传输的拥塞情况进行调整

检验核(checksum):16 bit,用于TCP头部+应用层数据的差错校验

紧急指针(urgent point):16 bit,表明紧急数据的字节数,与序列号搭配使用,单位是字节

可选项&填充数(option & padding):用于协商一些其他的参数。最常用的协商MSS(最大分段长度)。

3.客户端和服务端的交互

可靠的传输层协议,丢数重传(以字节为单位)

建立连接之后,可以统一回复,不用每次都回复。

TCP报文结构_第3张图片

 4.关于MTU和TCP MSS参数

TCP报文结构_第4张图片

数据链路层的负载:网络层+传输层+应用层

MTU : max transition unit最大传输单元

含义:网络设备一次能够发送出去的最大数据报文(最大数据帧),即二层链路的最大负载 

MTU的构成 =网络层报头(通常是20字节) + 传输层报头(通常是20字节) + 应用层数据(最大1460字节)。所以MTU的数值为1500字节,如果数据包超过了1500字节,就要拆分。这也意味着应用程数据的最大数据量为1460字节,这个数值称为MSS。

如何控制一个数据包中应用层数据的最大值

使用TCP的一个参数MSS来解决。(只有传输层使用TCP时才有这个参数)

MSS:max segment size 最大分段大小,最大分段长度。系统的模式就是1460字节

假设应用层程序要发送5000字节的数据,交给了传输层,那么TCP就要根据MSS的数值进行分段发送。

第一个段:1460字节

第二个段:1460字节

第三个段:1460字节

第四个段:640字节(完成)

注意区分:TCP协议对应用层数据的分段 & IP协议对数据包的分片

TCP分段:TCP根据MSS的大小对应用层数据进行拆分,分段后的数据依次封装TCP报头和IP报头,是一个完整的IP报文

IP分片:依据IP MTU参数对三层数据包进行切片,切片的报文不是一个完整的IP报文。

模式MTU = IP MTU = IPV6 MTU

5.TCP端口号分类

TCP端口号的取值范围0 ~ 65535

公认著名端口(wellkownn port):0~1023,主要代表一些通用的著名的应用层协议。

HTTP:TCP = 60 

HTTPS : TCP= 443

FTP:文本传输协议 TCP = 21 和20

Telnet协议:TCP =23 远程管理端口

SSH :TCP = 22 加密远程管理端口

 SMTP:TCP =25

POP3: TCP = 110

IMAP : TCP = 143

注册端口(register port):1024 ~ 49151,应用程序端口,需要在icann进行注册

动态和私有端口(dynamic and private port): 49152 ~65535,一般用作随机端口

你可能感兴趣的:(以太网辅助知识,tcp/ip,网络,服务器)