应用层、传输层、网络层、网络连接层
应用层
应用层只需要专注于为用户提供应用功能,我们的手机或者电脑上面的应用软件就是在应用层上实现的,它不用去关心数据是如何传输的。
应用层是工作在操作系统中的用户态,传输层及以下则是工作在内核态。
传输层
传输层是为应用层提供网络支持的;应用层的数据包会传给传输层。
传输层有两个传输协议:TCP、UDP
TCP
TCP(传输控制协议):大部分应用使用都是在TCP传输层协议,如:HTTP应用层协议
它相比于UDP多的特性:
- 流量控制
- 超时重传
- 拥塞控制等,它们都是为了保证数据包可靠地传输给对方
UDP
UDP:只负责发送数据包,不保证数据包是否能抵达对方
优点:
- 实时性相对更好
- 传输效率高
UDP实现可靠传输
UDP要想实现可靠传输,需要把TCP特性在应用层实现,但是实现一个商用地可靠地UDP传输协议,也是不易地。
数据包分块
当应用层传输地数据较大时,直接传输就不好控制了,所以当传输层的数据包大小超过MSS(注:MSS是TCP最大报文段长度),就要数据包分块,这样即使中途有一个分段损坏或丢失,就只需重发这一分块,而不需要发送整个数据包了。
在TCP协议中,每个分块称为一个TCP段。
端口
当设备作为接收方时,传输层则负责把数据包传给应用,但同一设备可能会有很多应用在接收或者传输数据,这时就需要一个编号将应用区分开,这个编号就是端口。
端口号
浏览器(客户端)中每个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号。
由于传输层的报文段中都会携带端口号,所以接收方可以识别出该报文是发送给哪个应用的。
注:传输层并不负责将数据从一个设备传输到另一个设备,我们不希望传输层协议处理太多的事情,只需服务好应用,让其作为应用间数据传输的媒介,帮助实现应用与应用间的通信,而实现传输功能交给网络层。
网络层
网络层最常使用的IP协议:IP协议会将传输层的报文作为数据部分,再加上IP头部,组装为IP报文,若IP报文大小超过MTU(以太网中一般为1500字节)就会再次进行分片,得到一个即将发送到网络的IP报文。
网络层负责将数据从一个设备传输到另一个设备,那如何找到所要传输的设备呢?
网络层需要有区分设备的编号:一般用IP地址给设备进行编号,对于IPV4协议,IP地址共32位,分成四段(例:192.168.100.1),每段8位。
寻址能力
为了寻址方便,还将IP地址分成了两种类型:
- 网络号:负责标识该IP地址是属于哪个子网的;
- 主机号:负责标识同一个子网下的不同主机。
那么它们是如何分的呢?
需要配合子网掩码算出IP地址的网络号和主机号。(具体参考笔记)
路由
除了寻址能力,IP协议的另一个重要的能力就是路由,实际场景中,两台设备并不是用一条网线连接起来的,而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,当数据包到达一个网络节点,就需要通过路由算法决定下一步走哪条路径。
路由器:在寻址工作中,就是要找到目标地址的子网,找到后进而将数据包转发给对应的网络内。
路由器只要一看到IP地址地网络号就可以进行转发。
所以,IP协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,而路由则是根据下一个目的地选择路径。
网络接口层
生成IP头部之后,接下来交给网络接口层,在IP头部的前面加上MAC头部,并封装成数据帧发送到网络上。
在以太网的世界中,通过IP头部中接收方的IP地址来判断将网络包送去哪里的方法是行不通的。
什么是以太网呢?
电脑上的以太网接口,Wi-Fi接口,以太网交换机、路由器上的千兆,万兆以太网口,还有网线,它们都是以太网的组成部分。以太网就是在一种局域网内,把附近的设备连接起来。使它们之间可以进行通讯的技术。
以太网在判断网络包目的地时和IP地址不同,所以在以太网进行通讯要用到MAC地址。
MAC头部就是以太网使用的头部,它包含了接收方和发送方的MAC地址等信息,我们可以通过ARP协议获取对方的MAC地址。
网络接口层主要为网络层提供链路级别的传输服务,负责在以太网,WIFI这样的底层网络上发送原始数据包,工作在网卡(网卡作为TCP/IP层的接口,可以在物理层传输信号,在网络层传输数据包)这个层次,使用MAC地址来标识网路上的设备。
总结
每一层的封装格式:
网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。