TCP/IP上三层协议

news/2024/11/15 19:27:01/文章来源:https://www.cnblogs.com/coder-jjidm/p/18548530

TCP/IP上三层的角色

同一台设备上的进程间通信有多种方式,如管道、消息队列、共享内存、信号等。而不同设备间的进程通信需要网络通信,由于设备具有多样性,因此协商出了一套通用的网络协议。这个网络协议是分层的,每一层都有各自的作用和职责,接下来将依据 “TCP/IP 网络模型” 对每一层进行介绍。

应用层(对接程序)

是最上层的协议,用户能够直接接触到的就是应用层,我们手机的软件等等都是在这一层实现的,需要通信时把数据传给下一层传输层,所以本层主要针对为用户提供应用的功能,而不关心数据在互联网之中是如何传输的。

应用层主要工作在操作系统中的用户态,而传输层以及一下在内核态工作。

传输层(为应用层提供网络支持)

传输层有两种传输协议:TCP 和 UDP。

TCP,即传输控制协议 (Transmission Control Protocol),很多应用都采用 TCP 作为传输层协议,比如 HTTP 应用层协议。TCP 比 UDP 具备更多功能,包括流量控制、超时重传和拥塞控制等,这些功能保障了数据包能够可靠地传递到对方。

UDP 较为简单,它只负责发送数据包,不确保数据包能到达接收方。不过,UDP 的实时性和传输效率比较高。虽然 UDP 也可以实现可靠传输,但需要在应用层上实现类似 TCP 的特性,而开发一个商业可用的可靠 UDP 传输协议并不容易。

当应用程序需要传输的数据量很大时,直接传输难以管控。当传输层的数据包大小超过 MSS(TCP 最大报文段长度)时,数据包需要进行分块。这样,如果在传输过程中有一个分块丢失或损坏,只需要重新发送该分块,而不必重发整个数据包。在 TCP 协议中,这些分块被称为 TCP 段 (TCP Segment)。

当设备作为接收方时,传输层需要把数据包传递给相应的应用。但一台设备上可能有多个应用在接收或传输数据,所以需要用一个编号来区分不同的应用,这个编号就是端口。

例如,80 端口通常用于 Web 服务器,22 端口通常用于远程登录服务器。对于浏览器(客户端)中的每个标签页,它们都是独立的进程,操作系统会为这些进程分配临时的端口号。

因为传输层的报文中会包含端口号,所以接收方能够识别出该报文是发送给哪个应用的。

网络层

刚接触传输层时,人们可能会以为它负责将数据从一个设备传输到另一个设备,但实际上并非如此。在实际的网络环境中,网络环节错综复杂,存在着各种各样的线路和分叉路口,若要将一个设备的数据传输给另一个设备,就需要在众多路径和节点中进行选择。而传输层的设计理念是简单、高效和专注,若让传输层负责这一功能,就违背了其设计原则。

也就是说,我们不希望传输层协议处理过多事务,它只需服务好应用,作为应用间数据传输的媒介,实现应用到应用的通信即可,实际的传输功能应由下一层 —— 网络层来负责。

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

首先,网络层的主要功能是将数据从一个设备传输到另一个设备。在庞大的网络环境中,设备众多,因此需要通过 IP 地址来区分和标识设备。

对于 IPv4 协议,IP 地址由 32 位组成,分成四段(例如 192.168.100.1),每段 8 位。单一的 IP 地址虽然可以标识设备,但在查找设备时效率很低,因此 IP 地址被分成两种意义:网络号和主机号。

  1. 网络号:标识 IP 地址属于哪个子网。
  2. 主机号:标识同一子网下的不同主机。

子网掩码用于区分 IP 地址中的网络号和主机号。例如,子网掩码 255.255.255.0 与 IP 地址 10.100.122.2 进行按位与运算,可以得到网络号 10.100.122.0,路由器根据 IP 址的网络号进行转发,帮助数据包找到目标地址的子网,并将数据包转发到相应的网络内。

网络接口层(Link Layer)在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上。

引用 ~~小林coding

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834193.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无线部分

AC堆叠(VAC) 配置两台AC设备,使用虚拟化方案组合成1台虚拟AC。 AC1和AC2之间的G 0/3-4端口作为虚拟交换链路。配置AC1为主,AC2为备。主设备 description为AC1,备用设备description为AC2。 AC1 virtual-ac domain 100device 1 device 1 priority 200 device 1 description …

