TCP/IP传输协议,易懂!!!

embedded/2024/10/18 21:14:30/

文章目录

  • 1.TCP/IP协议族体系
    • 1.1 简介
    • 1.2 各层细讲
      • 1.2.1 应用层
      • 1.2.2 传输层
      • 1.2.3 网络
      • 1.2.4 网络接口和物理层
  • 2.网络IP和端口的处理函数
    • 2.1 端口处理函数
      • 2.1.1 端口号
      • 2.1.2 字节序
      • 2.1.3 处理函数
    • 2.2 IP处理函数
      • 2.2.1 inet_aton函数
      • 2.2.2 inet_addr函数
      • 2.2.3 inet_ntoa函数
      • 2.2.4 inet_pton函数
      • 2.2.5 函数
  • 3. ifconfig
    • 3.1 ens33(Linux中网络接口)
    • 3.2 lo(回路接口)

摘要:TCP/IP协议族体系每层详解,ifconfig网络接口和回环接口信息解释。
关键词:TCP/IP协议,ifcongfig。

1.TCP/IP协议族体系

1.1 简介

1.TCP/IP协议是Internet工业级标准协议,参考于OSI(Open System Interconnect)网络体系结构。
2.用来检测网络传输中差错的传输控制协议TCP。
3.专门负责对不同网络进行互联的互联网协议IP。
4.网络体系结构将不同的任务属性,封装成不同的层,就像库一样更新之后只要对上下层的接口和处理数据的方式不改变对其他层影响不大,每一层都是对上层透明。
在这里插入图片描述

这里推荐一篇超牛的文章,对TCP/IP的理解非常有意义,详细的从网络的由来开讲,非常好。
一文讲透TCP/IP协议 | 图解+秒懂+史上最全

1.2 各层细讲

通俗一讲,服务器,干嘛的–提供服务。我们就是顾客,网络协议>网络协议就如同解决如何将我们向服务员点的菜放到我们桌前。TCP/IP协议,根据任务属性封装为四层,应用层就是接收我们的请求,传输层是处理我们对菜的要求。网络层就是服务员要将菜如何高效的传递给我们,网络接口和物理层就是通过哪些介质传输到我们手上。真正负责传输数据任务的只有网络接口和物理层。

1.2.1 应用层

直接面向用户,对用户提供服务。任务:用户交互(获取用户请求,提供相应的服务),数据表示(将网络传输数据可视化,比如文本、图像)。

不同用户程序之间的的通信规则和数据格式,不同用户程序执行不同的功能,为了提升数据处理和通信的效率,数据格式和通信规则都会不同。

1.2.2 传输层

根据数据的准确性、实时性和网络传输特性,出现了两种不同的协议。传输控制协议(TCP)和用户数据报协议(UDP)。假如说后面出现一种更好的数据传输协议,只要对应应用层和网络层的接口正确,对其他层的影响不大,这就是封装的好处。

1.TCP(Transmission Control protocol)
优点:面向连接的协议,严格的协议要求,数据点对点稳定传输,数据不丢失,数据不乱序。
缺点:传输要求高,传输速度慢。
适用场景:数据质量要求高,MSN/QQ等即时通讯软件的用户登录账号管理相关的功能。
2.UDP(User Datagram protocol)
优点:数据传输快,可以一对一、一对多、多对一。
缺点:数据不稳定,只管丢,不管是否接收。
适用场景:数据实时性要求高,MSN/QQ/Skype等即时通讯软件的点对点文本通讯,直播、视频电话等。
3.SCTP:(Stream Control Transmission Protocol:流控制传输协议)
TCP的增强版,他能实现多主机,多链路的通信。

1.2.3 网络

端到端的传输,使用 IP 地址进行逻辑寻址,给数据选择一条传输最优路径(通过算法)。

1.IP地址
IP协议:Internet protocol(分为IPv4和IPv6),由于 IPv4 地址资源有限,IPv6 被提出以解决地址短缺问题。
IPv4 地址
由 32 位二进制数组成,通常以点分十进制表示。例如,192.168.1.1。
其分配主要由五大区域性互联网注册管理机构(RIR)负责,包括非洲网络信息中心(AFRINIC)、北美网络信息中心(ARIN)、亚太互联网络信息中心(APNIC)、拉丁美洲及加勒比地区互联网地址注册管理机构(LACNIC)和欧洲 IP 网络资源协调中心(RIPE NCC)。这些机构根据全球的需求和政策,将 IP 地址分配给各个国家和地区的互联网服务提供商(ISP)、企业、组织和个人。
IPv6 地址
由 128 位二进制数组成,通常以冒号分隔的十六进制表示。例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334。
IPv6 地址的分配也由 IANA 开始,逐步分配给各大 RIR,再由 RIR 分配给下级的 ISP 和其他机构。

