Linux系统编程:揭秘网络通信 IP与端口号的奥秘

目录

网络通信

IP地址

作用

组成:网络号+主机号

表示方式

IP地址分类

​编辑

注意

子网掩码

获得网络号

[获得主机号 ip & 子网掩码的反码](#获得主机号 ip & 子网掩码的反码)

网关

DHCP

[DNS服务器(Domain Name Server)](#DNS服务器(Domain Name Server))

端口号

分类

OSI

1.物理层

2.数据链路层

3.网络层(路由器)

4.传输层

5.会话层

6.表示层

7.应用层

编程

编程接口

[TCP(transmission control protocol)传输控制协议](#TCP(transmission control protocol)传输控制协议)

[UDP(user datagram protocol)用户数据报协议](#UDP(user datagram protocol)用户数据报协议)

网络编程模型

tcp网络编程

socket函数

功能

参数

返回值


网络通信

网络:解决不同主机间进程的通信

实现网络通信

1、物理通路

2G、光纤、5G、4G、星链

2、逻辑通路---------软件层面

OSI:open system interconnect(开放的互联模型)

3、想要实现网络中的进程间通信

  • 在网络中找到那台电脑(主机):ip地址
  • 找到电脑上对应的进程:端口号

唯一的一个确定的进程 = ip + 端口号

IP地址

作用

  • 用于标识网络中的一台主机

组成:网络号+主机号

网络号:标识属于哪一个网络

主机号:标识该网络中某一台主机

表示方式

IP地址的本质:实际上是一个32位的数值

点分十进制 :【0~255】.【0~255】.【0~255】.【0~255】

IP地址分类

|-----------------|-----------------------------|-------------------|
| A 类 [0,127] | 0.0.0.0 - 127.255.255.255 | 它们之前相差 2 的 7 次方-1 |
| B 类 [128,191] | 128.0.0.0 - 191.255.255.255 | 它们之前相差 2 的 6 次方-1 |
| C 类 [192,223] | 192.0.0.0 - 223.255.255.255 | 它们之前相差 2 的 5 次方-1 |
| D 类 [224,239] | 224.0.0.0 - 239.255.255.255 | 它们之前相差 2 的 4 次方-1 |
| E 类 保留 | | |
| IPv6:128位 | | |

注意

所有的网络都必须扣除两个保留地址:"0"为网络号,"255"为广播,"1-254"分配给主机使用

  • 127.0.0.0:网络号
  • 127.255.255.255:广播号

子网掩码

ifconfig:查看网络配置

子网掩码是一个 32 位地址,是与 IP 地址结合使用的一种技术。它的主要作用有两个, 一是用于屏蔽 IP 地址的一部分以区别网络标识和主机标识。二是用于将一个大的 IP 网络划分为若干小的子网络。

获得网络号

获得主机号 ip & 子网掩码的反码

网关

大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道"关口",这道关口就是网关。顾名思义,网关(Gateway) 就是一个网络连接到另一个网络的"关口"。也就是网络关卡。网关实质上是一个网络通向其他网络的 IP 地址。

默认网关一般填写 192.168.x.1 或者 192.168.x.254

DHCP

  • 动态主机设置协议(DynamicHostConfigurationProtocol,DHCP)

是一个局域网的网络协议,它会自动检测我们当前未使用的 IP 地址,从而给我们新的主机来动态分配 IP 地址。

DNS服务器(Domain Name Server)

我们平时上网的时候,输入的网址是什么样的呢?例如:www.baidu.com,我们前面说我们进行通讯的都是通过我们的 IP 地址来的,这里英文字母是什么东西?这里就说到我们的 DNS 服务器了。在我们的实际生活中,我们发现,我们通过点分十进制的 IP 地址也不是很方便,尤其是在大规模的网络环境中,很容易就就记混淆了。因此,就有了我们的 DNS 服务器,它是把我们人类便于理解的单词和名字转化成我们相应的IP 地址。它的作用就是解析我们的域名。

端口号

用来表示一个进程,16位的数据

分类

  • 1~1023:知名端口号(http:80端口)
  • 1024~50000:系统申请的端口
  • >=50000:系统动态分配

理论模型(a)有非常大的参考机制,真正实现的是TCP/IP协议。

OSI

1.物理层

  • 主要定义物理设备标准,如:网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
  • 这一层的数据叫做"比特"(bit)。
  • 主要作用是传输****比特流,就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换。

2.数据链路层

  • 定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。
  • 这一层通常还提供错误检测和纠正,以确保数据的可靠传输。

如:串口通信中使用到的115200、8、N、1

  • 这一层传输 的数据是帧数据(按到一定格式组织起来的一组数据)

3.网络层(路由器)

  • 在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。
  • Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。

如:常见的路由器,就是这在一层工作。

路由 --- 选择路径?

  • 这一层传递的数据:数据段(包)

4.传输层

  • 定义了一些传输数据的协议和端口号(Www端口80等),
  • (传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),

UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。

  • 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。如:TCP
  • 传输的是****数据段
  • 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。

5.会话层

通过浏览器和爱奇艺服务器,建立了一个会话

6.表示层

加密,解密就是对数据进行的表示

7.应用层

最靠近用户层的

真正实现的是TCP/IP协议,这么多层次发挥功能靠的是协议--------通信协议

每一层的功能,都是其对应的协议来完成功能的

编程

linux内核:用户空间+内核空间

编程接口

socket:套接字

  • 在linux中被当做一种特殊性的文件,操作时当做文件来看(来使用)获得对应的fd---描述符(字)
  • socket本身也是函数接口,通过该函数接口,

编程

基于传输层协议学习

TCP(transmission control protocol)传输控制协议

Q:为什么是三次握手?不是四次五次?

UDP(user datagram protocol)用户数据报协议

优势:因为不需要连接,所以它效率高、实时性好

网络编程模型

tcp网络编程

模型

  • cs:client --- server
  • bs:browser -- server
  • p2p:peer to peer(点对点)

socket函数

#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>

int socket(int domain, int type, int protocol);

功能

  • 创建通信的一端

参数

  • @damain:通信范围,AF_UNIX:本地通信;AF_INET:IPv4;AF_INET6:IPv6
  • @type:socket的类型

sock_stream:流式套接字 sock_dgram:用户数据报

  • protocol:协议,表示前面类型对应的具体协议,填0表示走默认协议

sock_stream:默认走的协议是TCP

sock_dgram:默认走的协议是UDP

返回值

  • 成功返回 socket对应的文件描述符
  • 失败返回 -1而且errno被设置

eg:基于tcp协议的socket

int fd = socket(AF_INET,SOCK_STREAM,0);

相关推荐
津津有味道1 小时前
易语言数据报UDP通讯接收RFID网络读卡器获取卡号驱动设备播报TTS语音
网络·udp·rfid·读卡器·易语言·数据报
爱倒腾的老唐1 小时前
02、STM32——嵌入式芯片
linux·stm32·嵌入式硬件
战族狼魂2 小时前
基于SpringBoot+Vue的基因调控网络推断系统
网络·vue.js·spring boot
AryShaw2 小时前
macOS 上搭建 RK3568 交叉编译环境
linux·macos
芒果披萨2 小时前
Linux文件类基础命令行1
linux·运维·服务器
学嵌入式的小杨同学2 小时前
STM32 进阶封神之路(八):外部中断 EXTI 实战 —— 按键检测从轮询到中断(库函数 + 寄存器双版本)
linux·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
bubiyoushang8882 小时前
OFDM系统信道估计MATLAB实现(LS、MMSE、DCT、LRMMSE方法)
开发语言·网络·matlab
lang201509282 小时前
Logback 过滤器深度指南:从“三值逻辑”到高性能拦截
java·网络·logback
嘿嘿潶黑黑2 小时前
Windows 下网络硬盘预览不可显示的问题解决
网络