【计算机网络】TCP/IP网络模型(简易版理解)

TCP/IP的网络模型

这个⽹络协议是分层的,每⼀层都有各⾃的作⽤和职责

应用层

​ 最上层的,也是我们能直接接触到的就是应⽤层(Application Layer),我们电脑或⼿机使⽤的应⽤软件都是在应⽤层实现。那么,当两个不同设备的应⽤需要通信的时候,应⽤就把应⽤数据传给下⼀层,也就是传输层。
​ **所以,应⽤层只需要专注于为⽤户提供应⽤功能,不⽤去关⼼数据是如何传输的,**就类似于,我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关⼼快速是如何被运输的。⽽且应⽤层是⼯作在操作系统中的⽤户态,传输层及以下则⼯作在内核态。

传输层

应⽤层的数据包会传给传输层,传输层(Transport Layer)是为应⽤层提供⽹络⽀持的。

在这里插入图片描述

​ 在传输层会有两个传输协议,分别是 TCP 和 UDP。
​ TCP 的全称叫传输层控制协议(Transmission Control Protocol),⼤部分应⽤使⽤的正是 TCP 传输层协议,⽐如 HTTP 应⽤层协议。TCP 相⽐ UDP 多了很多特性,⽐如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对⽅。
​ UDP 就相对很简单,简单到只负责发送数据包,不保证数据包是否能抵达对⽅,但它实时性相对更好,传输效率也⾼。当然,UDP 也可以实现可靠传输,把 TCP 的特性在应⽤层上实现就可以,不过要实现⼀个商⽤的可靠 UDP传输协议,也不是⼀件简单的事情。
​ 应⽤需要传输的数据可能会⾮常⼤,如果直接传输就不好控制,因此当传输层的数据包⼤⼩超过 MSS(TCP 最⼤报⽂段⻓度) ,就要将数据包分块,这样即使中途有⼀个分块丢失或损坏了,只需要重新这⼀个分块,⽽不⽤重新发送整个数据包。在 TCP 协议中,我们把每个分块称为⼀个 TCP 段(TCP Segment)。

【TCP与UDP的区别及其应用场景】

  • 面向连接VS无连接

    • TCP建立一个连接需要3次握手IP数据包,断开连接需要4次握手。另外断开连接时发起方可能进入TIME_WAIT状态长达数分钟(视系统设置,windows一般为120秒),在此状态下连接(端口)无法被释放
    • UDP不需要建立连接,可以直接发起。
  • 可靠VS不可靠

    TCP利用握手、ACK和重传机制,udp没有。

    • 校验和(校验数据是否损坏);
    • 定时器(分组丢失则重传);
    • 序列号(用于检测丢失的分组和重复的分组);
    • 确认应答ACK(接收方告知发送方正确接收分组以及期望的下一个分组);
    • 否定确认(接收方通知发送方未被正确接收的分组);
    • 窗口和流水线(用于增加信道的吞吐量)。
    • (窗口大小:无需等待确认应答而可以继续发送数据的最大值)
  • 有序性

    TCP利用seq序列号对包进行排序,udp没有。

  • 面向字节流vs面向报文

    • 面向报文

      面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这也就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。(一个upd的最大报文长度2^16-1-20-8,20是ip报文头,8是udp报文头)

    • 面向字节流

      面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。如果应用程序一次只发送一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去。

  • tcp有流量控制,udp没有

  • tcp的头部比20bytes,udp8bytes

  • TCP应用场景:

    效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。

  • UDP应用场景:

    效率要求相对高,对准确性要求相对低的场景。举几个例子:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。

在这里插入图片描述

当设备作为接收⽅时,传输层则要负责把数据包传给应⽤,但是⼀台设备上可能会有很多应⽤在接收或者传输数据,因此需要⽤⼀个编号将应⽤区分开来,这个编号就是端⼝。
​ ⽐如 80 端⼝通常是 Web 服务器⽤的,22 端⼝通常是远程登录服务器⽤的。⽽对于浏览器(客户端)中的每个标签栏都是⼀个独⽴的进程,操作系统会为这些进程分配临时的端⼝号。
由于传输层的报⽂中会携带端⼝号,因此接收⽅可以识别出该报⽂是发送给哪个应⽤。

网络层

传输层可能⼤家刚接触的时候,会认为它负责将数据从⼀个设备传输到另⼀个设备,事实上它并不负责。实际场景中的⽹络环节是错综复杂的,中间有各种各样的线路和分叉路⼝,如果⼀个设备的数据要传输给另⼀个设备,就需要在各种各样的路径和节点进⾏选择,⽽传输层的设计理念是简单、⾼效、专注,如果传输层还负责这⼀块功能就有点违背设计原则了。
​ **也就是说,我们不希望传输层协议处理太多的事情,只需要服务好应⽤即可,**让其作为应⽤间数据传输的媒介,帮助实现应⽤到应⽤的通信,⽽实际的传输功能就交给下⼀层,也就是⽹络层(Internet Layer)。

