当前位置: 首页 > article >正文

TCP协议(一)

TCP协议(一)

    • 一、TCP协议的报文格式
    • 二、TCP协议报文的解包和封装和分用
    • 三、为什么TCP报文无需知道有效载荷的长度?
    • 四、如何通过端口号找到特定的进程呢?
    • 五、进程如何通过文件描述符读写传输层的数据?
    • 六、如何理解TCP报头
    • 七、不可靠的场景有哪些
    • 八、存不存在绝对的可靠性

一、TCP协议的报文格式

在这里插入图片描述

二、TCP协议报文的解包和封装和分用

TCP协议的报头的标准长度默认为20byte,报头的标准长度就是除去选项部分的长度。
将TCP报文的前20个字节取出来,将这20byte的数据转为结构化的数据。提取出4位的首部长度。
4位的首部长度就是TCP报头的长度(单位为4byte),4位首部长度的取值范围为0~15,则TCP报头的长度范围 0 ~ 60 byte,但是tcp报头的标准长度为20byte,所以TCP报头长度范围应该为20 ~ 60 byte。
当tcp报头没有选项字段时,4位的首部长度应该为5(0101)。
解包:获取得到tcp报头的长度,就能将tcp报文的报头和有效载荷进行分离了。
封装:定义一个结构体的tcp报头,并给报头中的字段赋相应的值。再将报头和发送缓冲区中的应用层的数据进行拼接,就形成了tcp报文。
分离:根据tcp报头中目的端口号进行向上交付给对应的进程。

三、为什么TCP报文无需知道有效载荷的长度?

TCP协议是可靠的,是面向字节流,每个字节都有对应的序号。tcp有保证可靠的机制:确认应答机制,超时重传机制,流量控制机制,拥塞控制机制。能保证一方发送缓冲区的数据的每个字节都能有序的放入另一方的接受缓冲区。不需要知道有效载荷的长度,就能保证数据丢失有序。

四、如何通过端口号找到特定的进程呢?

操作系统内核维护以端口号为key值、进程的PCB为value的哈希表,通过哈希表查找端口号对应的进程的PCB。bind操作就是将端口号和对应的进程的PCB添加到哈希表中。

五、进程如何通过文件描述符读写传输层的数据?

传输层将TCP报文的报头和有效载荷分离,提取报头中的目的端口号,从哈希表中找到端口号对应进程PCB,根据PCB找到文件描述符表,通过文件描述符找到对应的struct file中的缓冲区,将传输层的有效载荷拷贝进文件描述符对应的文件缓冲区,应用层就可以通过文件描述符对有效载荷进行读写了。
在这里插入图片描述

六、如何理解TCP报头

报头就是根据协议的定制的结构化数据,本质就是操作系统内部的结构体数据。

struct tcp_hdr{
	uint32_t src_port:16;
	uint32_t dst_port:16;
	uint32_t seq;
	uint32_t ask_seq;
	uint32_t header_length:4;
	...
};

七、不可靠的场景有哪些

丢包:报文在网络传输过程中丢失
校验出错:通过检验和检测报文出错
乱序:数据不是有序的
重复:重复收到多个相同的报文

八、存不存在绝对的可靠性

不存在绝对的可靠性。当一个消息,对方给应答,说明这个消息一定被对方收到了。但是双方通信最后一条消息,是没有应答的,有应答就不是最后最新的一条消息,所以无法判断最后一条消息被对方收到,所以不存在绝对的应答。


http://www.kler.cn/a/399483.html

相关文章:

  • 计算机网络之会话层
  • Java基础-集合
  • 智能网页内容截图工具:AI助力内容提取与可视化
  • 2024年了,TCP分析工具有哪些?
  • InfluxDB时序数据库笔记(一)
  • 矩阵的对角化特征值分解
  • 【Golang】——Gin 框架简介与安装
  • <项目代码>YOLOv8 番茄识别<目标检测>
  • Towards Reasoning in Large Language Models: A Survey
  • OpenGL 进阶系列09 - 计算着色器
  • 力扣整理版七:二叉树(待更新)
  • 小程序-基于java+SpringBoot+Vue的驾校预约平台设计与实现
  • windbg 关于L10比L9多更多行,和poi的含义
  • 【Linux---09】Crontab定时调度
  • 【C++】哈希表的实现详解
  • 如何在 WordPress 中轻松强制所有用户退出登录
  • Android Osmdroid + 天地图 (一)
  • Factory快速入门
  • 超详细:索引介绍(易懂!)
  • React--》如何高效管理前端环境变量:开发与生产环境配置详解
  • 阿里云MYSQL调优之慢查询
  • 刘艳兵-DBA036-Oracle数据库中的触发器(Trigger)可以在以下哪种情况下自动执行?
  • 策略模式、状态机详细解读
  • 力扣 LeetCode 94. 二叉树的中序遍历(Day6:二叉树)
  • 【SPIE出版,EI稳定检索】2024年信号处理与神经网络应用国际学术会议(SPNNA 2024,12月13-15日)
  • ES6进阶知识二