1.TCP/IP网络模型

1.四层TCP/IP网络模型

1.1 为什么要有TCP/IP网络模型

  对于同一设备间的进程通信,可以通过管道、消息队列、共享内存、信号等方式进行通信;在Java中的线程通信中,可以使用管道流(字节流(PipedInputStream、PipedInputStream)、字符流(PipedReader、PipedWriter))、共享内存(volatitle)、消息传递(wait/notify,join)等方式进行通信。对于不同设备商的进程间通信需要网络通信,而设备多样化,因此为兼容多样化设备,就协商出一套通用网络协议进行不同设备间的进程间通信。网络协议是分层结构的,每一层都有其各自的作用和职责。

1.2 应用层

  TCP/IP网络模型中最上层的网络就是应用层(Application Layer),我们电脑或手机使用的应用软件九十九与应用层实现的。当两个不同设备的应用进行通信时,应用层把应用层数据传输给下一层的传输层应用层只需要专注于为用户提供应用功能,即HTTP、FTP、TELNET、DNS、SMTP等协议

  应用层不需要关注数据如何传输。应用层工作在操作系统的用户态,传输层及以下网络层工作在操作系统的内核态

1.3 传输层

  在传输层中有两个传输协议,分别是面向连接的可靠性协议TCP协议和无连接的不可靠协议UDP协议。TCP(传输控制协议(Transmission Controller Protocol))帮助很多应用层传输信息,如HTTP。TCP相对于UDP多了流量控制、超时重传、拥塞控制等特性,这些都是为了保证数据包可靠地传输给其他应用。UDP相对于TCP更加简捷,它只负责发送数据包,不保证数据包是否能抵达其他应用,但它相对与TCP实时性更好,传输效率也更高。其实UDP结合HTTP/3的QUIC协议也可以实现可靠传输,只不过现在还没有研究出好的方案。

  当应用传输的数据非常大时,直接传输不好控制。当传输层的数据大小超过MSS(TCP最大报文段长度),就要将数据分段。分段后,及时一个分块丢失或损坏,只需要重新发送这一个分块即可,而不需要发送整个数据包。在TCP协议中,我们把每个分块称为一个TCPP段(TCP Segment)。结构如下图所示:

   当设备作为接收方时,传输层负责将数据包传给应用,但一台设备可能会有多个应用在接收或传输数据,因此需要端口来区分应用层。由于传输层的报文会携带端口号,因此接收方可以通过传输层的端口识别出报文发送给哪个应用。

 1.4 网络层

  每一层网络模型都有各自的任务和功能,传输层只需要服务好应用层即可。而网络层的职责就是作为应用层的数据传输媒介,实现应用到应用的通信,真正实现传输功能。

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

   网络层负责将数据从一个设备传输到另一个设备,那它是如何找到它送往的设备呢?因此网络层需要区分设备编号。

  一般使用IP地址给设备进行编号,对于IPV4协议,IP协议供32位,分成四段(如192.168.100.1),每段8位。只有一个单纯的IP地址只能做到区分设备,但是寻址麻烦。因此需要将IP地址分成两个部分:

  • 一个是网络号:标识IP地址属于哪个[子网]
  • 一个是主机号:标识统一[子网]下的不同主机

如何区分呢?我们需要子网掩码和目标IP地址才能计算出源IP地址的网络号和主机号。首先将目标IP地址与子网掩码按位与运算得到网络号,再将目标IP地址与取反的子网掩码按位与运算得到源IP地址的主机号。

  在寻址过程中,先匹配到相同的网络号(即先找到同一子网),才会去找对应的主机。IP协议另一个功能是路由,实际数据传输过程中,设备是通过很多网关、路由器、交换机等网络设备以及网线连接起来的。因此数据包到达一个网络节点,就需要通过路由算法决定下一步走哪条路径。路由器寻址过程中,需要找到目标地址子网,找到后进而把数据转发给对应的网络。

   IP协议寻址作用是告诉我们数据包去往下一个目的地该朝那个方向走;路由是根据[下一个目的地]选择路径。寻址更像导航,路由就是按照出发路线到达。

 1.5 网络接口层

  在数据包头部加上IP头部后,接下来交给网络接口层,在其头部加上MAC头部,并封装成数据帧发送到网络上。数据传输流程如下:

  Ip头部中的接收方IP地址表示网络包的目的地,通过该地址判断包发往哪里,但在以太网中,该思路行不通。电脑上的以太网接口、WIFI接口,以太网交换机、路由器上的千兆、万兆以太网口还有网线组成以太网以太网一种在[局域网]内,将设备连接起来,使它们之间通讯的技术

  以太网判断网络包目的地时与IP方式不同,而MAC头部采用相匹配的方式在以太网中将包发往目的地,所以以太网进行通讯要用到MAC地址MAC头部是以太网使用的头部,包含接收方和发送方的MAC地址信息。我们通过ARP协议获取对方MAC地址

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

2.参考博客

  本人博客内容是基于小林coding的计算机网络写的,中间省略了部分内容,大家可以去小林coding博客看更详细的图解网络,链接为:小林coding (xiaolincoding.com)

posted @   求知律己  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示