在这里插入图片描述

​ **⽹络层最常使⽤的是 IP 协议(Internet Protocol),IP 协议会将传输层的报⽂作为数据部分,再加上 IP 包头组装成 IP 报⽂。**如果 IP 报⽂⼤⼩超过 MTU(以太⽹中⼀般为 1500 字节)就会再次进⾏分⽚,得到⼀个即将发送到⽹络的 IP 报⽂。

在这里插入图片描述

⽹络层负责将数据从⼀个设备传输到另⼀个设备,世界上那么多设备,⼜该如何找到对⽅呢?因此,⽹络层需要有区分设备的编号。
我们⼀般⽤ IP 地址给设备进⾏编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段,每段是 8 位。只有⼀个单纯的 IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道⼀个⼀个去匹配?这显然不科学。

​ 因此,需要将 IP 地址分成两种意义:

  • ⼀个是⽹络号,负责标识该 IP 地址是属于哪个⼦⽹的;
  • ⼀个是主机号,负责标识同⼀⼦⽹下的不同主机;

怎么分的呢?这需要配合⼦⽹掩码才能算出 IP 地址 的⽹络号和主机号。那么在寻址的过程中,先匹配到相同的⽹络号,才会去找对应的主机。
​ 除了寻址能⼒,IP 协议还有另⼀个重要的能⼒就是路由 。实际场景中,两台设备并不是⽤⼀条⽹线连接起来的,⽽是通过很多⽹关、路由器、交换机等众多⽹络设备连接起来的,那么就会形成很多条⽹络的路径,因此当数据包到达⼀个⽹络节点,就需要通过算法决定下⼀步⾛哪条路径。
所以,IP 协议的寻址作⽤是告诉我们去往下⼀个⽬的地该朝哪个⽅向⾛,路由则是根据「下⼀个⽬的地」选择路径。寻址更像在导航,路由更像在操作⽅向盘。

数据链路层

​ 实际场景中,⽹络并不是⼀个整体,⽐如你家和我家就不属于⼀个⽹络,所以数据不仅可以在同⼀个⽹络中设备间进⾏传输,也可以跨⽹络进⾏传输。
​ ⼀旦数据需要跨⽹络传输,就需要有⼀个设备同时在两个⽹络当中,这个设备⼀般是路由器,路由器可以通过路由表计算出下⼀个要去的 IP 地址。
那问题来了,路由器怎么知道这个 IP 地址是哪个设备的呢?
​ 于是,就需要有⼀个专⻔的层来标识⽹络中的设备,让数据在⼀个链路中传输,这就是数据链路层(Data Link Layer),它主要为⽹络层提供链路级别传输的服务。

在这里插入图片描述

​ 每⼀台设备的⽹卡都会有⼀个 **MAC 地址,它就是⽤来唯⼀标识设备的。**路由器计算出了下⼀个⽬的地 IP 地址,再通过 ARP 协议找到该⽬的地的 MAC 地址,这样就知道这个 IP 地址是哪个设备的了。

物理层

​ 当数据准备要从设备发送到⽹络时,需要把数据包转换成电信号,让其可以在物理介质中传输,这⼀层就是物理层(Physical Layer),它主要是为数据链路层提供⼆进制传输的服务。

在这里插入图片描述

总结:TCP/IP模型

  • 应用层

    专注于为⽤户提供应⽤功能,不关⼼数据是如何传输的

  • 传输层

    应⽤层的数据包会传给传输层,传输层(Transport Layer)是为应⽤层提供⽹络⽀持的。

  • 网络层

    ⽹络层负责将数据从⼀个设备传输到另⼀个设备。

    世界上那么多设备,⼜该如何找到对⽅呢?

    因此,⽹络层需要有区分设备的编号。我们⼀般⽤ IP 地址给设备进⾏编号

    怎么分的呢?这需要配合⼦⽹掩码才能算出 IP 地址 的⽹络号和主机号

    那么在寻址的过程中,先匹配到相同的⽹络号,才会去找对应的主机。

    所以,IP 协议的寻址作⽤是告诉我们去往下⼀个⽬的地该朝哪个⽅向⾛,路由则是根据「下⼀个⽬的地」选择路径。寻址更像在导航,路由更像在操作⽅向盘。

  • 数据链路层

    专门来标识⽹络中的设备,让数据在⼀个链路中传输,这就是数据链路层(Data Link Layer),它主要为⽹络层提供链路级别传输的服务。

  • 物理层

    当数据准备要从设备发送到⽹络时,需要把数据包转换成电信号,让其可以在物理介质中传输,这⼀层就是物理层(Physical Layer),它主要是为数据链路层提供⼆进制传输的服务。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值