【计网】深入理解网络通信:端口号、Socket编程及编程接口

目录

1.端口号

1.1.理解源 IP 地址和目的 IP 地址

1.2.认识端口号

1.3.端口号范围划分

1.4理解 "端口号" 和 "进程 ID"

2.socket编程

2.1.理解 socket

2.2.socket编程的概念

2.3. 传输层的典型代表

认识 TCP 协议

认识 UDP 协议

2.3 网络字节序

3.socket 编程接口

3.1.socket 常见 API

3.2.sockaddr结构

1.端口号

1.1.理解源 IP 地址和目的 IP 地址

IP 在网络中,用来标识主机的唯一性

我们上网,无非就是两种动作

  1. 把远处的数据拉取到本地
  2. 把我的数据发送到远端

数据传输到主机是目的吗?不是的。因为数据是给人用的。比如:聊天是人在聊天,下载是人在下载,浏览网页是人在浏览!但是人是怎么看到聊天信息的呢?怎么执行下载任务呢?怎么浏览网页信息呢?通过启动的 qq,迅雷,浏览器。
而启动的 qq,迅雷,浏览器都是进程。换句话说,进程是人在系统中的代表,只要把数据给进程,人就相当于就拿到了数据。

所以:数据传输到主机不是目的,而是手段。到达主机内部,在交给主机内的进程,才是目的

大部分的通信行为,都是用户触发的。计算机中谁表示用户呢?进程!!!(客户端服务,服务端服务)

把数据发送到目标主机,不是目的,是手段。真正的目的,是把数据交给这个主机上的某一个服务(进程)

网络通信的本质,其实是进程在帮我们进行网络通信,无论是对于客户端,还是服务端都是如此!

但是系统中,同时会存在非常多的进程,当数据到达目标主机之后,怎么转发给目标进程?这就要在网络的背景下,在系统中,标识主机的唯一性,这就是IP的作用。

1.2.认识端口号

端口号(port)是传输层协议的内容。

  • 端口号是一个 2 字节 16 位的整数;
  • 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
  • IP 地址 + 端口号能够标识网络上的某一台主机的某一个进程;
  • 一个端口号只能被一个进程占用

IP(唯一的一台主机) + port(该主机上的唯一一个进程) = 互联网中唯一的一个进程

所以我们说的从客户端到服务端,本质就是从客户端进程到服务端进程

client进程 = client IP + client port = client是互联网中唯一的一个进程

server进程 = server IP + server port = server是互联网中唯一的一个进程

这样就可以唯一的找到彼此

网络通信的本质:其实就是进程间通信!!!先看到公共资源,这份公共资源是网络!

1.3.端口号范围划分

  • 0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的端口号都是固定的.
  • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的.

1.4理解 "端口号" 和 "进程 ID"

我们之前在学习系统编程的时候, 学习了 pid 表示唯一一个进程; 此处我们的端口号也是唯一表示一个进程. 那么这两者之间是怎样的关系?

一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定;

OS中,每一个进程都要有pid,但并不是每一个进程都有port

进程 ID 属于系统概念,技术上也具有唯一性,确实可以用来标识唯一的一个进程,但是这样做,如果不引入端口号这个概念,直接让进程ID取代让系统进程管理和网络强耦合,实际设计的时候,并没有选择这样做。

2.socket编程

2.1.理解 socket

  • 综上,IP 地址用来标识互联网中唯一的一台主机,port 用来标识该主机上唯一的一个网络进程
  • IP+Port 就能表示互联网中唯一的一个进程
  • 所以,通信的时候,本质是两个互联网进程代表人来进行通信,{srcIp,srcPort,dstIp,dstPort}这样的 4 元组就能标识互联网中唯二的两个进程
  • 所以,网络通信的本质,也是进程间通信
  • 我们把 ip+port 叫做套接字 socket

2.2.socket编程的概念

Socket编程是在应用层和传输层之间进行的编程。它是传输层供给应用层的编程接口,可以视为应用层与传输层之间的桥梁。通过Socket编程,开发者可以开发出客户机和服务器应用程序,这些程序能够在本地网络上进行通信,也可以通过Internet在全球范围内进行通信。

2.3. 传输层的典型代表

如果我们了解了系统,也了解了网络协议栈,我们就会清楚,传输层是属于内核的,那么我们要通过网络协议栈进行通信,必定调用的是传输层提供的系统调用,来进行的网络通信!

