面试前来了解下TCP/IP网络模型吧~

网络体系结构分层

  1. OSI体系结构(七层)
  2. TCP/IP体系模型(四层)
  3. 五层体系结构

TCP/IP与OSI最大的不同在于:OSI是一个理论上的网络通信模型,而TCP/IP则是一个实际运行的网络协议。

今天我要带大家了解的是TCP/IP四层网络模型

前置知识

什么是TCP/IP?

概述:TCP/IP协议是供已连接因特网的计算机进行通信的协议

称呼:TCP/IP协议是指传输控制协议/网际协议

作用:TCP/IP协议定义了电子设备(比如计算机)如何接入因特网,以及数据如何在它们之间进行传输的标准

TCP/IP协议的内部

包含一系列用于处理数据通信的协议:

  • TCP(传输控制协议):应用程序之间的通信
  • IP(网际协议):计算机之间的通信

TCP/IP四层网络模型

为什么要有TCP/IP模型?

对于同一台设备上进程间的通信,有很多种方式,比如管道通信、消息队列、内存共享、信号等方式。

而对于不同设备上的进程间通信,就需要网络通信,而设备是多种多样的,为了兼容不同设备间的通信方式,就协商出了一套通用的网络协议

这个网络协议是分层的,每一层都有各自的作用和职责,接下来根据【TCP/IP网络模型】分别为每一层做介绍。

应用层

最上层的,用户能直接接触到的就是应用层,电脑和手机上的软件都是在应用层实现。那么当两台不同设备的应用需要通信时,应用就把数据传给下一层,也就是传输层

应用层无需关心数据是如何传输的,就好比于,我们去寄快递,只需把快递交给快递员,至于快递是如何传输的,我们不关心。

所以,应用层只需专注为用户提供功能,比如HTTP、FTP、Telnet、DNS、SMTP等。

应用层工作在操作系统的用户态,传输层及以下层则工作在操作系统的内核态。

传输层

应用层把数据包传给传输层,传输层为应用层提供网络支持。

在传输层会有两个协议,分别是TCPUDP

TCP协议:全称为传输控制协议,是大部分应用采用的传输层协议,比如HTTP应用层协议。TCP相比UDP多了很多特性,比如流量控制超时重传拥塞控制等。这些都是为了保证数据包能可靠地传输给对方。

UDP协议:相对TCP来说更简单,只负责传输数据,不保证数据是否抵达对方,但它实时性好传送效率也高。当然,UDP同样可以实现可靠传输,把TCP的特性在应用层上实现就可以,不过要实现一个商用可靠的UDP传输协议,也不是一件简单的事。

传输层工作: 用户传输的数据可能非常大,如果直接传输数据会不好控制,因此当传输层的数据包大小超过MSS(TCP最大报文段长度),就要将数据包分块,这样即使中途有一个分块丢失或损坏,只需要重新发送这个分块,而不用重新发送整个数据包。在TCP协议中,我们把每个分块称为一个TCP段

当设备作为接收方时,传输层要负责把数据包传给应用,但是一台设备上可能同时存在多个应用在接收或者传输数据,因此需要一个编号来将应用区分开来,这个编号就是端口

比如80端口通常是web服务器用的,22端口通常是远程服务器登录用的,浏览器中每个标签栏都是一个独立的进程,操作系统会为它们分配临时的端口

由于传输层的报文中是携带端口号的,所以接收方可以识别出该报文是发送给哪个应用的。

传输层作为应用数据传输的媒介,帮助实现应用到应用间的通信,而实际传输的功能就交给下一层,也就是网络层

网络层

网络层最常用的是IP协议,IP协议会将传输层的报文作为数据的一部分,再加上IP包头组装成IP报文,如果IP报文大小超过MTU(以太网一般为1500字节)就会再次进行分片,得到一个即将发送到网络的IP报文。

同样网络层需要区分设备的编号,以负责将数据从一个设备传输到另一个设备,我们一般用IP地址来给设备编号。

从上边我们可以知道:传输层采用端口来区分应用,网络层使用IP地址来辨别设备。

我们知道IPv4协议,地址共32位,分成4段(比如192.168.249.1),每段是8位,即每一位都采用二进制表示(比如1的8位二进制表示就是00000001)。只有一个单纯的IP地址虽然做到了区分设备,但寻址起来非常麻烦,全世界那么多台设备?难道一台台去匹配?这显然不科学。

因此,需要将IP地址分为两种意义:

  • 一个是网络号,负责标识IP地址是属于哪个子网的。
  • 另一个是主机号,负责标识同一子网下不同的主机

