计算机网络八股文--day4 --传输层TCP与UDP
这是面试中最常考到的一层:端到端(也就是进程之间)的透明数据传输服务,差错控制和流量控制
该层呈上启下,像上面的资源子网提高服务,并使用下面通信子网的服务
端口,用于唯一标识主机上进程的,只有本地意义,通常与IP配合形成socket(套接字)
这里举出一些常用端口号(熟知端口号)
FTP:文件传输协议 21
TELNET:远程登录协议 23
SMTP:邮件协议 25
DNS:域名解析协议 53
TFTP:简单文件传输协议 69
HTTP:超文本传输协议 80
主要协议只有两个,TCP和UDP
UDP较为简单:通常考的是TCP和UDP的区别
这里先简要介绍一下UDP
1. UDP:无连接,不可靠,开销小,实时好:数据传输可靠性由应用层负责
8B首部:包含源端口,目的端口,UDP长度,16位校验和(二进制反码求和),每个16位
由于头部简单,故没有什么偏移量的东西,所以UDP传输的数据不可拆分。
如果在接收端发现UDP出现差错,直接丢弃就可以了
那这里就就需要讲解以下UDP校验和的机制了
首先会给UDP报文段添加一个伪首部
这个内部包括源IP,目的IP,一字节0,自己使用的端口17,以及UDP长度
然后进行二进制反码求和再取反,(三部分一起,包括伪首部,首部,数据部分)
数据部分不足,补0,如果校验和结果为0,那么用全1填充,不想使用校验和,该段为全0
然后就是传输层的难点,TCP了
2. TCP:面向连接服务,面型字节流,开销大,可靠,可以保证按序的交付
头部为20B(固定长度)(最大可为60字节(可变部分最大为40字节)):
源端口,目的端口
序号:当前报文的序号
确认号:期待下次发送的报文
数据偏移:以4字节为单位,标识首部长度,就是数据相对于起始位置的长度
URG:紧急位,当URG等于1时表示紧急指针有效
ACK:表示确认号有效
PSH:表示接收方立即将数据传递给上层应用
RST:当RST=1时,表示TCP连接出现严重差错,需要重新建立连接
SYN:同步位
FIN:终止位
窗口:指明自己的接收窗口大小,以字节为单位
校验和:这个和UDP用法一致,这里不再做介绍
紧急指针:同URG配合使用,指向紧急数据
然后就是TCP最常考的问题
TCP三次握手和四次挥手:具体流程用图片展示,这里为解释
1.三次握手
最初服务器和客户端都处于关闭状态,随后服务器开启,监听连接请求
客户端主动开启,向服务器发送连接请求,发送后状态为同步已发送(syn-sent)
服务器接收到连接请求,发送响应,状态转为同步已收到(syn-rcvd)
客户端收到响应,进行回复,状态转为连接建立
服务器收到响应,状态转为连接建立
2.四次挥手
首先客户端主动关闭(双方均可)发送挥手请求,状态转为终止等待1(fin-wait1)
服务器收到请求,发送响应,转为关闭等待(close-wait),此时服务器仍然可以向客户端发送没有发完的数据
客户端收到回复,进入终止等待2
服务器发完数据,进入最后确认(last-ack)
客户端收到服务器最后发完的数据,进行回复确认,随后进入时间等待(time-wait)
服务器收到回复确认,关闭
客户端等待2MSL(最大报文段寿命)后进行关闭
为什么要等待2MSL呢
防止旧连接报文干扰新连接:2MSL的等待确保网络中残留的旧连接报文(如延迟的FIN或数据包)彻底消失,避免被误认为属于新建立的同名连接。
相关文章:

计算机网络八股文--day4 --传输层TCP与UDP
这是面试中最常考到的一层:端到端(也就是进程之间)的透明数据传输服务,差错控制和流量控制 该层呈上启下,像上面的资源子网提高服务,并使用下面通信子网的服务 端口,用于唯一标识主机上进程的&…...

个人开发免费好用
聊一聊 现在输入法非常多,有时候都不知道哪个更好用。 其实,只有多尝试,才能找到适合自己的。 今天给大家分享一款输入法,用起来比较顺手,大家可以试试。 软件介绍 BL输入法 这是一款绿色纯净,安全放心…...

[随笔] 升级uniapp旧项目的vue、pinia、vite、dcloudio依赖包等
汇总 # 升级uniapp项目dcloudio整体依赖,建议执行多次 # 会顺带自动更新/升级vue的版本 npx dcloudio/uvmlatest alpha# 检查 pinia 的最新版本 npm view pinia version# 更新项目 pinia 到最新版本 npm update pinia# 更新项目 pinia 到特定的版本 # 首先…...

