TCP/IP网络参考模型

news2024/11/28 1:49:33

目录

TCP/IP四/五层模型

应用层常见协议——传输数据PDU

传输层协议——传输数据段

端口号

TCP面向连接服务

UDP无面向连接服务

网络层协议——传输数据包

IP协议

数据链路层——传输数据帧

Ethernet帧格式

IEEE802.3帧格式


TCP/IP四/五层模型

标准定义的TCP/IP模型为四层模型,没有对网络接口层进行明确的细分

但是我们在使用TCP/IP模型时,一般会网络接口层分为链路层物理层来使用


应用层常见协议——传输数据PDU

通过各种协议向终端用户提供业务应用

DNS——建立域名与IP之间的关系

 HTTP——超文本传输协议

HTTP将图像,视频,文件有,音乐等传输给客户端供用户上网访问

不安全,现在基本都是用Https协议

HTTPS——安全的超文本传输协议

相比于Http增加了加密验证功能

 SMTP——用于发送邮件

POP3/IMAP——用于接收邮件

IMAP功能相比于POP3更多

 IMAP和POP3的主要区别

 Telnet——远程登录服务的标准协议

不安全,现在一般使用SSH进行远程登录

SSH——加密远程登录管理

通过密钥进行加密认证

FTP——文本传输协议

提供可靠的文件传输 服务,具有认证,权限的功能

TFTP——简单文件传输协议

提供不可靠的文件传输服务

消耗资源小,速度快

常用于网络设备的配置文件和系统文件传输


传输层协议——传输数据段

传输层提供面向连接或非面向连接服务以及进行重传前的差错检验

传输层只定义了两种协议TCP和UDP

端口号

端口号用来区分不同的应用层协议,当解封时看到传输层携带的端口号,就能了解到上层应用层携带的是何种应用层协议

端口号分类

0~1023      公认/知名端口号

1024~49151  应用注册使用的端口号

49152~65535  私有/动态端口(主机/客户端使用)

知名端口号

TCP面向连接服务

面向连接服务——在通信前要建立会话连接

TCP报文格式 固定长度20字节,可变长度40字节

TCP的最大报文段长度即MSS一般是1460字节(1500MTU-20IP Head-20TCP Head)

MSS指数据的长度最大1460字节

 源端口    Source port       

标识哪个应用程序发送的

目标端口  Destination Port  

标识哪个应用程序接收的

序列号   Sequence Number(简称seq)

在TCP传送的数据流中,每一个字节都有一个序号,在发送报文时会携带Seq

seq=seq+载荷(seq是自己上次发的seq)