2.ICMP:Internet控制管理协议,IP 协议的辅助协议,它用于在 IP 网络中传递控制消息和错误报告。Ping 命令属于ICMP(Ping命令是一个网络诊断工具)。
3.IGMP:Internet分组管理协议,广播和组播,用于在 IP 网络中管理多播组。多播是一种将数据包发送给一组特定设备的通信方式,例如在视频会议、在线直播等应用中,多个接收者可以同时接收相同的视频流。

1.2.4 网络接口和物理层

负责数据的传输,数据链路层使用 MAC 地址进行物理寻址。

1.网络接口
MAC地址
mac地址:48位全球唯一,是由网络设备制造商在生产设备时烧录到设备的网络接口芯片中的,具有全球唯一性,网络设备的身份标识。
ARP:地址解析协议,IP地址找到mac地址
RARP:mac地址–找到IP地址
PPP协议:拨号协议(GPRS/3G/4G)
2.物理层
物理层是计算机网络体系结构中的最底层,它负责在物理介质上传输原始的比特流。物理层的主要作用是定义了网络设备之间的物理连接、电气特性、信号传输方式等,为数据链路层提供物理基础。

2.网络IP和端口的处理函数

IP主机的地址号,端口设备内应用程序编号。

2.1 端口处理函数

2.1.1 端口号

16位数字,1-65535;
为了区分一台主机接收到的数据包应该转交给哪个任务进程处理,使用端口号来区别;
预留端口,1-1023(FTP:24, SSH:22, HTTP: 80 ,HTTPS :469);
保留端口:1024-5000(不建议使用);
可以使用的端口: 5000~65535;
TCP端口号于UDP端口号独立;
网络里的通信是由 IP地址+端口号 来决定的。

2.1.2 字节序

字节序是指不同的CPU访问内存中的多字节数据时候,存在大小端的问题;
如果CPU访问的是字符串,则不存在大小端问题;
一般来说X86/ARM : 小端模式;
power/miop:arm作为路由时,大端模式;
网络传输的时候采用大端模式。

把给定系统所采用的字节序称为主机字节序,为了避免不同类别主机之间在数据交换时由于对于字节序的不同而导致的差错,引入了网络字节序。

2.1.3 处理函数

主机字节序和网络字节序相互转换。

2.1.3.1 主机转为网络
u_long htonl(u_long hostlong);u_short htons(u_short short);
2.1.3.2 网络转为主机
u_long ntohl(u_long hostlong);u_short ntohs(u_short short);

2.2 IP处理函数

区分IPV4和IPV6
主机IP和网络IP的相互转换

2.2.1 inet_aton函数

将strptr所指的字符串转换成32位的网络字节序二进制值

int inet_aton(const char *cp, struct in_addr *inp);
1.cp:要转换的主机IP(IPV4)
2.inp:指针指向转换后的IP

2.2.2 inet_addr函数

和上函数功能一样

1.in_addr_t inet_addr(const char *cp);
2.cp:要转换的主机IP(IPV4)

2.2.3 inet_ntoa函数

将32位网络字节序二进制地址转换成点分十进制的字符串

char *inet_ntoa(struct in_addr in);
1.in:网络IP地址

2.2.4 inet_pton函数

将IPV4/IPV6 的地址转换成binary格式

int inet_pton(int af, const char* src ,void* dst)
使用于IPV4/IPV6
能正确处理255.255.255.255的转换问题
参数:
1.地址协议族(AF_INET或AF_INET6)
2.src:是一个指针(填写分点形式的IP地址(主要指IPV4))
dst:转换的结果给到dst

2.2.5 函数

把ipv4和ipv6的网络字节序变成本地的字符串形式的IP地址

