一篇文章弄懂TCP/IP网络模型

TCP/IP网络模型由上到下分为4层:应用层,传输层,网络层,网络接口层

应用层

        位于模型中最上层,我们的电脑手机使用的应用软件都是在应用层实现,所以应用层只专注于为用户提供应用功能,如:HTTP,FTP,DNS等

        应用层不关心数据是如何传输的,也因为应用层是关注于给用户提供应用功能,所以他工作在操作系统中的用户态。

传输层

        应用层的数据包会传给传输层,以便传输层为应用层提供网络支持。在传输层中有两个大名鼎鼎的传输协议:TCPUDP       

        TCP:名叫传输控制协议,大部分应用使用的就是TCP传输层协议,比如HTTP应用层协议。TCP相比UDP多了很多特性,比如流量控制,超时重传,拥塞控制等,这些特性为保证数据包传输的可靠性。

        UDP:相对于TCP来说更简单,他只负责发送数据包,并不保证数据包能否抵达对方,这也意味着它不需要复杂的操作保证了他的实时性,传输效率强于TCP,但并不可靠。如果想要通过UDP实现可靠的数据传输,可以让TCP的特性在应用层中实现。

        在应用需要传输的数据包超过MSS(TCP最大报文长度)时,就需要对数据包进行分块操作,这样在传输过程中有某个分块丢失或损坏,只需要重新发送这一个分块用来减少传输开销,在TCP协议中我们把每一个分块称为TCP段

        当设备作为接收方时,传输层则负责把数据包传给应用,而一台设备随时都会有很多应用在接受或者传输数据,因此需要用一个编号将应用区分开,这个编号就被称为端口

        而对于浏览器(客户端)中的每一个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号。

        由于传输层的报文中会携带端口号, 因此接收方可以识别出该报文是发送给哪一个应用。

在实际场景中网络环节是很复杂的,中间会有很多线路和分岔路口,如果一个设备的数据要传输给另一个设备,就需要在各种各样的路径和节点进行选择,而这也就违背了传输层简单高效的设计理念,也就是说我们不希望传输层处理太多的事,只需要服务好应用,让其作为应用层间数据传输的媒介,帮助实现应用到应用通信,而实际的传输功能就交给下一层,也就是网络层

网络层

        网络层最常用的是IP协议,IP协议会将传输层的报文作为数据部分,再加上IP包头组装成IP报文,如果IP报文大小超过MTU(以太网中一般为1500个字节)就会再次进行分片,得到一个即将发送网络的IP报文。

        在网络层负责将一个设备的数据传输到另一个设备时,就面临着和传输层传输数据给应用的同一个问题:世界上那么多设备如何找到目标设备呢?因此,网络层需要有区别设备的编号。

        我们一般使用IP地址给设备进行编号,对于IPv4协议,IP地址共32位,分为了四段(如:192.168.100.1),每段是8位,只有一个单纯的IP地址虽然做到了区分设备的目的,但是寻址就会显得非常麻烦,我们不可能把世界上的所有设备一个一个的去匹配。

        因此IP地址分为两种意义:

  •                 一个是网络号,封装额辨识该IP地址属于哪个子网。
  •                 一个是主机号,负责标识同一子网下不同的主机。

那么新的问题又出现了:如何区分网络号和主机号呢?这个时候需要一个子网掩码才能够算出来。

        比如:10.100.122.0/24,后面的/24表示的就是255.255.255.0的子网掩码,255.255.255.0二进制是(11111111-11111111-11111111-00000000)显而易见的其二进制码有24个1,这是为了简化子网掩码的表示,用/24替代255.255.255.0

那么我们已经知道了子网掩码,如何计算出网络地址和主机地址呢?

       将10.100.122.2和255.255.255.0进行按位运算,就可以得到网络号,而将255.255.255.0取反之后与IP地址进行按位与运算就能得到主机号。

IP协议还有一个重要的能力就是路由,大多数时候,两台设备并不是用一条网线连接起来的,而是通过很多网关,路由器,交换机等网络设备连接起来的,那么久iu会形成很多网络路径,因此当数据包到达一个网络节点,就需要通过路由算法决定下一步的路径。

路由器寻址工作中,就是要找到目标地址的子网,找到后进而把数据包转发给对应的网络内。

所以IP协议的寻址作用是告诉我们去往下一个目的地该朝哪一个方向走,路由则是根据下一个目的地选择路径,寻址更像在导航,路由更像在操作方向盘

网络接口层

        生成了IP头部之后,接下来要交给网络接口层在IP头部的前面加上MAC头部,并封装成数据帧发送到网络上,MAC头部是以太网使用的头部,它包含了接收方和发送方的MAC地址等信息,我们可以通过ARP协议获取对方的MAC地址。

        所以网络接口层主要为网络层提供链路级传输的服务,负责在以太网,sfif这样的底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来标识网络上的设备。

数据在各层的封装格式:

        网络接口层的传输单位是帧,IP层是包,TCP层是段,HTTP的传输单位则是消息或者报文。统称为数据包。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值