IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP报文结构 -> 正文阅读

[网络协议]TCP报文结构

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

1.TCP协议概述

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

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

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

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

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

2.TCP报文结构示意图

?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.客户端和服务端的交互

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

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

?4.关于MTU和TCP MSS参数

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

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,一般用作随机端口

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:52:32  更:2022-09-13 11:55:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 10:56:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码