关于TCP协议面试中常见的一千个问题

news2024/11/30 11:35:51

TCP传输层控制协议

TCP是面向连接的、可靠的、基于字节流的传输层通信协议。

TCP 头部格式

演示文稿1.png
1、 源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
2、 序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
3、 确认号字段——占 4 字节,是期望收到对方下一个报文段的数据的第一个字节的序号。
4、 数据偏移(即首部长度)——占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。
5、 保留字段——占 3 位,保留为今后使用,但目前应置为 0。
6、NS—ECN-nonce。ECN显式拥塞通知
7、CWR—Congestion Window Reduced
8、ECE—ECN-Echo有两种意思,取决于SYN标志的值
9、 紧急 URG —— 当 URG  1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
10、 确认 ACK —— 只有当 ACK  1 时确认号字段才有效。当 ACK  0 时,确认号无效。
11、 推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
12、 复位 RST (ReSeT) —— 当 RST  1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
13、 同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。
14、 终止 FIN (FINis) —— 用来释放一个连接。FIN 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
15、 窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。(发送方的接收窗口)
16、 检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
17、 紧急指针字段 —— 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
18、 选项字段 —— 长度可变最多40字节。TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”(MSS (Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。)
19、 填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。

TCP 如何保证可靠的?

校验和

TCP会对每个报文段进行校验和计算,以确保在传输过程中数据的准确性。如果接收到的报文段的校验和不匹配,TCP将丢弃这个报文段并且不确认收到此报文段。

序列号

TCP将应用层发送的数据划分成以字节为单位的报文段,并对这些报文段进行序列号标记。这确保了数据传输的有序性,即使在传输过程中发生丢包或乱序,接收方仍然可以通过序列号来重新组织和恢复数据。

应答机制

每个TCP报文段都包含一个序列号,用于标识发送方发送的数据的顺序。接收方会发送确认号来表示已成功接收的数据。如果发送方在合理的超时内未收到确认,它会重新发送数据。

重传机制

TCP使用超时机制来检测丢失的数据包。如果发送方在一定时间内未收到确认,它会认为数据包已丢失,并重新发送。这确保了数据的可靠传输。

TCP在握手的时候协商了哪些参数?

初始序列号

每个TCP连接都有一个唯一的初始序列号,它是连接的一部分。ISN用于标识初始数据包中的字节顺序。客户端和服务器都会选择一个ISN,并在握手中交换彼此的ISN。

窗口大小

在握手中,发送方会通知接收方它期望的窗口大小,即发送方愿意发送多少字节的数据而不需要等待确认。这有助于流量控制。

最大报文段长度(MSS)

每个TCP连接都有一个最大报文段长度,它表示每个TCP段的最大数据长度。在握手中,双方可以协商MSS,以确定通信中每个TCP段的最大数据量。

TCP选项

TCP握手过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

诊断DLL——Vector模板生成Send2Key.dll

文章目录 前言一、Vector诊断控制台Secutity Access基本原理二、Seed2Key DLL生成GenerateKeyEx源码自定义安全算法源码CAPL调用27服务解密算法前言 在实际诊断工程应用中,如UDS刷写——27服务,经常会遇到一些Seed2Key的算法问题,为了安全保密,这个算法的源码不便公开,我…

【C++基础】10. 指针

文章目录 【 1. 指针的定义 】【 2. 指针的调用 】【 3. NULL 空指针 】【 4. 指针的算术运算 】4.1 指针的递加4.2 指针的递减4.3 指针的比较 【 5. 指针与数组 】5.1 通过指针操作数组5.2 指针数组、数组指针 【 6. 指向指针的指针(多级间接寻址)】【 7. 传递指针给函数 】【…

【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说下你的vue项目的目录结…

第三章 内存管理 四、连续分配管理方式

目录 一、内存空间的分配与回收 1、连续分配管理方式 (1)、单一连续分配 优点: 缺点: (2)、固定分区分配 分区大小相等: 分区大小不等: (3)、动态分区…

leetcode17.04面试题:消失的数字

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗? 思路1:暴力枚举 定义一个[0~n]的数组与所给数组nums进行循环遍历,如果不相等则返回那个数。 int missingNumber(int…

Git 安装和配置教程:Windows / Mac / Linux 三平台详细图文教程,带你一次性搞定 Git 环境

Git是一款免费、开源的分布式版本控制系统,广泛应用于软件开发领域。随着开源和云计算的发展,Git已经成为了开发者必备的工具之一。本文将为大家介绍Git在Windows、Mac和Linux三个平台上的安装和配置方法,带你一次性搞定Git环境 Windows平台 …

windows计划任务的配置文件

界面操作 创建计划 依次设置 命令行操作 SCHTASKS 命令简介 SCHTASKS 命令是由微软公司开发并内置于 Windows 系统中的一个命令行工具。该命令可用于设置、修改、查询和删除计划任务,或启动计划任务中所定义的程序或脚本。 SCHTASKS 命令的基本语法 SCHTASKS 命…

【算法|动态规划No.20】leetcode416. 分割等和子集

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

38_Nginx 启动流程

文章目录 src/core/nginx.cint ngx_cdecl main(int argc, char *const *argv) {ngx_buf_t *b;

CSS基础详细解析(附带综合小练习)

目标:掌握 CSS 属性基本写法,能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容&#…

JVM之class文件结构剖析

文章目录 0.前言1. 引言1.1 Java编译原理基础1.2 Class文件在Java编译过程中的角色 2. Class文件的整体结构2.1 Class 文件组成 3. Class文件的详细解析3.1 魔数与版本号的作用和意义3.2 常量池的结构和作用3.3 访问标志的含义和可能的值3.4 类索引、父类索引和接口索引集合的作…

如何在小程序中设置页面显示的文字

不同商家,对于小程序有不同的要求。所以,小程序应该支持商家在后台灵活配置小程序各个页面的文字显示。下面具体介绍如何显示各个页面的文字。 朋友圈分享图文字:会显示在朋友圈海报顶部 升级会员提示:对于普通会员,在…

一些基础知识

一些基础知识笔记Git clone gitxxxxx pip install -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple wget google.com 可以快速看你的服务器到底有没有链接代理 benchmark和baseline L1 loss & MSE loss L1是差的绝对值和,MSE是差的平方和 …

KMP 算法 + 详细笔记

给两个字符串,T"AAAAAAAAB",P"AAAAB"; 可以暴力匹配,但是太费时和效率不太好。于是KMP问世,我们一起来探究一下吧!!! (一)最长公共前后缀 D[i] p[…

【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:vue项目本地开发完成后部…

电脑技巧:PrivaZer电脑清理工具介绍

目录 一、软件介绍 二、功能介绍 三、软件特点 清理和保护 防止恢复 Cookie的智能清理 四、软件下载 今天给大家推荐一款非常实用的电脑垃圾清理工具,感兴趣的朋友可以下载看看! 一、软件介绍 PrivaZer是一款免费好用的老牌清理软件,除…

详解Pinia和Vuex

一、vuex介绍 1.什么是vuex?为什么要使用vuex? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 在vue最重要的就是数据驱动和组件化&#x…

苍穹外卖(八) 使用WebSocket协议完成来单提醒及客户催单功能

WebSocket介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信(双向传输)——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP…

排序-算法

文章目录 一、排序的概念及引用1.1 排序概念1.2 排序运用1.3 常见排序算法 二、常见排序算法的实现2.1 插入排序2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 2.2 选择排序2.2.1 基本思想2.2.2 直接选择排序2.2.3 堆排序 2.3 交换排序2.3.1 冒泡排序2.3.2 快速排序2.3.3 快…

Godot C# 扩展方法持续更新

前言 为了简化Godot 的编写&#xff0c;我会将我的扩展方法写在这里面。 更新日期(2023年10月15日) Nuget 包安装 扩展方法 public static class GD_Extension{/// <summary>/// 假数据生成&#xff0c;详情请看Bogus官方文档/// </summary>public static Faker…