inet_ntop(int af,const void *src,char *dst,socklen_t size)
1.af:地址协议族(AF_INET或AF_INET6)
2.src:是一个指针(323.dst:输出结果为32位点分形式的IP地址
4.size:长度

3. ifconfig

终端中ifconfig输出内容
在这里插入图片描述

3.1 ens33(Linux中网络接口)

1.flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500:

“UP” 表示该网络接口已启用。
“BROADCAST” 表示该接口支持广播。
“RUNNING” 表示接口正在运行。
“MULTICAST” 表示支持多播。
“mtu 1500”:最大传输单元为 1500 字节。

2.“inet 192.168.119.151 netmask 255.255.255.0 broadcast 192.168.119.255”:

“inet” 后的 IP 地址为 192.168.119.151,这是该网络接口在当前网络中的地址。
“netmask” 表示子网掩码为 255.255.255.0,用于确定该网络的范围。
“broadcast” 后的地址是该网络的广播地址,当向这个地址发送数据包时,网络中的所有设备都能接收到。

3.“inet6 fe80::f18f:39b:e50d:f727 prefixlen 64 scopeid 0x20”:

这是该接口的 IPv6 链路本地地址,前缀长度为 64,“scopeid 0x20” 表示其作用范围为本地链路。

4.“ether 00:0c:29:b1:1b:35”:

这是该网络接口的 MAC 地址,用于在局域网中唯一标识该设备。

5.“txqueuelen 1000”:

发送队列长度为 1000,表示可以在队列中缓存等待发送的数据包数量。

6.“RX packets 6861 bytes 6170796 (6.1 MB)”:

表示接收到的数据包数量为 6861 个,总字节数为 6170796 字节,约为 6.1MB。

7.“RX errors 0 dropped 0 overruns 0 frame 0”:

表示接收过程中没有错误、没有丢弃的数据包、没有溢出情况和没有帧错误。

8.“TX packets 1985 bytes 565205 (565.2 KB)”:

表示发送的数据包数量为 1985 个,总字节数为 565205 字节,约为 565.2KB。

9.“TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0”:

表示发送过程中没有错误、没有丢弃的数据包、没有溢出情况、没有载波错误和没有冲突。

3.2 lo(回路接口)

主要用于本地设备上的软件与自身进行通信测试。
1.“flags=73<UP,LOOPBACK,RUNNING>”:

表示回环接口已启用且正在运行。

2.“mtu 65536”:

回环接口的最大传输单元为 65536 字节。

3.“inet 127.0.0.1 netmask 255.0.0.0”:

回环地址为 127.0.0.1,子网掩码为 255.0.0.0。这个地址通常用于本地设备上的软件与自身进行通信测试。

4.“inet6 ::1 prefixlen 128 scopeid 0x10”:

这是 IPv6 的回环地址。

5.“loop txqueuelen 1000”:

表示这是一个回环接口,发送队列长度为 1000。

6.“RX packets 553 bytes 70488 (70.4 KB)”:

表示接收到的数据包数量和字节数。

7.“RX errors 0 dropped 0 overruns 0 frame 0”:

接收过程中没有错误等情况。

8.“TX packets 553 bytes 70488 (70.4 KB)”:

表示发送的数据包数量和字节数。

9.“TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0”:

发送过程中没有错误等情况。


http://www.ppmy.cn/embedded/128555.html

相关文章

【4.10】图搜索算法-BFS和DFS解电话号码的字母组合

一、题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "23" 输出…

UML(Unified Modeling Language,统一建模语言)

UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;是一种标准化的图形化语言&#xff0c;用于软件工程中的可视化建模。UML由Grady Booch、James Rumbaugh和Ivar Jacobson共同开发&#xff0c;他们各自的工作&#xff08;Booch方法、OMT方法和OOS…

使用 rbenv 安装 Ruby 2.7.5

如果尚未安装 rbenv&#xff0c;可以使用 Homebrew 安装它&#xff1a; brew install rbenv brew install ruby-build初始化 rbenv&#xff1a; rbenv init在终端中运行以下命令将 rbenv 添加到你的 shell 中&#xff1a; open .bash_profile复制代码到文件中 eval “$(rbenv…

elasticsearch 查询超10000,分页过大报错

查询数量过多会报&#xff1a; co.elastic.clients.elasticsearch._types.ElasticsearchException: [es/search] failed: [search_phase_execution_exception] all shards failed 解决&#xff1a; PUT knowledge/_settings { "max_result_window" : 20000000 }

CEEMDAN +组合预测模型(BiLSTM-Attention + ARIMA)

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现&#xff08;一&#xff09;EMD-CSDN博客 EMD、EEM…

服务器shell创建非root用户

在Linux服务器上创建一个非root用户是一个常见的安全实践。以下是如何在shell中创建非root用户的步骤: 愿我们终有重逢之时,而你还记得我们曾经讨论的话题。 QQ group 868373192 QQ second group 277356808 ### 1. 使用root用户登录或切换到root用户 如果你当前不是root用…

32.数据结构与算法-树表的查找-平衡二叉树的分析与调整

平衡二叉树的定义 失衡二叉排序树的分析与调整 平衡调整的四种类型 LL型调整 RR型调整 LR型调整 RL型调整 例题

Xcode报错:Undefined symbols,Linker command failed with exit code1

这种编译报错点击Xcode左侧的小红叉这两行点击没反应&#xff0c;不知道具体报错原因怎么弄&#xff1f; 解决办法&#xff1a; 第一步&#xff1a;点周Xcode左侧工具栏的编译log日志按钮 第二步&#xff1a;第一步点击完Xcode左侧出现了编译历史列表&#xff0c;可以看到有报…