TCP/IP 网络模型
对于同一台服务器上的不同进程之间的交互可以通过调用接口,消息队列等方式实现,但是对于不同服务器上的进程之间通信,就需要通过网络实现,因为进行通信的两个服务器可能是不同的操作系统,所以就需要协商出了一套可以应用于所有操作系统的通用的网络协议。
tcp/ip 网络协议此场景下的产物。通常它是由上到下,分成5层:
-
应用层 -
传输层 -
网络层 -
数据链路层 -
物理层
这个网络协议是分层的,每一层都有各自的作用和职责,接下来就分别对每层进行介绍。
应用层
一般情况下程序员所开发实现的功能都属于应用级别,如果在这些应用功能中有远程调用,那就会用到应用层协议,比如http。
应用层只需要专注于为用户提供应用功能,不用去关心数据是如何传输的,应用层只需要打包好需要传输的数据,然后交给应用成下面的传输层即可。应用层是唯一工作在用户态的层,也是程序员开发量最大的层,应用层以下则工作在内核态。
传输层
应用层的数据包会传给传输层,传输层是为应用层提供网络支持的。
在传输层会有两个传输协议,分别是 TCP 和 UDP。
TCP 的全称叫传输层控制协议,大部分应用层协议底层依赖的正是 TCP 传输层协议,比如 HTTP 应用层协议。TCP 相比 UDP 多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对端。
UDP 就相对很简单,简单到只负责发送数据包,不保证数据包是否能抵达对端,但它实时性相对更好,传输效率也高。当然,UDP 也可以实现可靠传输,把 TCP 的特性在应用层上实现就可以,不过要实现一个商用的可靠 UDP传输协议,也不是一单的事情。
应用的数据往往不是一成不变的,有时候大,有时候小,如果传输层直接打包发送就会导致传输不好控制,因此传输层就要有一套处理应用层数据包的机制,传输层规定如果应用层传到传输层的数据包的大小在MSS(TCP 报文发送最大值)设置的值以内就直接发送,如果超过MSS设置的值就要将数据包分块,也就是一个完整的应用层数据包会被分成多个传输层的数据包发送,这样的好处是即使中途有一个分块丢失或损坏了,只需要重发代表这一个分块的传输层数据包,不用重新发送整个应用层数据包。在 TCP 协议中,我们把每个分块称为一TCP 段(TCP Segment)。
当设备作为接收端时,传输层则要负责把数据包传给应用,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是端⼝。
比如 80 端口通常是 Web 服务器用的,22 端口通常是远程登录服务器用的。而对于浏览器(客户端)中的每个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端⼝号。
由于传输层的报文中会携带端口号,因此接收端可以识别出该报文是发送给哪个应用。
网络层
网络层做的事情是将传输层的数据包再包上一层ip头,组装为ip报文,网络层一般使用的协议是IP协议,在这一层的实现中,如果报文的大小超过MTU(以太⽹网中一般为 1500 字节)就会再次进行分段,最终确定将要发送的数据包。
IP地址是用来表示目的地的地址的,但是这个世界上这么多服务器,每个服务器都有自己的ip,怎么才能知道哪一台服务器才是目标服务器呢?总不能一台一台去匹配吧?
ip协议的具体的实现是这样的,一般情况下IP地址共32位,分成了四段,每段是8位。这个ip地址实际上会有两层含义:
一个是网络号,负责标识该IP地址是属于哪个子网的;
一个是主机号,负责标识同一子网下的不同主机;
通过ip地址配合子网掩码计算出具体的网络号和主机号。具体怎么计算后面文章再说。那么在寻址的过程中,先匹配到相同的网络号,才会去找对应的主机。
数据链路层
其实我们使用的网络并不是一个完全的整体,应该是很多个网路区域通过一定的手段连接在一起,比如你和你的邻居家虽然很近但是确是两个不同的网络区域。那如果两家通过各自的网络通信,那数据就要跨网络传输。
如何来实现跨网络呢,其实只需要一设备将两个网络连接起来就可以了,这个设备一般是路由器,路由器可以通过路由表计算出下一个要去的 IP 地址。
那问题来了,路由器怎么知道这个发送数据中IP地址是发往哪里的呢?
于是,就需要有一个专门的层来标识网络中的设备,可以理解为路由器中有一个表,表中注册了所有连接到路由器的网络设备的ip,这个模块从发送端的数据中知道目标ip,然后通过目标ip计算出应该发往表中的哪个ip对应的设备,这样就可以让数据选择出一个链路进行传输,这就是数据链路层,如果说网络层是导航,那链路层就是方向盘。
当然了具体链路层是如何计算的ip的,这里不展开了,总之这里和mac有关系,后面文章再说。
物理层
物理层的作用是将数据转成电信号,这样就可以使数据在物理介质中传输,比如网线等。
原文始发于微信公众号(码农本农):蚂蚁金服面试官问我:TCP/IP 网络协议怎么分层的
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154781.html