| |
|
开发:
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地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/25 21:16:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |