TCP/IP网络模型
在网络模型中有分为7层模型(OSI模型)和5层模型和TCP/IP模型

OSI模型将应用层和表示层作为独立的两层,而TCP/IP模型将它们合并为一个应用层。
两种对比来说,TCP/IP模型更符合实际开发应用

应用层
应用层是最上层的一层,也是在开发中接触到最多的,因为在开发中一般需要提供HTTP接口来返回信息
应用层支持HTTP、FTP、DNS、Telnet等传输数据等协议,应用层是不用去关心数据是如何传输的,只需要把要传输的数据交给下边的层
而且应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态,
从应用层到传输层的操作是在操作系统中去完成的,通过网络协议栈的Api(Socket)来完成
应用程序通过 Socket 将数据发送出去时,操作系统内核会将数据从用户空间传输到内核空间,
然后将数据封装成 TCP、UDP 或其他协议的数据包,准备进行传输
总结应用层的大致作用:
- 提供HTTP、FTP等网络服务
- 实现应用程序间的数据交换
- 建立和维护应用程序之间的通信
传输层
运输层的任务就是负责向两个主机中进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。
传输层中的最重要的任务是数据传输的可靠性和完整性的保障。为此,它使用了一些技术,如流量控制、拥塞控制、纠错和校验等等,以确保数据传输的正确性。
另外,它还提供了多路复用和即时连接等技术,以帮助应用程序高效地使用网络资源
在传输层会有两个传输协议,分别是 TCP(传输控制协议) 和 UDP(用户数据报协议)
在TCP使用了包括数据分段、确认应答、超时重传、流量控制等机制来保证数据传输的正确性和可靠性
UDP 相对来说就很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率也高
TCP和UDP的区别分别是:
可靠性:TCP 是一种面向连接的协议,可以提供可靠的数据传输,保证数据不会丢失和损坏。UDP 是一种无连接的协议,不提供任何可靠性保障,数据发送后可能会丢失或损坏。
连接方式:TCP 是面向连接的协议,通过三次握手建立连接,传输数据完成后还需要四次握手释放连接。UDP 是无连接的协议,直接发送数据,无需建立和释放连接。
延迟性:由于 TCP 需要在建立连接后再传输数据,会造成一定的延迟,所以 TCP 在实时性要求不高的场景下表现并不出色。UDP 直接发送数据,几乎没有延迟,适合实时性要求高的场景。
数据量:TCP 在数据传输时需要分段并封装成 TCP 报文段,还需要创建和维护数据传输控制块,所以相对来说占用的网络资源较多,适合数据量较大、要求完整传输的场景。UDP 直接将数据封装成 UDP 数据报,相对来说占用的网络资源较少,适合短数据量、快速传输的场景。
总之,TCP 适合要求数据传输可靠、数据量较大、不要求实时性的场景;UDP 适合对实时性要求高、数据量较小、可丢失的场景
网络层
网络层负责将数据从一个设备传输到另一个设备,网络层通过 IP (Internet Protocol)协议实现
可以理解为通过IP协议的寻址操作,在寻址的过程中,先匹配到相同的网络号(表示要找到同一个子网),才会去找对应的主机
除了寻址能力, IP 协议还有另一个重要的能力就是路由。实际场景中,两台设备并不是用一条网线连接起来的,
而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,因此当数据包到达一个网络节点,就需要通过路由算法决定下一步走哪条路径
IP 协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路径
IP协议的寻址过程可以分为三个步骤,分别是主机向路由器的寻址、路由器向路由器的寻址、路由器向主机的寻址
主机向路由器的寻址:主机会根据自己的IP地址和子网掩码,判断目标地址是否在本地子网中。
如果在本地子网中,则会直接发送ARP请求,获取目标主机的MAC地址。如果目标地址不在本地子网中,则会将数据包发送到本地网关(即本地路由器)的MAC地址。路由器向路由器的寻址:路由器会根据路由表中的信息,选择下一跳路由器,并将数据包发送给下一站路由器。如果下一跳路由器不在本地子网中,则会通过ARP协议获取下一跳路由器的MAC地址。
路由器向主机的寻址:当数据包到达目标子网时,路由器会使用ARP协议获取目标主机的MAC地址,然后将数据包发送到目标主机。如果路由器无法获取目标主机的MAC地址,则会将数据包发送到本地网关进行转发。
网络层和传输层的基本区别在于,网络层处理的是分组(packet),而传输层处理的是数据流(stream)
传输层通过协议(如TCP或UDP协议)从上层应用程序接收数据,并将数据分割成较小的报文段(segment),从而能够被网络层传输
网络接口层
每经过一层,都会在数据包上加上请求头
在通过网络层获取到目标IP后,会将目标IP加到数据包上,生成了 IP 头部,接下来要交给网络接口层(Link Layer)在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上。

IP 头部中的接收方 IP 地址表示网络包的目的地,通过这个地址我们就可以判断要将包发到哪里,但在以太网的世界中,这个思路是行不通的
以太网在判断网络包目的地时和 IP 的方式不同,因此必须采用相匹配的方式才能在以太网中将包发往目的地,
而 MAC 头部就是干这个用的,所以,在以太网进行通讯要用到 MAC 地址,MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息,
我们可以通过 ARP 协议获取对方的 MAC 地址
所以说,网络接口层主要为网络层提供「链路级别」传输的服务,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标识网络上的设备
总结
这就是TCP/IP分层的大致

TCP/IP网络模型的更多相关文章
- TCP/IP 网络模型
前言 互联网是怎么构成的,又是怎么运作的?什么是 TCP/IP 网络?为什么远隔万里的计算机可以互相通信?计算机网络作为 IT 行业的基石,是工程师永远绕不开的话题. 计算机网络的分层体系结构 计算机 ...
- OSI与TCP/IP网络模型分层
学习linux的人,都会接触到一些网络方面的知识.作为一个linux方面的萌新,今天,小编就接触了OSI模型和TCP/IP协议栈,那么什么是OSI模型呢? OSI模型,开放式系统互联通信参 ...
- 计算机的OSI和TCP/IP网络模型
1.计算机的网络模型分为两种OSI模型和TCP/IP模型,它们的对应关系如下: 2.针对OSI模型,每一层都有各自的功能. 应用层 应用层是OSI模型中最靠近用户的一层,负责为用户的应用程序提供网 ...
- 服务器开发基础-Tcp/Ip网络模型—完成端口(Completion Port)模型
本文对于初学网络编程的极为友好,文中所有代码全部基于C语言实现,文中见解仅限于作者对于完成端口的初步认识,由于作者才疏学浅,出现的错误和纰漏,麻烦您一定要指出来,咱们共同进步.谢谢!!! 完成端口(c ...
- OSI七层网络模型与TCP/IP四层模型介绍
目录 OSI七层网络模型与TCP/IP四层模型介绍 1.OSI七层网络模型介绍 2.TCP/IP四层网络模型介绍 3.各层对应的协议 4.OSI七层和TCP/IP四层的区别 5.交换机工作在OSI的哪 ...
- OSI七层网络模型与TCP/IP四层模型
1.OSI七层结构图: 2.TCP/IP四层结构图: 3.各层对应的协议 4.OSI七层和TCP/IP四层的区别 OSI网络模型和TCP/IP网络模型对应关系: 5.交换机工作在OSI的哪一层 如果有 ...
- 网络知识学习1---(基础知识:ISO/OSI七层模型和TCP/IP四层模型)
以下的内容和之后的几篇博客只是比较初级的介绍,想要深入学习的话建议自己钻研<TCP/IP详解 卷1:协议> 1.ISO/OSI七层模型 下四层是为数据传输服务的,物理层是真正的传输数 ...
- TCP/IP协议(一)
TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协 ...
- 001.网络TCP/IP工程知识点
一 互联网概述 计算机网络定义:由自主计算机互连起来的集合体. 计算机网络两大部分:硬件:计算机.通信设备.接口设备和传输介质. 软件:通信协议和应用软件. 广域网拓扑结构通常有:网状拓扑结构和环形拓 ...
- 前端工程师如何理解 TCP/IP 传输层协议?
网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. TCP/IP网络模型 计算机与网络设备要相 ...
随机推荐
- vue-devtools 打开 vscode 可能会报错
据说 99% 的人不知道 vue-devtools 还能直接打开对应组件文件?本文原理揭秘 mac 电脑在 VSCode command + shift + p,Windows 则是 ctrl + s ...
- appium自动化时,automatic server里面desired capabilities的json representation设置
一点一点来,记号下: 大体格式如下: { "platformName": "Android", "platformVersion": &qu ...
- vue自动展示一、二级路由
在vue项目中使用路由可以很方便的跳转要显示的页面 在初始页面当中,首先要显示的路由怎么实现呢? 只需要在index.js页面中存放路由的children:[...]最后加上 redirect:&qu ...
- scala apply方法和update方法
示例代码1 class TestApplyClass { def apply(param: String): String = { println("apply method called, ...
- 【Mybatis-Plus】使用updateById()、update()将字段更新为null或者空
参考 https://blog.csdn.net/weixin_41544866/article/details/119738605
- leetcode medium 记录 51-100
# Title Solution Acceptance Difficulty Frequency 92 Reverse Linked List II 40.3% Medium ...
- Spring源码构建踩坑记录
1:Kotlin: warnings found and -Werror specified Kotlin将程序中的警告变更为错误导致的问题,只需要改变一下级别即可,注意看是那个模块的 解决方式:fi ...
- LightOJ1298 One Theorem, One Year (欧拉函数dp)
题意:给你almost-K-First-P-Prime, 如果一个数x有k个质因子,且这k个质因子包含且仅包含前p个质数满足条件. 让你求Σφ(x): 思路:首先我们这p个因子一定要有,也就是剩下k- ...
- window.onload / onscroll/onresize 事件
onload当文档加载完成后执行一些操作 window.onload = function(){ console.log("页面加载完成") } onscroll当页面发生滚动时执 ...
- day02-搭建微服务基础环境01
搭建微服务基础环境01 1.创建父工程,用于聚合其他微服务模块 1.1创建父项目 说明:我们先创建一个父项目,该父项目会去管理多个微服务模块(module),如下: (1)File-New-Proje ...