TCP/IP网络模型

应用层

应用层服务于用户,比如说我们在电脑上使用的软件,都是在应用层上实现的,当不同设备通信时,数据由下一层的传输层实现。应用层提供的功能比如HTTP、FTP、Telnet、DNS、SMTP等。应用层是工作在操作系统中的用户态,传输层以及下层模型工作在内核态。

传输层

传输层主要作用是给应用层提供网络支持,主要服务于应用层,作为数据传输媒介,实现应用与应用之间的通信。

传输层有两个传输协议:TCP与UDP

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

UDP只负责传输数据包,不保证数据包是否丢失,实时性更好些,传输效率也更高。

应用传输的数据过大时(超过MSS),传输层会将数据包分块,当有分块丢失时,只需要重传丢失的分块即可,不需要重写发送整个数据包。在TCP协议中,这些分块叫做TCP段。

设备作为接收方时,传输层是要将数据包传输给应用层的。但是同一时间可能有多个应用在收发数据,为了避免数据传给应用时传输错误,通常会使用一个编号将应用区分开来,这个编号叫端口

一些应用的端口是默认的,比如说80的Web服务器端口,22的远程登陆服务器端口,浏览器每一个独立的标签页都是一个独立的进程,操作系统会为这些页面分配独立的端口号,而不是给浏览器应用一个端口。

网络层

具体的传输实现,是由网络层实现的。

网络层常用的协议为IP协议,IP协议会将传输层的报文(HTTP与TCP报文)作为数据部分再次封装,加入IP包头组装成IP报文,与传输层相同的是,如果IP报文过大(超过MTU),那么也会进行分片传输,从而得到一个一个即将发送到网络的报文。

网络层是将数据从一台设备发送到另一台设备,为了找到接收数据的设备,我们需要一个与传输层中的端口类似的编号,在网络层这个编号叫做IP地址

这里以IPv4协议举例,IP地址一共32位,分为4段,每段以.进行分割,比如说192.168.100.1,每段占8位。

通过IP地址我们可以进行设备区分,但是网络层是如何进行寻址呢?

因此,IP地址可分为两种意义:

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

IP地址配合子网掩码来计算网络号与主机号。

在说如何计算网络号与主机号之前,先来了解一下子网掩码。比如说,10.100.122.0/24,IP地址后面的/24代表子网掩码1的个数。也就是 [11111111-11111111-11111111-00000000],转换为十进制子网掩码就是255.255.255.0

了解子网掩码是什么之后,再来看如何计算网络号与主机号。将IP地址与子网掩码进行按位与运算 得到网络号。将子网掩码取反后与IP地址进行**按位与运算,**就可以得到主机号。

网络层在寻址过程中,先去匹配相同的网络号(找到同一个子网),然后再去找主机。

IP协议处理方便寻址,还有一个重要作用是路由,在实际中,两台设备并不是使用一个网线连接的,而是通过网关,路由器,交换机等设备连接起来的,那么就会形成很多条网络路径,当数据包到达一个网络节点之后,就需要通过路由算法决定下一步走哪个网络路径。

IP协议中寻址是告诉我们应该去哪里,路由则是根据目的地选择路径。

网络接口层

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

生成IP报头之后,接下来要将数据传输给网络接口层,在IP报头之前再加上Mac报头,并封装成数据帧发送到网络上。

  • MTU:一个网络包的最大长度,以太网中一般是1500字节。
  • MSS:除去TCP与IP头部之后,一个网络包所能容纳的TCP数据的最大长度。

总结

网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

相关推荐
泡沫·3 分钟前
8.项目实战:Ecshop
服务器
j***576819 分钟前
电脑可以连接wifi,但是连接后仍然显示没有网络
网络·电脑·php
脏脏a1 小时前
【Linux】Linux进程状态深度解析
linux·运维·服务器
brave and determined1 小时前
接口通讯学习(day04):RS-232与RS-485:通信接口全解析
网络·uart·通讯·emc·rs232·rs485·嵌入式设计
檀越剑指大厂1 小时前
在家也能远程调代码?WSL+cpolar 的实用技巧分享
网络
凉晓风1 小时前
Linux中常见几种自启动方式的区别
linux·运维·服务器
秋邱1 小时前
价值升维!公益赋能 + 绿色技术 + 终身学习,构建可持续教育 AI 生态
网络·数据库·人工智能·redis·python·学习·docker
爱学习的大牛1231 小时前
如何系统学习网络渗透测试:从入门到精通的完整指南
网络·学习
程序猿编码1 小时前
PRINCE算法的密码生成器:原理与设计思路(C/C++代码实现)
c语言·网络·c++·算法·安全·prince
ManThink Technology1 小时前
LoRaWAN网关:连接私有服务器是“可行”还是“明智”?
运维·服务器