如何分呢?这就需要配合子网掩码才能算出IP地址的网络号主机号了。

举个例子,比如10.100.122.0/24,后面的/24表示的就是255.255.255.0子网掩码,255.255.255.0二进制就是【11111111-11111111-11111111-00000000】,一共有24个1,为了简化子网掩码表示,用/24代替了255.255.255.0。

知道了IP地址和子网掩码,那么怎么得到网络地址主机地址呢?

网络号:将ip地址与子网掩码进行按位运算

上边会将ip地址的二进制形式和子网掩码二进制形式对应到每一位进行按位运算,按位运算的运算规则我们只要知道:同为1的情况下结果为1,其余情况都为0

那么主机号怎么求?

主机号:将子网掩码二进制形式的每一位取反后(即0变为1,1变为0)再和ip地址进行按位运算即可。

好了!现在网络号和主机号我们都求出来了。看到这我要为你的这份耐心鼓鼓掌,咱们继续~

回到我们寻址的过程,会先匹配相同的网络号(表示要找到和自身相同的子网),才会去找对应的主机。

除了寻址能力,IP协议还有一个很重要的能力就是路由。 在实际场景中,两台设备并不是用一条网线连接起来的,而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,因此当数据包到达一个网络节点,就需要通过路由算法来决定下一步走哪条路径。

路由器寻址工作中,就是要找到目标地址的子网,然后将数据包转发给对应的网络内。

所以,IP协议的寻址作用就是告诉我们下一个目的地该朝哪个方向走(即某个子网内),路由则是根据[下一个目的地选择路径],寻址更像是在导航,路由更像是在操作方向盘。

网络接口层

生成IP头部之后,接下来交给网络接口层在IP头部的前面加上MAC头部,并封装成数据帧发送到网络上。 IP头部中的接收方IP地址表示网络包的目的地,通过这个地址我们可以判断这个包发到哪里,但在以太网的世界,这个思路行不通。

什么是以太网?电脑上的以太网接口、Wi-Fi接口、以太网交换机、路由器上的千兆,万兆以太网口,还有网线,它们都是以太网的组成部分。以太网是一种在【局域网】内,把附近的设备连接起来,使它们之间可以进行通讯的技术。

以太网在判断网络包目的地时和IP地址方式不同,因此必须采用相匹配的方式才能在以太网中将包发往目的地,而MAC头部就是干这个用的,所以,在以太网进行通讯要用到MAC地址。

MAC头部是以太网使用的头部,它包含了接收方和发送方的MAC地址等信息,我们可以通过ARP协议获取对方的MAC地址

ARP(地址解析协议):IP到MAC的映射,根据IP地址来获取MAC地址的能力

所以说,网络接口层主要为网络层提供【链路级别】的传输服务,负责在以太网、WiFi这样的底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来标识网络上的设备

好了,以上就是对TCP/IP四层网络模型的所有介绍了,下面我们进行一个总结。

总结

TCP/IP网络通常由上到下分为4层,分别是应用层、传输层、网络层、网络接口层

每一层的封装格式如下图:

网络接口层的传输单位是,IP层的传输单位是,TCP层的传输单位是,HTTP的传输单位是消息或报文。 但这些名词没有本质的区别,可以统称为数据包

如果你觉得此文对你有一点点帮助,点个赞支持下作者,我会继续初吻的哈哈~

相关推荐
界面开发小八哥29 分钟前
DevExtreme Angular UI控件更新:引入全新严格类型配置组件
前端·ui·界面控件·angular.js·devexpress
bitbitDown38 分钟前
重构缓存时踩的坑:注释了三行没用的代码却导致白屏
前端·javascript·vue.js
xiaopengbc42 分钟前
火狐(Mozilla Firefox)浏览器离线安装包下载
前端·javascript·firefox
用户016523844411 小时前
Webpack5 入门与实战,前端开发必备技能无密
前端
小高0071 小时前
🔥🔥🔥前端性能优化实战手册:从网络到运行时,一套可复制落地的清单
前端·javascript·面试
古夕1 小时前
my-first-ai-web_问题记录01:Next.js的App Router架构下的布局(Layout)使用
前端·javascript·react.js
杨超越luckly1 小时前
HTML应用指南:利用POST请求获取上海黄金交易所金价数据
前端·信息可视化·金融·html·黄金价格
Jerry1 小时前
Compose 中的基本布局
前端
Hilaku1 小时前
深入WeakMap和WeakSet:管理数据和防止内存泄漏
前端·javascript·性能优化
Juchecar1 小时前
常见的 HTML 标签及 CSS 选择器速查表
前端