TCP/IP学习笔记
TCP\IP从实际应用的五层结构开始,自顶而下的去分析每一层。
TCP/IP五层架构概述
学术上面是TCP/IP四层架构,OSI/ISO是七层架构,实际中使用的是TCP/IP五层架构。

数据链路层

ICMP数据包分析
Wireshark抓包分析ICMP协议_wireshark抓ping包分析数据报格式-CSDN博客
ping百度的ip地址。

请求报文


DDOS攻击
DDoS(分布式拒绝服务)攻击是一种恶意网络攻击,**旨在通过向目标服务器、服务或网络发起大量的流量请求,导致其无法正常工作**,从而使其无法为合法用户提供服务。与传统的DoS(拒绝服务)攻击不同,DDoS攻击是由多个受控设备(通常是被恶意软件感染的设备,形成一个“僵尸网络”)同时发起攻击,从而分散了攻击来源,使其更难被防范和追踪。Ping Flood 攻击:这是最简单的 DDoS 攻击之一。攻击者使用大量设备向目标服务器发送大量 ICMP 回显请求(类似于 ping 命令),目的是占用目标的网络带宽和 CPU 资源。
网络层
IP协议

IP习题

首部长度为20字节
前八位中后四位0100,表示4是ip首部的长度,这个最小值为5.所以需要丢弃这个分组。

4个二进制表示一个十六进制。生存时间必须是32+32个位也就是16个十六个十六进制。 生存时间8位两个十六进制。01表示这个分组的跳数是1。下一个两个十六进制就是协议类型。02表示的是IGMP协议。

片位移式100 *8=字节,前面长度位799。下一个从800开始。 首部20,总长度100. 这个分片有80字节。
第一个字节编号 800 最后一个879

wireshark抓取ip数据包进行分析。


4 表示ipv4
5 首部长度位5*4=20字节
00 是区分服务
0030 总长度 长度48
7a4f 表示标识字段
4000 标志和片位移  0100 0000  1标识不分片
7c 生存时间   124
06 上层TCP协议
635d 首部校验和 
3b517295 源地址 59.81.114.149
3b 51 37 e4 目的地址  59.81.55.228

Wireshark分析IP数据报_用wireshark分析ip报文结构-CSDN博客
前面的MAC地址,MAC地址长度是48位。四位是一个十六禁止,所以六位是一个MAC地址。
第一个4 标识ipv4的协议。
6是首部的长度,首部长度位30字节。
00 标识区分服务。
校验和确认
IP地址

OSPF和RIP协议

求当前最短路径的算法。
https://blog.csdn.net/yunfengfengfeng/article/details/105555008?ops_request_misc=&request_id=&biz_id=102&utm_term=dijkstra%E7%AE%97%E6%B3%95%E8%AE%A1%E7%AE%97%E8%B7%AF%E7%94%B1%E8%A1%A8&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-105555008.142v100pc_search_result_base2&spm=1018.2226.3001.4187
ARP报文分析