第十六届蓝桥杯 2025 C/C++组 密密摆放
目录 题目: 题目描述: 题目链接: 思路: 思路详解: 发个牢骚: 代码: 代码详解: 题目: 题目描述: 题目链接: P12337 [蓝桥杯 2025 省 AB/Python B 第二…...

【QT】QT中的网络编程(TCP 和 UDP通信)
QT中的网络编程(TCP 和 UDP通信) 1.tcp1.1 tcp通信1.1.1 相比linux中tcp通信:1.1.2 QT中的tcp通信: 1.2 tcp通信流程1.2.1 服务器流程:1.2.1.1 示例代码1.2.1.2 现象 1.2.2 客户端流程:1.2.2.1 示例代码1.2.2.2 现象: …...
Spring MVC @RequestBody 注解怎么用?接收什么格式的数据?
RequestBody 注解的作用 RequestBody 将方法上的参数绑定到 HTTP 请求的 Body(请求体)的内容上。 当客户端发送一个包含数据的请求体(通常在 POST, PUT, PATCH 请求中)时,RequestBody 告诉 Spring MVC 读取这个请求体…...

第38课 常用快捷操作——双击“鼠标左键”进入Properties Panel
概述 在设计过程中,我们经常需要更改某个图元的属性,例如更该焊盘的大小、更改网络的名称等等。 在AD 20中,更改属性一般都是在Properties Panel上完成的。 当我们要更改某个图元的属性时,我们用鼠标左键双击它,就可…...
【git】获取特定分支和所有分支
1 特定分支 1.1 克隆指定分支(默认只下载该分支) git clone -b <分支名> --single-branch <仓库URL> 示例(克隆 某一个 分支): git clone -b xxxxxx --single-branch xxxxxxx -b :指定分支…...

从零开发一个B站视频数据统计Chrome插件
从零开发一个B站视频数据统计Chrome插件 前言 B站(哔哩哔哩)作为国内最大的弹幕视频网站之一,视频的播放量、点赞、投币、收藏等数据对于内容创作者和数据分析者来说非常重要。本文将带你一步步实现一个Chrome插件,自动统计并展…...
经典算法 石子合并问题
石子合并问题 问题描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出一个算法,计算出将N堆石子合并成1堆最大得分和最小得分。 输入描述…...

[stm32] 4-1 USART(1)
文章目录 前言4-2 USART与串口通信(1)USART简介什么是USART?USART名字的含义?如何使用USART? USART的工作原理什么是串并转换?为什么要进行串并转换?移位寄存器串并行转换电路 USART寄存器组和完整框图 前言 本笔记内容ÿ…...
智能家居的OneNet云平台
一、声明 该项目只需要创建一个产品,然后这个产品里面包含几个设备,而不是直接创建几个产品 注意:传输数据使用到了不同的power,还有一定要手机先联网才能使用云平台 二、OneNet云平台创建 (1)Temperatur…...

记录两个免费开源又好用的后台模版vue3
一.element-plus-admin 一套基于vue3、element-plus、typesScript、vite的后台集成方案 1.简介 vue-element-plus-admin 是一个基于 element-plus 免费开源的中后台模版。使用了最新的 Vue3,Vite,Typescript等主流技术开发,开箱即用的中后…...

【AI生产力工具】Windsurf,一款AI编程工具
Windsurf 是 Codeium 公司推出的一款 AI 编程助手,它是一款集成深度上下文感知、多模型协作和实时代码管理的综合开发环境(IDE)。 Windsurf 作为 AI 编程工具的核心价值在于 “上下文感知 + 多模型协作 + 自动化工作流”,其深度集成的智能体系统(如 Flows 和 Cascade)正…...
YOLOv11改进:利用RT-DETR主干网络PPHGNetV2助力轻量化目标检测
这里写自定义目录标题 YOLOv11改进:利用RT-DETR主干网络PPHGNetV2助力轻量化目标检测1. 介绍2. 引言3. 技术背景3.1 YOLOv11概述3.2 RT-DETR与PPHGNetV23.3 相关工作 4. 应用使用场景5. 详细代码实现5.1 环境准备5.2 PPHGNetV2主干网络实现5.3 YOLOv11与PPHGNetV2集…...
Android 端如何监控 ANR、Crash、OOM 等严重问题
在移动互联网时代,Android 应用已经成为我们生活中不可或缺的一部分。从社交聊天到在线购物,从娱乐消遣到办公学习,几乎每个人的手机里都装满了各式各样的应用。然而,作为开发者,咱们得面对一个残酷的现实:用户的耐心是有限的。如果一个应用频繁卡顿、闪退,甚至直接崩掉…...

Mybatisplus:一些常用功能
自动驼峰 mybatis-plus:configuration:# 开启驼峰命名规则,默认true开启map-underscore-to-camel-case: true# 控制台日志打印,便于查看SQLlog-impl: org.apache.ibatis.logging.stdout.StdOutImpl TableName 作用:表名注解,标识…...
oracle 批量查询每张表的数据量
在 Oracle 中批量查询每张表的数据量,可以通过以下两种方法实现。根据数据量大小和实时性要求选择适合的方案: 方法一:通过数据字典快速查询(推荐) 原理: 使用 USER_TABLES(当前用户的表)或 DBA_TABLES(所有表,需DBA权限)中的 NUM_ROWS 字段,该字段记录了表的行数…...
linux netlink实现用户态和内核态数据交互
1,内核态代码 #include <linux/module.h> #include <linux/netlink.h> #include <net/sock.h> #define NETLINK_TEST 31 struct sock *nl_sk NULL; static void nl_recv_msg(struct sk_buff *skb) { struct nlmsghdr *nlh; int pid; …...
java 洛谷题单【算法2-2】常见优化技巧
P1102 A-B 数对 解题思路 输入读取与初始化: 使用 Scanner 读取输入。n 表示数组的长度,c 表示目标差值。使用一个 HashMap 存储数组中每个数字及其出现的次数,方便快速查找。数组 a 用于存储输入的数字。 构建哈希映射: 遍历数…...
WebAPI项目从Newtonsoft.Json迁移到System.Text.Json踩坑备忘
1.控制器层方法返回类型不能为元组 控制器层方法返回类型为元组时,序列化结果为空。 因为元组没有属性只有field,除非使用IncludeFields参数专门指定,否则使用System.Text.Json进行序列化时不会序列化field var options new JsonSerializ…...

batch normalization和layer normalization区别
Normalization无非就是这样一个操作: 其中x是输入数据,维度为(B,T,C),其中B是batchsize,T是序列长度,C是embedding维度;括号内是标准化操作,γ和…...
音视频开发成长之路与音视频知识总结
音视频开发曾经是一个富有挑战性和技术深度的领域。我来分享整理音视频开发的成长路径和知识体系: 音视频开发成长路线图 1. 基础阶段(1-3个月) 计算机基础:C/C、数据结构、操作系统音视频基础概念:采样率、比特率、…...

【多线程】七、POSIX信号量 环形队列的生产者消费者模型
文章目录 Ⅰ. 信号量一、POSIX 信号量的概念二、POSIX 信号量的类型区别三、POSIX 信号量与 SystemV 信号量的区别Ⅱ. 线程信号量基本原理一、为什么要引入信号量❓二、PV 操作三、POSIX 信号量的实现原理四、CAS操作介绍Ⅲ. POSIX未命名信号量接口一、初始化无名信号量二、销毁…...

JVM 一文详解
目录 JVM 简介 JVM 中的内存区域划分 1. 堆(一个进程只有一份 ------ 线程共享) 2. 栈(一个进程可以有 N 份 ------ 线程私有) Java 虚拟机栈: 本机方法栈: 3. 程序计数器(一个线程可以…...
OCR身份证识别(正反面)_个人证照OCR识别_开放API接口使用指南
一、接口简介 在数字化时代,快速准确地提取身份证信息变得尤为重要。**万维易源提供的“身份证OCR识别”API接口,能够快速提取二代居民身份证正反面的所有字段信息,包括姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限等。…...
《淘宝 API 数据湖构建:实时商品详情入湖 + Apache Kafka 流式处理指南》
随着电商行业的蓬勃发展,淘宝作为头部电商平台,积累了海量的商品数据。构建淘宝 API 数据湖,将实时商品详情数据纳入其中,并借助 Apache Kafka 进行流式处理,能够为企业提供强大的数据支撑,助力精准营销、市…...
基于ArduinoIDE的任意型号单片机 + GPS北斗BDS卫星定位
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.1 器件选择1.2 接线方案 二、驱动实现2.1 核心代码解析(arduino/ESP32-S3) 三、坐标解析代码四、典型问题排查总结 前言 北斗卫星导航…...

代码随想录算法训练营第60期第二十二天打卡
大家好!我们今天来到了一个全新的章节,回溯算法,那究竟什么是回溯算法,我们应该如何理解回溯算法,以及回溯算法可以解决的题目,我们今天就来一探究竟。 第一部分 回溯算法理论基础 其实我可以告诉大家的是…...

自主机器人模拟系统
一、系统概述 本代码实现了一个基于Pygame的2D自主机器人模拟系统,具备以下核心功能: 双模式控制:支持手动控制(WASD键)和自动导航模式(鼠标左键设定目标) 智能路径规划:采用改进型…...