认识 TCP 协议

此处我们先对 TCP(Transmission Control Protocol 传输控制协议)有一个直观的认识;后面我们再详细讨论 TCP 的一些细节问题.

  • 传输层协议
  • 有连接
  • 可靠传输
  • 面向字节流

认识 UDP 协议

此处我们也是对 UDP(User Datagram Protocol 用户数据报协议)有一个直观的认识; 后面再详细讨论.

  • 传输层协议
  • 无连接
  • 不可靠传输
  • 面向数据报

因为我们暂时还没有深入了解 tcp、udp 协议,此处只做了解即可

2.3 网络字节序

在学习C语言时,了解过两种机器:大端机和小端机,这两种的储存方式是不一样的:

  • 大端机的低地址储存数据的高位
  • 小端机的低地址储存数据的低位

如果两台主机不是一样的!那么主机如何读取另一个数据发送过来的数据包呢?因为根本无法判断对方是大端机还是小端机,那么就不可能正常的读取数据!

所以:TCP/IP 协议规定,网络数据流应采用大端字节序,即低地址高字节.

不管这台主机是大端机还是小端机, 都会按照这个 TCP/IP 规定的网络字节序来发送/接收数据;

如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可;

接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存!

为使网络程序具有可移植性,使同样的 C 代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换

  • 这些函数名很好记,h 表示 host,n 表示 network,l 表示 32 位长整数,s 表示 16 位短整数。
  • 例如 htonl 表示将 32 位的长整数从主机字节序转换为网络字节序,例如将 IP 地址转换后准备发送。
  • 如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回;
  • 如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回

3.socket 编程接口

3.1.socket 常见 API

C
// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);
// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
// 开始监听 socket (TCP, 服务器)
int listen(int socket, int backlog);
// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);
// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

3.2.sockaddr结构

通过不同的标志为可以选择要进行何种方式的通信!其中的系统通信非常像命名管道的通信方式!那么通过一套公共接口实现了两种不同的通信方式,这不就是多态吗!通过结构体的第一个字段判断如何读取下面的字段,判断出应该采用什么方式进行通信。

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

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

相关文章

常见的材料力学特性

材料特性参数 目录 一、弹性指标 1. 正弹性模量 2. 切变弹性模量 3. 比例极限 4. 弹性极限 二、强度性能指标 1. 强度极限 2. 抗拉强度 3. 抗弯强度 4. 抗压强度 5. 抗剪强度 6. 抗扭强度 7. 屈服极限(或者称屈服点) 8. 屈服强度 9. 持久…

【OpenAI】第六节(语音生成与语音识别技术)从 ChatGPT 到 Whisper 的全方位指南

前言 在人工智能的浪潮中,语音识别技术正逐渐成为我们日常生活中不可或缺的一部分。随着 OpenAI 的 Whisper 模型的推出,语音转文本的过程变得前所未有的简单和高效。无论是从 YouTube 视频中提取信息,还是将播客内容转化为文本,…

WPF+Mvvm项目入门完整教程-基于SqlSugar的数据库实例(三)

目录 数据库实现创建数据库类库资源获取 在上一节中,我们实现了主页UI框架和基础菜单功能,本节主要实现数据库的类库创建、数据功能接口以及泛型方法实现。本例使用的数据库为 MySql数据库,ORM框架采用 SqlSugar 实现。 数据库实现 创建数据…

Socket通信基础

1 基本概念 socket是操作系统提供的一套标准化网络编程接口,应用程序调用这些接口,可以编写出服务端(Server)和客户端(Client)的socket程序,两端的socket通过特定的IP地址和端口连接起来&#…

短视频账号矩阵系统源码---独立saas技术部署

#短视频账号矩阵系统# #短视频矩阵源码# #短视频账号矩阵系统技术开发# 抖音seo账号矩阵系统,短视频矩阵系统源码, 短视频矩阵是一种常见的视频编码标准,通过多账号一键授权管理的方式,为运营人员打造功能强大及全面的“矩阵式“…

html 轮播图效果

轮播效果: 1、鼠标没有移入到banner,自动轮播 2、鼠标移入:取消自动轮播、移除开始自动轮播 3、点击指示点开始轮播到对应位置 4、点击前一个后一个按钮,轮播到上一个下一个图片 注意 最后一个图片无缝滚动,就是先克隆第一个图片…

