最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

浅谈TCPIP四层网络模型

网站源码admin2浏览0评论

浅谈TCP/IP四层网络模型

TCP/IP四层网络模型

四层模型,分别是数据链路层,网络层,传输层,应用层

OSI七层网络模型

除了TCP/IP网络模型包含的四层,还有物理层,会话层,表示层

七层模型,分别是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

自底向上的网络分层介绍

物理层

就好比以前的台式电脑,想要上网,除了有网线,还需要有Modem,然后把网线连接到Modem,这样才可以上网。这种就是从物理上,通过网线这种物理层次的东西让电脑与电脑之间实现通信。美国的海底光缆也是物理层的一种表现。通过网线也好,海底光缆也好,它们之间传输的都是0和1的电路信号

数据链路层

到了数据链路层,就有了一个以太网协议,它定义了电信号分组的方式,每一组电信号就是一个数据包,叫做帧,包含两个部分,分别是包头和数据。协议规定接入网络的设备都必须要有一个网卡,网卡都有一个唯一的MAC地址。从一台设备的网卡发送以太网包到目标设备,再由目标设备的网卡来接收数据包。

基于以太网协议,会把目标MAC地址封装到以太网包的包头,然后以广播的方式把以太网包发送给子网中的其他设备。其他设备的网卡接收到数据包后,解析数据包,获取目标MAC地址,再和自己的MAC地址做比对,比对成功,说明包是给自己的,否则就不做任何处理,直接丢包。

网络层

上面提到的数据链路层,以太网协议会把数据包通过广播的方式发给子网中所有带有网卡的设备,那它怎么知道子网中有哪些设备呢?

到了网络层就有一个ip协议,给每台电脑分配一个IP地址,IP地址是由32位的二进制数组成,通过IP地址和子网掩码做与运算,得到的结果,如果前面24位二进制数是相同的,那么就说明处于同一个局域网中/子网。

按照上面的方式就可以确定设备是处于同一个局域网当中,就可以把数据包通过以太网协议,以广播的方式投递到所有在当前子网当中的计算机,但是如果发送的数据包是由不同子网中的计算机来接收,这个又要怎么去处理?这个就需要用到路由器了!

标准化说法应该是网关不是路由器,网关多个网卡,连接多个子网,可以把数据层层传递到不同的子网中

=> 在子网中的每一台设备都会有一个ARP cache , 记录的是在同一个子网中其他设备的IP地址和MAC地址的映射关系

=> 当一个子网中电脑给另一个子网的电脑发送数据的时候,会先在数据包中封装一个IP包头,记录目标IP地址。同时在以 太网包头记录当前子网的路由器的MAC地址,把数据包发送给路由器

=> 路由器接收到数据包后,通过IP协议来确定目标IP是否处于自己另一个网卡连接的子网中

=> 如果是,则是通过路由表找到目标IP对应的MAC地址,写入到以太网包头中,然后通过交换机走以太网协议广播给子 网中的所有设备,最终由目标服务器接收并处理

=> 如果不是,则是找到和自己处于同个子网的另一台路由器设备的MAC地址并写入到以太网包头中,并把数据包投递给 另一个子网中的路由器,经过层层转发,最终由目标服务器所在的子网的路由器接收到数据包并发送给目标服务器

总结一下吧,就是如果有以太网协议,那我确实可以实现局域网/子网通信,通过交换机走以太网协议,以广播的方式发送给当前子网的所有带有网卡的设备。但是接收数据的目标服务器不是在当前子网中,就需要网关帮我们把消息转发到另一个子网当中去。这个时候家用的路由器就充当网关的角色

要先实现跨子网通信,就要有网络层,走IP协议。简单来说就是如果接收数据的目标服务器不在同个子网中,那么数据包中的以太网包头就会把MAC地址写上当前子网中的网关的MAC地址(路由器)并且把目标IP地址封装到IP包头中发送给网关,然后网关有多个网卡,可以连接多个子网,如果发现目标IP和网关都在另一个子网中,那么会把数据包包头MAC地址改写成目标服务器MAC地址,然后通过交换机广播给子网中的设备,最终被目标服务器接收。如果说不在另一个子网中,就把包头的MAC地址改写成和当前网关连接的另一个子网中的网关的MAC地址,由另一个子网的网关做转发,最后数据包传递到目标服务器所在的子网中的网关,最终通过以太网协议,以广播的形式发送给所有的设备,最终目标服务器接收数据