https://blog.csdn.net/weixin_46027505/article/details/106440848
ARP(Address Resolution Protocal,地址解析协议)是将IP地址解析为以太网的MAC地址(或者称为物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址还是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因为发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。ARP就是实现这个功能的协议。
arp的理解(考研考过)
arp 请求的时候是广播报文,响应式单播报文。
查看本地arp 缓存
arp -a

arp -d * 删除本地的缓存表  需要管理员的权限

ARP请求

arp响应报文

HardWare type  1表示当前的硬件类型式以太网
protoco type 表示上层协议类型  ipv4
hardware size MAC地址长度
Protocol size ip协议地址长度
opcode reply 操作类型  1 表示arp请求报文 2表示 arp应答报文
源MAC和源IP
目的MAC和目的IP地址
传输层
TCP协议
报文格式

三次握手

第一次握手  SYN=1 请求建立连接  seq=x 表示当前的序号是x第二次握手  SYN=1 ACK=1  ack=x+1 表示收到了前x个,下一个从x+1开始,seq表示当前是从y第三次握手  ACK=1表示有效  ack=y+1  seq=x+1
是否可以进行两次握手。

防止已经失效的连接请求,一个报文在网络中逗留了很长的时候,在到达服务器端,这个时候服务器端打开状态,而客户端已经关闭了状态,浪费了资源。

选择C ACK=上一次的seq+1.
四次挥手

第一次挥手   FIN=1  ACK=1 seq=u ack=v请求关闭连接 
第二次挥手 服务器发送 ACK 包 ACK=1 seq=v ack=u+1
第三次挥手  服务器发送FIN=1 请求关闭连接
第四次挥手  发送ACK报文
四次挥手详细过程如下:
- 客户端发送关闭连接的报文段,FIN 标志位1,请求关闭连接,并停止发送数据。序号字段 seq = x (等于之前发送的所有数据的最后一个字节的序号加一),然后客户端会进入 FIN-WAIT-1 状态,等待来自服务器的确认报文。
- 服务器收到 FIN 报文后,发回确认报文,ACK = 1, ack = x + 1,并带上自己的序号 seq = y,然后服务器就进入 CLOSE-WAIT 状态。服务器还会通知上层的应用程序对方已经释放连接,此时 TCP 处于半关闭状态,也就是说客户端已经没有数据要发送了,但是服务器还可以发送数据,客户端也还能够接收。
- 客户端收到服务器的 ACK 报文段后随即进入 FIN-WAIT-2 状态,此时还能收到来自服务器的数据,直到收到 FIN 报文段。
- 服务器发送完所有数据后,会向客户端发送 FIN 报文段,各字段值如图所示,随后服务器进入 LAST-ACK 状态,等待来自客户端的确认报文段。
- 客户端收到来自服务器的 FIN 报文段后,向服务器发送 ACK 报文,随后进入 TIME-WAIT 状态,等待 2MSL(2 * Maximum Segment Lifetime,两倍的报文段最大存活时间) ,这是任何报文段在被丢弃前能在网络中存在的最长时间,常用值有30秒、1分钟和2分钟。如无特殊情况,客户端会进入 CLOSED 状态。
- 服务器在接收到客户端的 ACK 报文后会随即进入 CLOSED 状态,由于没有等待时间,一般而言,服务器比客户端更早进入 CLOSED 状态。
两倍的MSI时间,保证TCP服务器端能收到第四次挥手的内容,如果第四次发送的内容咋在网络中丢失了,那么服务器端一直会发送重新响应报文。


16进制一个数字用四个二进制来表示。0532源端口  0017目的端口 都是16位。00000001 是序号 seq00000000 确认号 ack5 首部长度  5*4等于20字节报文类型  0000 0000 0010  SYN等于1。 07FF 窗口的大小0000 校验和0000紧急指针
wireshark分析TCP\IP三次握手和四次挥手的过程。
大脑里面需要有那一张的图
先 ping www.baidu.com
然后再 curl  www.baidu.com  解释curl命令
https://blog.csdn.net/ngczx/article/details/143669372?spm=1001.2014.3001.5501

第一次握手
seq和ack都是0.

第二次握手
seq=0,ack=上一次的+1=1

第三次握手
seq等于1,客户端第二次和服务器进行交互了。 ACK等客户端序号+1=1

第一次挥手
seq=79 ack=2782 FIN=1 请求关闭连接。


第三次挥手

第四次挥手

https://blog.csdn.net/dfBeautifulLive/article/details/121889271
TCP的高级特性包括**重传机制、滑动窗口、流量控制、拥塞控制。**
重传机制


往返时间RTT测量是比较复杂度的。
计算RTO的值。

滑动窗口
滑动窗口是一种流量控制机制,用于管理发送方和接收方之间的数据传输。**它通过定义一个窗口大小,限制在任何时间点内发送方可以发送但未被确认的数据量,从而防止接收方被过多的数据淹没。 **


流量控制
窗口的大小 **rwnd**。

拥塞控制

完整的拥塞控制过程

考研题目

UDP协议



TCP和UDP协议的区别
| 特性 | TCP | UDP | 
|---|---|---|
| 全称 | 传输控制协议 | 用户数据包协议 | 
| 面向连接 | 无连接 | |
| 传输具有可靠性 | 不可靠 | |
| 速度较慢,需要建立连接 | 速度较快 | |
| 使用场景 | 文件传输、网页浏览器 | 实时视频会议、DNS查询 | 
wireshark抓取UDP报文分析

应用层的协议
Http协议

报文类型
请求报文
请求方法  URL   HTTP版本请求头请求体(post请求才有请求体)
响应报文

HTTP的版本  状态码  状态信息
HTTP/1.1  200   OK响应头
key:value响应体
wireshark分析HTTP报文
[wireshark抓包分析HTTP协议,HTTP协议执行流程,_浏览网页wireshark进行报文捕获-CSDN博客](https://blog.csdn.net/wangyuxiang946/article/details/132634902)报文符合三次握手和四次挥手的过程。



DNS协议
**域名: **** www.baidu.com。**就像 IP 地址必须转换成 MAC 地址才能访问主机一样,域名也必须要转换成 IP 地址,这个过程就是“域名解析”。

采用任播的技术,每次请求的时候都是找到最近的根域名服务器。

查询一般使用递归或者迭代查询
DNS本身是传输使用的是UDP,如果是DNS服务器之间传输数据可能会用TCP,所以DNS不一定是UDP。
NAT协议
```javascript 私有的IP地址。 10.0.0.0 ——— 10.255.255.255172.16.0.0——— 172.16.255.255
192.168.0.0———192.168.255.255
为了解决ip地址非常稀少的问题,提出了NAT协议,将私网的ip地址映射到公网上面去。实现了一个公司使用一个公网的ip地址。NAPT 加上了ip地址和端口号NAT对于外网屏蔽了内网主机地址,能够为内网主机提供一定的安全保护。<h3 id="OMfj9">DHCP协议</h3>
需要掌握**DHCP 客户使用的端口是68,DHCP服务器使用的端口是67。**DHCP在没有获取到ip地址的时候默认是**0.0.0.0**。只有通过四次交互之后才会真正分配ip地址。相关文章:
 
TCP/IP学习笔记
TCP\IP从实际应用的五层结构开始,自顶而下的去分析每一层。 TCP/IP五层架构概述 学术上面是TCP/IP四层架构,OSI/ISO是七层架构,实际中使用的是TCP/IP五层架构。 数据链路层 ICMP数据包分析 Wireshark抓包分析ICMP协议_wireshark抓ping包分析…...
 
0000_vim自定义快捷键_alias
vim自定义快捷键_alias 如下: 1.直接打开vi ~/.bashrc 然后到最底部,添加alias快捷键 2.添加alias快捷键mgplat 以后只要发送mgplat就等于出发了那么长一条指令 3.保存退出即可 【注意】 操作完后,可能你用mgplat无法使用,可…...
Spring Boot项目中,实体类是否需要实现Serializable接口
在Spring Boot项目中,实体类是否需要实现Serializable接口并不是一个硬性规定,而是取决于具体的应用场景和需求。以下是对这一问题的更详细分析: 1. 序列化的基本概念 序列化是将对象的状态信息转换为可以存储或传输的形式的过程。反序列化则…...
 
打通工业通信壁垒实现Ethernetip转profinet网络互通
西门子S7-1500 PLC(profinet)与AB PLC 1769-L32E以太网通讯(EtherNet/IP)。今天与大家分享一篇Profinet转EtherNet/IP的通讯配置方案。本文主要介绍开疆智能的Profinet转EtherNet/IP网关KJ-PNG-208,连接西门子S7-1500 …...
 
数据结构_图的应用
最小生成树 Prim算法 int AMGraph::sum(string v) {int start, totalW, cnt, minW, u, vv, i, j;start LocateVex(v); // 获取起始顶点编号memset(visited, false, sizeof(visited)); // 初始化访问状态visited[start] true;totalW 0; // 最小生成树的总权重cnt 1; // 当前…...
C#中面试的常见问题002
1.wpf和Winfrom的区别 1. 技术基础 WPF:基于.NET Framework,使用XAML(可扩展应用程序标记语言)作为界面描述语言,支持矢量图形和高级布局。WinForms:基于.NET Framework,使用纯代码或拖放设计…...
快速理解微服务中Ribbon的概念
一.基本概念 1.在微服务架构中,Ribbon 是一个客户端负载均衡器,用于控制服务间的通信方式。 2.Ribbon 是一个开源的库,最早由 Netflix 开发,用于实现客户端负载均衡。 3.Ribbon 主要解决的是在微服务架构中,多个服务…...
K8S简介、使用教程
以下是关于 Kubernetes(通常缩写为 K8S)的简介和使用教程: 一、Kubernetes 简介 定义与作用 Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌开发,后捐赠给云原生计算基…...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【四】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
麦肯锡报告 | 科技落地的真谛:超越技术本身的价值创造
科技创新正在以惊人的速度改变企业运作和客户体验,但实现其潜力的关键在于正确的策略、流程、文化和人才。麦肯锡强调了一个理念:Never just tech(不仅仅是技术)。这表明,成功的数字化转型不仅依赖于技术,还…...
 
彻底解决 macOS 下Matplotlib 中文显示乱码问题
彻底解决 macOS 下Matplotlib 中文显示乱码问题 在使用 Python 的 Matplotlib 库进行数据可视化时,中文字符的显示常常会出现乱码问题,尤其在 macOS 系统上。在网上找了一大堆方法,花了很久,发现不是要安装各种字体就是要改配置&…...
 
STM32-- keil 的option for target使用
keil版本号 1.device界面 如:stm32f103c8t6的工程,可以直接在device这里修改成stm32f103vct6,虽然引脚不一样,但是很多一样的地方,可以直接使用,有些不修改也可以下载程序。 2.target xtal的设置不起作用了…...
【MCU】微控制器的编程技术:ISP 与 IAP
在嵌入式领域中,将程序下载到内置 Flash 有两种技术 ISP (In-system programming) ISP 即在系统编程,是指一些可编程逻辑器件、微控制器、芯片组和其他嵌入式设备在安装到完整嵌入式系统后能够进行编程,而不需要在将芯片安装到系统中之前对…...
 
C#基础题总结
16.一张单据上有一个5位数的号码为6**42,其中百位数和千位数已模糊不清,但知道该数能被 57 和 67 除尽。设计一个算法,找出该单据所有可能的号码。 17.编程序求2~10000以内的完全数。一个数的因子(除了这个数本身&…...
 
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大家好,我是锋哥。今天分享关于【Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?】面试题。希望对大家有帮助; Elasticsearch中的节…...
 
《参与中型项目,领略 Spring 魅力》
一、Spring 在中型项目中的魅力展现 Spring 框架以其强大的功能和灵活性,在中型项目中发挥着重要作用。它不仅简化了开发过程,还提高了代码的可维护性和可扩展性。 Spring 在中型项目中魅力十足,其优势主要体现在以下几个方面。 首先&#…...
 
计算机网络-GRE(通用路由封装协议)简介
昨天我们学习了VPN的基本概念,虚拟专用网络在当前企业总部与分支间广泛使用。常用的划分方法为基于协议层次有GRE VPN、IPSec VPN、L2TP VPN、PPTP VPN、SSL VPN等。其实我有考虑该怎么讲,因为在IP阶段好像虚拟专用网络讲得不深,在IE的阶段会…...
开源电话机器人产品的优点是什么?
开源电话机器人产品的优点是什么? 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 开源电话机器人产品作为人工智能技术的一种应用,近年来在电销、客户服务等多个领域展现出了显著的…...
 
Spring Boot 集成 Knife4j 的 Swagger 文档
在开发微服务应用时,API 文档的生成和维护是非常重要的一环。Swagger 是一个非常流行的 API 文档工具,可以帮助我们自动生成 RESTful API 的文档,并提供了一个友好的界面供开发者测试 API。本文将介绍如何在 Spring Boot 项目中集成 Knife4j …...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【一】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
 
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
 
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
 
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
 
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
 
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
 
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
 
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