Linux -- 进程间通信、初识匿名管道

目录 进程间通信 什么是进程间通信 进程间通信的一般规律 前言: 管道 代码预准备: 如何创建管道 -- pipe 函数 参数: 返回值: wait 函数 参数: 验证管道的运行: 源文件 test.c : m…

能源管理系统

一、介绍 基于SpringCloud的能管管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码 二、软件架构 二、功能介绍 三、数字大屏展示 四、数据采集原理 五、软件截图

小渡Al论文写作:50个GPT学术指令——1天搞定1篇论文

选题与研究方向 假设你是某高校某专业的教授,请根据我感兴趣的研究方向,为我提供10个新颖且有研究意义的论文选题。我对某个选题感兴趣,请列举几个该领域当前的研究热点和争议点供我选择。假设我是某专业本科生/研究生,请为我提供…

Unreal Engine5安装Niagara UI Renderer插件

系列文章目录 文章目录 系列文章目录前言一、如何下载安装Niagara UI Renderer插件 前言 在2024.10.24号的今天发现unreal engine官网已经没有虚幻商城了,取而代之的是FAB ‌虚幻商城已经停止运营,Epic Games推出了新的数字资产商店FAB。‌ Epic Games…

Python URL编码

在 Python 中,可以使用 urllib.parse模块对 URL 进行编码。 一、依赖安装 pip install urllib 二、URL编码 from urllib.parse import quoteurl rhttps://myshop.com/shop/shopList?query query {"id":14,"pageSize":10,"pageNum&quo…

【论文+源码】基于SSM+VUE的大学生兼职管理系统

创建一个大学生兼职管理系统,结合 SSM(Spring Spring MVC MyBatis)框架和 Vue.js 前端框架,可以分为几个主要步骤来实现。 第一部分:环境准备 1. 开发环境准备 Java JDK:确保已安装 Java 8 或更高版本。…

2024软考网络工程师笔记 - 第8章.网络安全

文章目录 网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型3️⃣安全目标与技术 🕑现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 &#x1f552…

从0开始深度学习(19)——参数管理

在选择了模型架构,并设置了超参数之后,就进入了训练阶段,此时,我们的目标是找到使损失函数最小化的模型参数值。 经过训练后,我们将需要使用这些参数来做出未来的预测。 此外,有时我们希望提取参数&#xf…

背包九讲——完全背包问题

目录 完全背包问题 问题定义 动态规划解法 状态转移方程 初始化 遍历顺序 三种解法: 朴素版——枚举k 进阶版——dp正推(一维滚动数组) 背包问题第三讲——完全背包问题 背包问题是一类经典的组合优化问题,通常涉及在限定…

【Linux笔记】Linux命令与使用

博文将不断学习补充 学习参考博文: Linux命令大全:掌握常用命令,轻松使用Linux操作系统-CSDN博客 文件或目录操作命令 zip # zip是使用最多的文档压缩格式 # 方便跨平台使用,但是压缩率不是很高 zip指令未安装 安装zip yum ins…

python实战项目47:Selenium采集百度股市通数据

python实战项目47:Selenium采集百度股市通数据 一、思路分析二、完整代码一、思路分析 这里以获取百度股市通股评下的投票数据为例,页面中的其他数据同理。由于此页面数据是js动态加载的,所以采用Selenium获取数据。思路很简单,通过Selenium打开页面,然后定位到“股评”选…

没有B柱?极氪MIX太大胆了!

文 | AUTO芯球 作者 | 雷慢 极氪又给国产车长脸了, 极氪MIX上市,创造了多个行业先例, 估计把合资看得一愣一愣的, 哪见过这样的每月都有新技术、黑科技冒出来, 我看完整个发布会就一个感想, 家里有小…

数据结构——哈夫曼树及其应用(哈夫曼编码)

判断树:用来描述分类过程的二叉树 哈夫曼树(最优二叉树)的基本概念 路径:从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。 结点的路径长度:两结点间路径上的分支数。 结点的路径长度计算&#xff1…

PDF文件为什么不能编辑是?是啥原因导致的,有何解决方法

PDF文件格式广泛应用于工作中,但有时候我们可能遇到无法编辑PDF文件的情况。这可能导致工作效率降低,特别是在需要修改文件内容时显得尤为棘手。遇到PDF不能编辑时,可以看看是否以下3个原因导致的。 一、文件受保护 有些PDF文件可能被设置了…