传输层

计算机的多个程序都要发送数据,那么就要用到网卡,但是怎么区分那个数据是谁发送的,交给目标服务器的哪个程序去接收?就要用到端口号了,通过端口号来区分发送给不同程序的数据

有个TCP协议。两台服务器之间的两个程序互相通信需要借助端口号。于是定义了一套基于端口点对点网络通信协议。如果使用tcp协议来通信,一般使用socket网络编程,但实际上还是离不开底层的tcp/ip协议,以太网协议

基于TCP协议,允许数据包发送到目标服务器中监听指定的端口的程序。包括如何建立连接,如何发送和读取消息。其中包括了TCP三次握手建立连接,四次挥手断开连接

就是点对点,在TCP协议中,发送的数据会按照固定大小,封装了一个个TCP包,里面有目标服务器的端口号,然后把这个TCP包封装到IP包中,IP包又封装到以太网包中,最后底层还是基于以太网协议+IP协议发送给目标服务器

socket编程是以数据流的方式传递信息,但实际上传输层会把流数据拆分成多个TCP包,基于tcp/ip协议和以太网协议发送过去,服务器接收到N多个tcp包后就相当于接收到你通过IO流发送过去的一段数据

传输层发送数据包的时候呢,会把目标端口封装到TCP包的包头当中,然后通过TCP协议发送TCP包到服务端,服务端接收到TCP包后获取包头的目标端口,然后把数据包发送给监听目标端口的程序当中。

应用层

应用层主要是对数据交换的规范和限定,就是拿到对方发送的数据后怎么去翻译它。,比如用户发送请求,接收到请求数据后要怎么去解释,怎么去处理,怎么去响应,以什么样的格式去响应?简单来说就是对数据处理统一格式和规范!!

应用层协议包括ftp协议和http协议等,应用层不涉及底层网络通信技术,仅仅只是对数据交互的规范

怎么说呢,就是一个应用层的规范吧,发送请求和相应结果总得有个统一的格式。比如请求的时候,基于Http协议,要有请求方式,是get请求还是post请求,请求过来的时候有请求头和请求体,然后请求体里面又有客户端传递过来的一些数据,然后服务器接收请求后又要以同样的规范相应结果给客户端,响应的结果比如要包含状态码,内容data还有其他的一些信息等等,就是大家都要按照统一的规范去请求和响应数据。

TCP/IP四层网络模型图总览

下面基于TCP/IP协议来解释通过浏览器请求Google的时候会发生哪些事情

比如访问/,会有哪些操作?

  1. 解析url,获取域名
  2. 访问DNS服务器,DNS会根据域名返回一个目标服务器的IP地址
  3. 基于IP协议确定访问的IP和当前发送者的IP是否在同一个子网中 IP和子网掩码与运算,运算结果网络部分相同则是同个子网
  4. 如果目标服务器不是在同个子网中,把http报文请求封装到应用层数据包中 http报文请求包括请求方法+url地址+http版本请求头和请求体 请求头:包括一些浏览器信息,包括浏览器内核,版本号等等 请求体:发送请求时携带的一些请求参数,通常以json格式
  5. 传输层基于TCP协议把应用层数据包封装到一个TCP包中,包头包含发送者和目标服务器端口号
  6. 网络层基于IP协议把TCP包封装到一个IP包中,IP包头包含发送者和目标服务器的IP地址
  7. 数据链路层基于以太网协议把IP包封装到一个以太网包中,包头包含目标服务器的MAC地址 以太网包最大传输单位是1500B,如果超过1500B,则会被拆分成多个以太网包
  8. 由于目标服务器和发送者在不同子网中,所以以太网包包头记录的是发送者网关的MAC地址,然后由网关把数据包转发到其他的子网中,经过多个网关层层传递,最终发送到目标服务器所在的子网中的网关
  9. 最终走以太网协议,通过交换机以广播的方式把数据包发送给服务器,服务器接收到数据后,会把多个以太网包拼接成一个完成的数据包,然后从以太网包获取IP包,从IP包获取TCP包,从TCP包获取应用层数据包,最终获取到http请求数据,把请求转发到tomcat中,tomcat最终相应结果并且以同样的方式发送以太网数据包,把响应结果返回给发送者 . 发送者接收到数据包,获取http响应结果,通过浏览器内核渲染,把响应结果的页面渲染出来!

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论