网络编程入门概念篇

news2024/9/22 9:55:14

1.网络编程-概念(套接字编程)

网络体系结构

网络体系结构指的是网络的层次结构和每一层所使用的协议的集合
实现网络传输的功能非常繁杂,所以采用了分而治之的设计方法,把网络的功能划分为不同的模块,以分层的形式有机地组合在一起。
每一层地实现功能和任务是不用的,其内部实现方法对外部其他层来说是透明的。每一层都为上一层提供服务,同时使用下一层所提供的服务。

OSI模型与TCP/IP模型

OSI模型相关的协议已经非常少使用,但是模型本身非常通用。

OSI模式是一个理想化的模型,至今尚未由完整的实现

一共有七层:应表会传网数物

 

TCP 协议:

TCP协议包含两个方面
        tcp传输协议:用来检测网络传输中差错的传输控制协议
        ip 网际协议:专门负责对不同网络进行互联的互联网协议IP
(通俗的来说TCP是专门负责传输过程中的出错问题,一旦出现传输的问题TCP协议则会介入处理,并把出错的数据包重新传输直到数据安全到达为止。而IP协议则是在网络中负责不同的网络之间的通信,给网络中的每一台主机分配一个不同的IP地址

TCP / IP 模型 (协议簇)

TCP/IP协议事实上是一个工业标准。
TCP/IP协议指的是能够在多个不同的网络间实现信息传输的协议簇。该协议并不是只由 TCP 和 IP协议组成,而是由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇。只是TCP IP 协议比较有代表性所以被称为TCP/IP协议。
TCP/IP只有4层

自下而上了解TCP/IP协议:

网络接口和物理层

物理层的主要设备就是中继器和集线器(交换机/路由)
封装成帧(在数据的前后分别加上开始《纠错以及修正》和结束的标记后便构成了一帧)
每一个数据链路层都规定了所能传输的一针数据中数据的长度上限称为最大传输单元(MTU)
透明传输(指的是不管数据的二进制是如何组合都应该能够正常传输而不会被误以为是某些控制的命令,确保数据安全到达)
差错检测(在传输的二进制编码中加入适当的冗余度使得接收者可以发现在传输中是否出现了差错)
TCP /IP 协议的数据包组成: 

数据的封装与传递过程 

发送端将数据进行打包封装

接收端将数据包进行解析获取数据

 补充:什么是FTP

FTP是什么?

      其实通俗的说FTP是一种数据传输协议,负责将我们电脑上的数据与服务器数据进行交换,比如我们要将在我们电脑中制作的网站程序传到服务器上就需要使用FTP工具,将数据从电脑传送到服务器。专业的说,FTP(全称:File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录,一般我们均是将我们电脑中的内容与服务器数据进行性传输。其实电脑与服务器是一样的,只是服务器上安装的是服务器系统,并且服务器稳定性与质量要求高些,因为服务器一般放在诸如电信等机房中,24小时都开机,这样我们才可以一直访问服务器中的相关信息。

FTP服务器是什么?

       但是还有一个FTP服务器概念大家不要混淆掉了。我们可以再电脑中安装FTP工具负责将电脑中的数据传输到服务器当中,这是服务器就称为FTP服务器,而我们的电脑称为客户端。简单的说FTP服务器就是一台存储文件的服务器,供用户上传或下载文件。             
原文链接:https://blog.csdn.net/chehec2010/article/details/84581185

 2.网络编程知识储备

Socket --- 插座

在计算机通信领域,socket 被翻译为“套接字” 
是一个编程接口
是一个特殊的文件描述符
不仅仅局限于TCP/IP协议
面向连接 TCP(视频通话)
无连接 UDP (发微信消息)
很多的应用 都依赖于socket的接口例如FTP\TELNET等

什么是socket?

独立于具体协议的网络编程接口
在OSI模型中主要位于会话层和传输层之间

Socket的类型

流式套接字 (SOCK_STREAM) TCP
提供一个面向连接、可靠的数据传输服务,数据无差错、无重复、地发送并按顺序抵达。内设流量控制,避免数据流淹没前面的数据。数据被查看时字节流,无长度限制。

数据报套接字(SOCK_DGRAM) UDP
提供无连接服务,数据包以独立数据包形式被发送,不提供无差错保证,数据有可能丢失或重复到
达,顺序发送可能会乱序接收
原始套接字(SOCK_RAW)
可以直接访问较低层次的协议例如 IP\ICMP。

为什么需要socket?


普通IO操作的过程:
打开文件 >> 读/写操作 >> 关闭文件
Socket文件的操作:
在同一个机器上的两个程序可以简单的通过某一个相同的文件进行数据的交流和传输,但是如
果在网络中两个进程完全不存在统一个机器那需要如何打开?
网络协议具有多样性,如何进行统一的操作?

Socket的位置

 IP地址

IP地址是网络中主机(电脑)的标识
在网络中主机想要与其他机器通信就必须拥有一个自己的IP地址
IP地址为32位(IPV4)或者128位(IPV6)
每一个数据包都必须携带目的地址IP和源IP地址,路由器依靠此信息为数据包选择最优路由(路线)

点分形式:如 192.168.100.2 在传输过程中都会被转换为一个32位无符号的整数

IPv4地址

IPv4地址的概念是在1980年代初期提出的。即使有新版本的IP地址,IPv4地址仍然是Internet用户使用最广泛的地址。通常,IPv4地址以点分十进制表示。每个部分代表一组构成8位地址方案8位地址方案8位地址方案的8位地址。如 192.168.100.2

IPv6地址

IPv6地址IPv6地址IPv6地址并不是一种全新的技术。它是Internet协议的最新版本,但它是在1998年开发的,旨在替换IPv4地址。IPv6地址使用以冒号分隔的十六进制十六进制十六进制数字。它分为八个16位块,构成一个128位地址方案。如: 

端口号 (用于区分计算机中某一个具体的程序) 

用于区分一台主机中接收到的数据包应该转交给哪一个进程进行处理。
TCP端口号与UDP端口号是相互独立的
端口号一般由IANA(Internet Assigned Numbers Authority) 统一管理
众所周知端口: 1 - 1023 (1-25之间为众所周知端口 , 256 - 1023 为UNIX系统占用)
何为总所周知端口其实就是早已固定号的端口比如80端口分配给WWW服务,21端口分配给FTP服务等
注册端口: 1024 -49151 分配给进程或者应用。这些端口号在还没有被服务器资源占用时,可以由用户的APP动态注册获得。

动态端口号:49152 - 65535 被称为动态端口号他一般不固定分配某种服务而是动态分配的。一般可以使用
65000 以上的自己就可以随便用

 

 字节序

不同的CPU 主机中,内存存储多个字节的序列分为两种,这个称为主机字节序

小端序(Little-Endian)
低序(低有效位)存储在低地址(起始地址),Intel\AMD 等采用的方式
大端序(Big-Endian)

高序(高有效位)存储在低地址 ARM采用的存储方式

例如:0x12345678
在小端序中存放时:
12 34 56 78
高地址 --------- 低地址
在大端序中存放则相反
78 56 34 12
高地址 --------- 低地址

为了避免在不同的处理器中收到的数据出现字节序带来的问题,因此网络中传输的数据必须按照网
络字节序来处理,也就是大端序。发送者在发送数据前必须先转换为网络字节序(大端序),而接收者需要在收到网络中的数据时再转换为自己合适的主机字节序

字节序转换API函数 

端口号的转换
1  头文件:
2  #include <arpa/inet.h>
3
4  函数原型:
5  uint32_t htonl(uint32_t hostlong); // 主机字节序到网络字节序 无符号长整型
6
7  uint16_t htons(uint16_t hostshort);// 主机字节序到网络字节序 无符号短整型
8
9  uint32_t ntohl(uint32_t netlong); // 网络字节序转为主机字节序 无符号长整型
10
11 uint16_t ntohs(uint16_t netshort); // 网络字节序转为主机字节序 无符号短整型
IP地址转换:
1 //头文件:
2 #include <sys/socket.h>
3 #include <netinet/in.h>
4 #include <arpa/inet.h>
5
6 函数原型:
7 // 把cp指向的字符串转换为32位的网络字节序的二进制值存于inp中
8 // cp 点分十进制的网络地址的字符串 (IP地址)
9 int inet_aton(const char *cp, struct in_addr *inp);
10
11 // 把cp指向的字符串转换为32位的网络字节序的二进制值并返回
12 in_addr_t inet_addr(const char *cp);
13 in_addr_t inet_network(const char *cp);
14
15 // 把in中的32位网络字节序的二进制地址转换为点分十进制的字符串
16 char *inet_ntoa(struct in_addr in);

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

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

相关文章

【机器学习】决策树与随机森林:模型对比与应用案例分析

文章目录 一.引言 在现代数据科学的世界中&#xff0c;决策树和随机森林是两个非常重要且广泛使用的机器学习算法。它们不仅因其高效性和强大的表现力而受到青睐&#xff0c;而且在解决实际问题时也表现出了令人印象深刻的能力。本篇文章将深入探讨这两个算法&#xff0c;帮助读…

JAVAEE初阶第七节(中)——物理原理与TCP_IP

系列文章目录 JAVAEE初阶第七节&#xff08;中&#xff09;——物理原理与TCP_IP 文章目录 系列文章目录JAVAEE初阶第七节&#xff08;中&#xff09;——物理原理与TCP_IP 一.应用层重点协议&#xff09;1. DNS2 .NAT3. NAT IP转换过程 4 .NAPT5. NAT技术的缺陷6. HTTP/HTTPS…

秋夜思故人有感

秋夜思故人有感 西楼月影碎&#xff0c; 轩窗烛泪灰。 门前小犬吠&#xff0c; 疑是故人归。

仕考网:事业编考试考什么?

事业编考试科目为&#xff1a; 《职测》《综应》《公基》三选二 事业编有哪些招考形式? ①联考 多省份统一考试&#xff0c;考试时间、考试内容相同&#xff0c;每年两次&#xff0c;上半年5月和下半年10月各一次; ②单招 用人单位单独招聘&#xff0c;考试时间和内容自…

钉耙编程(8)

1007 cats 的 k-xor 分析&#xff1a; 1.是对x 取余 得到最后一位 标准答案代码&#xff1a; #include<bits/stdc.h> using namespace std; long long kxor(long long a,long long b,long long k){long long ans0,w1,c;while(a>0||b>0){c(ab)%k;a/k;b/k;ansc*w;w*…

研发效能DevOps: VSCode进行前端项目初始配置

目录 一、实验 1.环境 2.安装Node.js 3.初始化前端项目 二、问题 1.cnpm安装报错 2.如何删除cnpm与指定cnpm版本 3.前端项目运行报错 4.node版本与npm版本对应关系如何查询 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统 软件版本备注Windows11VS …

C++之map和set的基本操作

目录 set的基本操作 元素的插入 元素的遍历 元素的查找 元素的删除 multiset的基本操作 count接口 元素的查找 元素的删除 map的基本操作 元素的插入 元素的遍历 元素的查找 元素的删除 operator[ ]接口 multimap的基本操作 在之前我们已经学过了vector&…

录屏新秀Top3 VS班迪录屏 ,谁更胜一筹?

现在是数字时代哈&#xff0c;录屏软件那可是咱生活和工作里特别重要的小玩意儿。比如说制作教学视频、搞游戏直播或者记录工作会议啥的&#xff0c;一款好的录屏软件能让咱效率高高的。今天呢&#xff0c;咱们就来对比一下新推出的三款录屏软件和那个老牌的班迪录屏&#xff0…

【一文读懂】NTN(非地面网络)技术介绍

一、引言 随着科技的飞速发展&#xff0c;全球通信需求日益增长&#xff0c;特别是在偏远地区或服务欠缺地区&#xff0c;传统的地面网络往往难以覆盖。为此&#xff0c;基于5G标准的卫星对地通信技术应运而生&#xff0c;构建了一个全新的通信领域——非地面网络&#xff08;…

spring的xml配置文件爆红(原因以及解决办法)

1&#xff09;出现这个原因是因为spring-framework依赖没有导入 可以看到依赖已经导入了 2&#xff09;第二种原因:我们打开maven工程就是不出现右上角刷新的按钮&#xff0c;导致我们无法导入依赖 解决办法如下

书生大模型全链路开源开放体系笔记

书生哺语2.5概览 支持100万字上下文自助规划和搜索完成复杂任务(通过信息搜索和整合&#xff0c;针对复杂问题撰写专业回答&#xff0c;效率提升60倍) 可以提问文档中100万token中任何一个部分的问题&#xff0c;也有弊端就是不能联系上下文 核心技术思路 高质量合成数据 已经…

队列基础知识-Java

基本概念 队列&#xff08;Queue&#xff09;是一个有序的元素集合&#xff0c;其中新元素总是被添加到队尾&#xff0c;而删除操作则发生在队头。 这种特性使得队列成为一种线性数据结构&#xff0c;其操作遵循FIFO(先入先出)原则。 图解 环形队列注意点&#xff1a; 1 有效…

代码随想录算法训练营第54天|卡码网 110. 字符串接龙、105.有向图的完全可达性、106.岛屿的周长

1. 卡码网 110. 字符串接龙 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1183 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0110.字符串接龙.html 思路&#xff1a; 本题只需要求出最短路径的长度就可以了&#xff0c;不用找出具体路径…

解决面板安装Node.js和npm后无法使用的问题

使用面板&#xff08;BT&#xff09;安装Node.js和npm后&#xff0c;可能会遇到如下问题&#xff1a;即使成功安装了Node.js和npm&#xff0c;服务器仍提示“未安装”&#xff0c;在命令行中使用 node -v 或 npm -v 也没有任何响应。这种问题通常是由于环境变量配置错误或路径问…

Matlab中BaseZoom()函数实现曲线和图片的局部放大

BaseZoom工具下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1yItVSinh6vU4ImlbZW6Deg?pwd9dyl 提取码&#xff1a;9dyl 下载完之后将工具包放置合适的路径下&#xff0c;并在matlab中“设置路径”中添加相应的路径&#xff1b; 注&#xff1a;可以先运行如…

【C++ Primer Plus习题】12.2

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "String.h"…

指针与一维数组

对于数组元素的访问&#xff0c;可以使用下标&#xff0c;也可以使用指针变量&#xff0c;移动指针可以指向数组中的任意一个元素。 例如&#xff0c;一维数组和指针的如下定义 int a [5] {1,2,3,4,5},*p;p a; 因为p是指向一维数组的首元素的指针。因此上述关系等价于 int…

第三天旅游线路规划

第三天&#xff1a;从贾登峪到禾木风景区&#xff0c;晚上住宿贾登峪&#xff1b; 从贾登峪到禾木风景区入口&#xff1a; 1、行程安排 根据上面的耗时情况&#xff0c;规划一天的行程安排如下&#xff1a; 1&#xff09;早上9&#xff1a;00起床&#xff0c;吃完早饭&#…

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录 [web][极客大挑战 2019]Http 考点&#xff1a;Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点&#xff1a;弱密码字典爆破 四种方法&#xff1a; [web][极客大挑战 2019]Http 考点&#xff1a;Referer协议、UA协议、X-Forwarded-For协议 访问…