DHCP欺骗

DHCP 欺骗原理DHCP 协议(Dynamic Host Configuration Protocol) 动态主机配置协议:主要给客户机提供 TCP/IP 参数,包括:IP 地址、子网掩码、网关、DNS、租期工作原理应用层协议,基于UDP 主机向服务器 67 号端口发送 DHCP 请求 服务器响应给客户机的 68号端口配置设置DHCP 服…

Redis运行的时候碰到# Creating Server TCP listening socket *:6379: bind: No error

Redis运行的时候碰到# Creating Server TCP listening socket *:6379: bind: No error 解决方案: 1、启动redis客户端:redis-cli.exe。 2、执行关闭命令:输入shutdown3、执行退出命令:exit4、重新启动Redis输入:redis-server.exe redis.windows.conf

https实验

https 实验原理httphttps https = http + SSL/TLS •SSL: Secure Socket Layer 安全套接层 •TLS: Transport Layer Security 传输层安全协议加密方式:PKI(公钥基础设施)使用公钥技术和数字签名来保证信息安全由公钥密码算法、数字证书(Certificate)、CA(Certificate Aut…

手把手教你搭建OpenScenario交通场景(上)

经纬恒润动力学仿真软件ModelBase基于OpenScenario1.0标准,开发内嵌了场景编辑器,可用于对仿真测试过程中的车辆行驶道路模型之外,继续进行周边动态场景的搭建。 OpenScenario是一种专为自动驾驶系统仿真测试设计的场景描述语言,它基于XML格式,旨在提供一个标准化、…

动态规划题单2

第一个题单编辑到后面实在是太卡了,就新开了一个,以后应该也会 \(30\) 题为一个题单。 31.CF1580D Subsequence CF1580D Subsequence 不会笛卡尔树,但是看到题解区的妙妙解法...... 题目的式子非常大便,我们考虑把它翻译成人话: 一个子序列的价值为: \(sum*m - 每两个数及他…

java 反序列化 cc7 复现

java 反序列化 cc7 复现复现环境:common-collections版本<=3.2.1,java版本随意.cc7就是cc6换了一个出口,整体的逻辑没有太大的变化.在Lazymap之前的还那样,我们从如何触发Lazymap的get方法开始看起. AbstractMap 看他的equals方法 public boolean equals(Object o) { if (o…

告别Print,使用IceCream进行高效的Python调试

在Python开发实践中,调试是一个不可或缺的环节。如果采用print()语句来追踪程序执行流程,可能会遇到一个持续出现的异常情况,并且经过多次代码审查问题的根源仍然难以确定,这可能是因为随着终端输出信息的不断增加,这种调试方式的局限性逐渐显现。本文将介绍IceCream库,这…

浏览器

控制台 查看继承的样式 Inherited(继承) from xxx: 继承样式来自于xxx <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><title>Document</title><style>.font {font-size: 12px;}.font2 {fon…

团队项目Scrum冲刺-day5

一、每天举行站立式会议 站立式会议照片一张昨天已完成的工作成员 任务陈国金 判题机架构设计凌枫 整合代码编辑器陈卓恒 更新题目界面部分完成谭立业 浏览题目页面部分完成廖俊龙 接口测试曾平凡 前端页面测试曾俊涛 判题服务薛秋昊 判题服务今天计划完成的工作成员 任务陈国金…

js原型链污染

js原型链污染 原理介绍 对于语句:object[a][b] = value 如果可以控制a、b、value的值,将a设置为__proto__,我们就可以给object对象的原型设置一个b属性,值为value。这样所有继承object对象原型的实例对象在本身不拥有b属性的情况下,都会拥有b属性,且值为value。 可以通过…

基于米尔NXP i.MX93开发板OpenCV的相机捕捉视频进行人脸检测

本篇测评由优秀测评者“eefocus_3914144”提供。 本文将介绍基于米尔电子MYD-LMX93开发板(米尔基于NXP i.MX93开发板)的基于OpenCV的人脸检测方案测试。 OpenCV提供了一个非常简单的接口,用于相机捕捉一个视频(我用的电脑内置摄像头)1、安装python3-opencvapt install pyth…