应用层
最上层,也就是我们能直接接触到的就是应用层, 比如我们电脑手机中使用的应用程序,都是应用层的实现
应用层只专注于为用户提供应用功能
应用层不用去关心数据是如何传输的, 就类似于我们寄快递,只需要将快递交给快点小哥, 由他负责运输即可
应用层是工作在操作系统的用户态, 而传输层及一下 则工作在内核态
传输层
应用层的数据包会交给传输层, 为应用层提供网络支持
传输层会有两个协议, 分别是TCP
和UDP
TCP 全称叫传输控制协议(Transmisson Control Protocol), 大部分应用使用的正是TCP传输层协议
TCP相比UDP多了很多特性, 比如流量控制,超时重传, 拥塞控制
UDP相对来说就比较简单, 简单到只负责发送数据包, 也不保证数据包是否能够到达对方, 但它的实时性比较高
不会有流量拥塞的问题,传输的数据包报文头部体积小, 传输速度快, 但是它是不可靠的传输
应用有时候传输的数据可能会很大, 直接传输就会不好控制, 因此当传输层的数据包大小超过MSS(TCP最大报文长度), 就要将数据包分块, 这样及时中途丢包了, 我们也只需要重复发送丢掉的那个包即可, 而不用重新发送整个数据包, 这就是TCP的可靠传输, 我们把每个分块称之为TCP段(TCP Segment)
![](https://img.haomeiwen.com/i1511170/78cff1d51387fb03.png)
当设备作为接收方时, 传输层要把数据包传送给对方, 但是一台设备上可能有很多个应用在接收和处传输数据, 因此我们需要一个编号来将应用区分开来, 那么这个编号就是端口
比如80端口通常就是Web服务器用的, 22端口远程登录服务器, 浏览器每个标签页都是一个单独的端口, 操作系统会随机进行端口号分配
传输层的报文中就会携带端口号
, 因此接收方能够识别出是发送给哪个应用
网络层
刚开始接触传输层
的时候, 我以为是传输层来传送的数据, 其实并不是它负责
实际场景中网络传输的环境是错综复杂的, 中间还有各种各样的线程和分叉路口, 设备的数据要传输给另一个设备, 就需要在各种各样的节点中进行选择, 而传输层的设计理念是简单、高效、专注, 如果传输层还要负责这一块的功能就有点违背设计原则了
也就是说不希望传输层处理的事情太多, 只需要服务好应用即可, 让其作为应用层数据传输的媒介即可. 实际传输的功能交给一下层, 网络层(Internet Layer)
![](https://img.haomeiwen.com/i1511170/701d3862c1044f82.png)
网络层最长使用的是IP协议(Internet Protocol), IP协议会将传输层的报文
作为数据部分
, 再加上IP包头
组成IP报文, 如果IP报文大小超过MTU(以太网中一般为1500字节)就会再次进行分片
, 得到一个即将发送到网络的IP报文
网络层负责将数据从一个设备传输到另一个设备, 世界上那么多设备, 又该如何能够找到对方呢, 因此网络层需要有区分设备的编号就是IP地址
IP地址微分
- 网络号, 负责标识该IP地址属于哪个[子网]
- 主机号, 负责标识同一[子网]下的不同主机
寻址能力, 两台设备并不是用一条网线连接起来, 中间会进过很多网关, 路由器,交换机等众多网络设备,
IP协议的寻址作用是告诉我们去往下一个目的地的方向在哪里, 路由则是根据下一个目的地选择路径, 寻址像是在导航, 而路由更像是在操作方向盘去往导航的目的地
网络接口层
网络层数据包交给网络接口层,在IP头部的前面加上MAC头部,并封装成数据帧(Frame),发送到网络上
MAC头部包含了发送接收双方的MAC地址
网络接口层主要为网络层提供[链路级别]的传输服务, 负责在以太网,WIFI这样的底层网络上发送原始数据包,工作在网卡这个层次, 使用MAC地址来表示网络上的设备
总结
综上所述,TCP/IP网络通常是由上到下分成4层, 分别是应用层, 传输层, 网络层和网络接口层
![](https://img.haomeiwen.com/i1511170/21cfeb932ccafd93.png)
![](https://img.haomeiwen.com/i1511170/704db480e9083fd0.png)
网络接口层是帧(frame), 网络层IP层传输单位是包(packet), TCP层是段(segment), HTTP的传输单位则是消息或者报文,可以统称为数据包
网友评论