载荷就是上层的所有包,此处指应用层的包(数据data

seq是32位的无符号数,当seq到达2^32-1后从0开始,依次循环

例如:第一报文段的seq为300,而且载荷数据共100字节,则下一个报文段的seq就是400

确认序号  Acknowledge  Number (简称ack)

确认序号对收到的TCP报文做确认,Ack=seq+载荷(seq是别人发的seq

注意:只有Flags中的ACK标志为1时,确认序号才有效

报头长度Header  length

用0000~1111来标识,其得出来的数值乘以4就是报文头部长度

即0001=1,则其就代表报文头部为4个字节

tcp头部默认20个字节,其报文长度也就是0101(5)

标识  Flags                                    

Urgent紧急指针位。当URG=1时,先发送此报文,不用等待,和紧急位字段一起使用。

ACK确认位。只有当ACK=1时,确认序号字段才有 效;

Push急迫位。当PSH=1时,发送到对方后,对方先接收处理。

RST重置位。当RST=1时,表示出现连接错误,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接;

SYN同步位。SYN=1代表SYN置位,SYN=1,ACK=0时表示请求建立一个连接,携带SYN标志的TCP报文段为同步报文段;只有刚开始前两次握手SYN置位。

FIN终止位

窗口  Window

通过接收端来调节窗口大小来控制网络拥塞,最大65535

当其为0时,报文为Zero window包下个包为保活包(keep-alive)

检验和  Checksum

对头部和内容进行校验

紧急位  Urgent Pointer

只有当Flags的URG标志置1时紧急指针才有效。

紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

先处理此序号的报文

可变长度 Option(0~40)

TCP流量控制

TCP流量控制主要使用滑动窗口协议,滑动窗口是接受数据段端使用的窗口大小,用来告诉发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的。

TCP会话建立——三次握手

通过标志位syn、ack以及序列号seq确认序列号ack实现

TCP三次握手,一定会交互三次报文

 会话建立的三种情况

发送信号→对方确认→收到回复(就是上述图片的情况)

发送信号→对方否认→重传

发送信号→发送超时→主动重传

TCP会话结束——四次握手

通过标志位fin、ack以及序列号seq确认序列号ack实现

TCP四次握手,不一定交互四次报文(主机直接拔电的情况)

 

UDP无面向连接服务

无面向连接服务——在通信前要不需要建立会话连接,直接开始传输数据,不可靠

报文格式

 源端口    Source port       

标识哪个应用程序发送的

目标端口  Destination Port  

标识哪个应用程序接收的

长度      Length

UDP头部+UDP数据的字节数,最小为8字节

检验和  Checksum

对头部和内容进行校验


网络层协议——传输数据包

提供逻辑地址,通过寻址来选择合适的路由和交换节点,实现数据从源到目的地的转发

网络层协议主要是IP协议,除了IP协议还有GREICMPIGMPOSPF等协议

IP协议

IP协议主要分为IPv4协议和IPv6协议,此处只讨论IPv4协议

报文格式       固定头部20字节,可变头部40字节(总共20~60字节)

IP报文最大长度为1500字节(头部+数据)

 Version 版本

IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6

Header Length 头部长度

固定部分的长度(20字节)和可变部分的长度之和

通过0000~1111来标识

即0001=1,则其就代表报文头部为4个字节

IP固定头部20个字节,其报文长度也就是0101(5)

DS Field 区分服务字段

用于QoS

Total Length 总长度

IP报文的总长度。报头的长度和数据部分的长度之和。

总长度最大为MTU的值,缺省为1500

Identification  标识——分片使用

该字段标记当前分片为第几个分片,在数据报重组时很有用(让其按照顺序重组)

Flags  分段标志——分片使用

该字段用于标记该报文是否为分片(有一些可能不需要分片,或不希望分片)

后面是否还有分片(是否是最后一个分片)。

该字段共3位。R、DF、MF三位。目前只有后两位有效

 R——保留位必须为0

DF——报文是否分片,为1表示不分片,为0表示分片。

MF——报文是否是最后一个分片,为1表示“更多的片”,为0表示这是最后一片。

例如:0x00---000  代表分片,最后一片

         0x40---010  代表不分片,最后一片

         0x20---001  代表不分片,还有更多的片

Fragment Flags 分段偏移——分片使用

指当前分片在原数据报(分片前的数据报)中相对于用户数据字段的偏移量,即在原数据报中的相对位置,为 0 代表是第一个包

TTL  存活时间

IP报文所允许通过的三层设备的最大数量,最大为255

每经过一个三层设备,TTL减1,当为0时,路由器将该数据报丢弃。

丢弃报文时向报文中的源IP地址发送ICMP错误消息(TTL Exceeded包)类型为 11 0

Protocol 协议

该值标识网络层的上层协议,可以是其它网络层协议,也可以是传输层协议

 Header  Checksum  校验和

计算IP头部的校验和,检查IP报头的完整性

Source Address源地址

Destination Address 目的地址

Options   可选字段(0~40字节)


数据链路层——传输数据帧

将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测

数据链路层定义了两个子层

LLC  逻辑链路控制

负责识别网络层的协议类型,对网络层的数据进行封装并向下层传递

MAC  介质访问控制

负责控制物理层设备,也就是MAC地址,大小为48位二进制(12位十六进制)

代表一个网络接口的物理地址,全球唯一

24供应商代码(组织唯一标识符OUI,由IEEE分配和管理)+24厂商自己分配

第八位为0是单播,为1是组播

以太网帧的两种标准帧格式

Ethernet_Ⅱ、IEEE802.3

IEEE802.3是Ethernet的前生,目前基本未使用(STP目前使用的是IEEE802.3帧格式)

Ethernet帧格式

帧大小为64~1518,NTU最大传输单元默认为1500

Type类型值大于等于1536即(0x0600)

 DMAC

目的MAC地址 6字节

SMAC

源MAC地址 6字节

Type

标识上层协议类型   2字节

IEEE802.3帧格式

帧长度字段值小于1500(0x05DC),MTU为1492

 DMAC

目的MAC地址 6字节

SMAC

源MAC地址 6字节

Length

定义了Data字段包含的字节数,不包过CRC检验码

DSAP

目的服务访问点,此处表示后面类型为STP帧

当为0x06,表示后面类型为IP帧

SSAP

源服务访问点,此处表示后面类型为STP帧

当为0x06,表示后面类型为IP帧

Control 字段

通常为0x03,标识无连接服务的IEEE 802.2无编码数据格式

OUI

组织唯一标识符,通常为MAC地址的前3字节

Type

标识以太网帧所携带的上层数据类型

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

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

相关文章

使用idea自动开发springMVC程序及表单标签

1.新建项目 选择Spring—>SpringMVC——>Download 点击next,起好项目名称project name,我这里项目名是MVCTag,选择好项目的路径project location,然后点击确定就会自动加载SpringMVC所需要的全部jar包 项目新建完成&…

【Spring5】基于注解的Bean管理简直是Spring中的Spring

文章目录1 什么是注解2 基于注解方式实现对象的创建3 组件扫描配置的细节4 基于注解实现属性的注入4.1 几种注解概述4.2 Autowire注解演示4.3 Qualifier注解演示4.4 Value注解演示5 纯注解的开发模式写在最后1 什么是注解 注解是代码中特殊的标记,格式如下&#xf…

Latex论文排版

O、部分参考: https://blog.csdn.net/qq_41982200/article/details/123051883?spm1001.2014.3001.5506 https://blog.csdn.net/qq_27353621/article/details/127170340 一、基础知识 1、空一行 → 分一段 空很多行也只是分一段 2、加粗、斜体 3、新章节 4…

JAVA学习笔记(二)

JAVA学习笔记 包1.1基本使用 2.2包的命名 2.3常用的包 2.4使用细节 访问修饰符面向对象 3.1面向对象三大特征 封装、继承、多态 3.2封装介绍 3.3封装的理解和好处 3.4封装的实现步骤 3.5构造器和setXXX结合 3.6继承(细节) 3.7super基本用法 3.8super给…

Kotlin基础学习笔记之第六章——kotlin的类型系统

一、本章简介 与java相比,kotlin中引入了一些新特性,他们是提升代码可读性的基本要素,比如:对可空的类型和只读集合的支持。与此同时,kotlin去掉了一些java类型系统中不必要的或者有问题的特性,比如把数组作…

docker安装mysql同步数据到linux与docker容器卷

可以去dockerhub搜索mysql寻找命令 docker run -p 3310:3306 --name mysql57 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 -e配置启动容器mysql 需要配置密码 -v 是绑定容器卷到linux 上 …

阿里二面,前端开发在web3.0中该如何应用,答完面试官对我笑了笑

近期听说周星驰也开始招募web3.0的人才了,可见其火爆程度真是不一般啊,不得不说的是,这又是一场新的革命,必将带来腥风血雨。 对于前端开发来说,很多人可能刚刚准备学习,刚刚入门,刚刚在企业中找…

目标检测(4)—— 经典算法和常用指标

一、深度学习的经典算法 two-stage(两阶段):RCNNone-stage(一阶段):YOLO,SSD(这个好像很牛) one-stage: 将图片输入到CNN里,经过特征提取&#…

rabbitMQ:绑定Exchange发送和接收消息(topic)

topic交换机和fanout交换机类似,也是广播机制,但是topic需要绑定RoutingKey,绑定RoutingKey时可以使用通配符(*,#)代替。 *:只能一个单词 #:0个或多个单词 编写topic消息发送类 1.编写Recei…

区块链的认识

目录 频繁的交易如何记录这些交易信息呢? 那我们的链又是如何连接起来的? 谁做记账先生呢? 共识机制 如何处理有些人距离账目的公共太远的问题? 安全性: 去中心化: 总结: 频繁的交易如何记录…

云原生k8s的盘古开天辟地

背景 容器(docker)流行开来,容器调度机制风起云涌,各路神仙用systemctl调度, 也有号称容器宗师的出品docker swarm, 各大门派也有各自的旗帜主张。天下混沌,血雨腥风,龙藏深泉,而谷歌的k8s就是这个主角。 …

较低成本的ISO7637-2 5A 5B抛负载保护方案

科普下什么是抛负载,抛负载测试方案以及后端电路参数的选择。 在众多汽车电子电磁兼容测试中,最具破坏性的就是ISO7637-2的5A 5B测试了,当然也有的测试项目放在ISO16750标准中,但测试波形大体相同。上海雷卯有专门的文章描述这2个…

基于JavaWeb的手机商城系统设计与实现

目录 摘要 I Abstract II 第1章 绪论 1 1.1 课题背景 1 1.2 目的和意义 1 1.3 系统设计思想 3 1.4 本文的结构 3 第2章 可行性分析 4 2.1 业务流程图 4 2.2 经济可行性 6 2.3 技术可行性 6 2.4 运行可行性 6 2.5 本章小结 7 第3章 需求分析 8 3.1 关于电商的前世今生和目前发展…

C++基础知识梳理<2>(引用、内联函数、auto关键字) [入门级】

目录 一、引用 1. 引用概念 2. 引用特性 2.1 引用在定义时必须初始化 2.2 一个变量可以有多个引用 2.3 引用一旦引用一个实体,再不能引用其他实体 3. 常引用 3.1 取别名的规则 3.2 权限放大error 3.3 权限不变 3.4 权限缩小 4. 引用原理与拓展 4.1…

RestTemplate.exchange各种用法(包括泛型等 --全)

文章目录前言1. Get请求1.1 返回基本类型1.2 返回自定义对象类型1.3 返回List\<T> 类型1.4 返回Map\<K,V> 类型1.5 返回自定义泛型类型2.Post请求2.1 传headerbody返回对象类型2.2 传headerbody返回自定义泛型类型3. 异常情况处理4. RestTemplate配置Bean最后前言 …

学习笔记之Vue基础学习——持更

Vue学习一、Vue简介1.1 什么是Vue&#xff1f;1.2 Vue的特点1.3 Vue官网使用1.4 搭建Vue开发环境1.5 Hello小案例总结案例&#xff1a;二、模板语法2.1 两大类型三、数据绑定3.1 两种方式四、el和data的两种写法4.1 el的两种写法4.2 data的两种写法五、MVVM模型5.1 什么是MVVM模…

目标检测(5)—— YOLO系列V1

一、YOLO系列V1 经典的one-stage方法&#xff0c;You Only Look Once将检测问题转化成回归问题&#xff0c;一个CNN搞定可以对视频进行实时监测 YOLO系列的速度更快&#xff0c;我们检测的物体很简单&#xff0c;进行取舍&#xff0c;舍弃了一些精度。 V1核心思想 现在要预测…

Windows与Linux行尾换行符引发Git的一系列惨案

1 前言 最近在使用 Git 提交代码的时候&#xff0c;老是碰到一段看起来 “没有任何改动” 的代码&#xff0c;被 diff 检测出异常&#xff0c;很是苦恼&#xff0c;特别是项目紧急的时候&#xff0c;不敢用 VSCode 编辑了&#xff0c;只能用 vim 进行少量代码的修改、上库。 …

传统Spring项目的创建和使用xml文件来保存对象和取对象

传统Spring项目的创建和使用xml文件来保存对象和取对象## 传统Spring项目的创建 一、创建一个maven项目&#xff08;maven项目无需使用模板&#xff09; 二、导入Spring依赖&#xff08;Spring Context依赖和Spring Beans依赖&#xff09; 可以从maven仓库获取&#xff0c;也…

Java 中代码优化的 30 个小技巧(中)

11 位运算效率更高 如果你读过 JDK 的源码&#xff0c;比如 ThreadLocal、HashMap 等类&#xff0c;你就会发现&#xff0c;它们的底层都用了位运算。 为什么开发 JDK 的大神们&#xff0c;都喜欢用位运算&#xff1f; 答&#xff1a;因为位运算的效率更高。 在 ThreadLoca…