网络编程入门

news2024/9/20 15:06:00

在这里插入图片描述

什 么 是 网 络 编 程

网络编程的本质是多台计算机之间的数据交换。
数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备反馈的数据。
现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据 给另外一个,然后接收另一个设备的反馈。
在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称 作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻响应连接,则需要一直启动。

例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。连接一旦建立以后,就客户端和服务器端就可以进行数据传递 了,而且两者的身份是等价的。在一些程序中,程序既有客户端功能也有服务器端功能,最常见的软件就是QQ、微信这类软件了。

网络编程中两个主要的问题
1、 一个是如何准确的定位网络上一台或多台主机

2、 另一个就是找到主机后如何可靠高效的进行数据传输

如何准确的定位网络上一台或多台主机

在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。

而TCP层则提供面向应用的可靠(TCP)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象, 一般不需要关心IP层是如何处理数据的。

目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。 服务器一般作为守护进程始终运行,监听网络端口, 一旦有客户请求,就会启动 一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。

B/S结构可以看作是一种另类的C/S结构。因为浏览器也是一个Client。

网络协议是什么

在计算机网络要做到井井有条的交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式、是否需要发送一个应答信息。这些规则被称为网络协议。

为什么要对网络协议分层

  • 简化问题难度和复杂度。由于各层之间独立,我们可以分割大问题为小问题。
  • 灵活性好。当其中一层的技术变化时,只要层间接口关系保持不变,其他层不受影响。
  • 易于实现和维护。
  • 促进标准化工作。分开后,每层功能可以相对简单地被描述

计算机网络体系结构

OSI参考模型

OSi(Open System Interconnect), 即开放式系统互联。 一般都叫OSI参考模 型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。ISO为了更好的使网络应用更为普及,推出了OSI参考模型,这样所有的公司都按照统一的标准来指定自己的网络,就可以互通互联了。

OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)。
在这里插入图片描述

TCP/IP参考模型

TCP/P四层协议(网络接口层、网络层、传输层、应用层)
在这里插入图片描述
1、 应用层。应用层最靠近用户的一层,是为计算机用户提供应用接口,也为用户 直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP, TELNET等。

2、 传输层。建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的 可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层 屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主 机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP UDP 就是在这一层。端口号既是这里的“端”。

3、 网络层。本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来 的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输 层。就是通常说的IP层。这一层就是我们经常说的IP协议层。P协议是Internet 的基础。

4、网络接口层。也称数据链路层。通过一些规程或协议来控制这些数据的传输,以保证被传输数据的正确性。实现这些规程或协议的硬件和软件加到物理线路,这样就构成了数据链路,

TCP/ IP和UDP

TCP/IP即传输控制/网络协议,是面向连接的协议,发送数据前要先建立连接(发 送方和接收方的成对的两个之间必须建立连接),TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达。

UDP它是属于TCP/IP协议族中的一种。是无连接的协议,发送数据前不需要建 立连接,是没有可靠性的协议。因为不需要建立连接所以可以在在网络上以任何 可能的路径传输,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

TCP与UDP 区别 :

  • TCP是面向连接的协议,发送数据前要先建立连接,TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达;

  • UDP是无连接的协议,发送数据前不需要建立连接,是没有可靠性;

  • TCP通信类似于于要打个电话,接通了,确认身份后,才开始进行通信;

  • UDP通信类似于学校广播,靠着广播播报直接进行通信。

  • TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多;

  • TCP是面向字节流的,UDP是面向报文的;面向字节流是指发送数据时以字节为单位, 一个数据包可以拆分成若干组进行发送,而UDP一个报文只能一次发完。

  • TCP首部开销(20字节)比UDP首部开销(8字节)要大

  • UDP的主机不需要维持复杂的连接状态表

TCP和UDP 的应用场景:

对某些实时性要求比较高的情况使用UDP,比如游戏,媒体通信,实时直播,即 使出现传输错误也可以容忍;其它大部分情况下,HTTP都是用TCP,因为要求传输的内容可靠,不出现丢失的情况

运行在TCP 或 UDP 的应用层协议分析

运行在TCP协议上的协议:

1、HTTP(HypertextTransfer Protocol,超文本传输协议),主要用于普通浏 览。

2、 HTTPS(HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。

3、FTP(File Transfer Protocol,文件传输协议),用于文件传输。

4、POP3(Post Office Protocol,version 3, 邮局协议) 收邮件用。

5、SMTP(Simple MailTransfer Protocol,简单邮件传输协议),用来发送电子邮件。

6、 TELNET(Teletype over the Network, 网络电传),通过一个终端(terminal) 登陆到网络。

7、 SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。

运行在UDP协议上的协议

1、 BOOTP(Boot Protocol,启动协议),应用于无盘设备。

2、 NTP(Network-Time Protocol, 网络时间协议),用于网络同步。

3、DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。

运行在TCP和UDP协议上

1、 DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发 等工作。

2 、ECHO(Echo Protocol, 回绕协议),用于查错及测量应答时间(运行在TCP 和UDP协议上)。

3、 SNMP(Simple Network Management Protocol,简单网络管理协议), 用于网络信息的收集和网络管理。

4、 DHCP(DynamicHost Configuration Protocol,动态主机配置协议),动 态配置IP地址,

5、ARP(Address Resolution Protocol,地址解析协议),用于动态解析以太 网硬件的地址。

ARP协议(Address Resolution Protocol)

ARP协议完成了IP地址与物理地址的映射。每一个主机都设有一个ARP高速缓存,里面有所在的局域网上的各主机和路由器的IP地址到硬件地址的映射表。
当源主机要发送数据包到目的主机时,会先检查自己的ARP高速缓存中有没有目 的主机的MAC地址,如果有,就直接将数据包发到这个MAC地址,如果没有, 就向所在的局域网发起一个ARP请求的广播包(在发送自己的ARP请求时,同 时会带上自己的IP地址到硬件地址的映射),收到请求的主机检查自己的IP地 址和目的主机的IP地址是否一致,如果一致,则先保存源主机的映射到自已的ARP 缓存,然后给源主机发送一个ARP响应数据包。源主机收到响应数据包之后,先 添加目的主机的IP地址与MAC地址的映射,再进行数据传送。如果源主机一直没有收到响应,表示ARP查询失败。

如果所要找的主机和源主机不在同一个局域网上,那么就要通过ARP找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。

什么是NAT(Network Address Translation, 网络地址转换 )
用于解决内网中的主机要和因特网上的主机通信。由NAI路由器将主机的本地IP 地址转换为全球IP地址,分为静态转换(转换得到的全球IP地址固定不变)和动态NAT转换。

从输入URL地址到获得页面的过程

1、 浏览器查询DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的 DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服 务器进行查询等。
对于向本地DNS服务器进行查询,如果要查询的域名包含在本 地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性); 如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映 射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性),如果 本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者 迭代查询;

2、 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三 次握手;

3、TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;

4、 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理, 并将处理结果及相应的视图返回给浏览器;

5、 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引 用,则重复上述步骤并向服务器请求这些资源;

6、 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面 。

TCP的三次握手

在网络数据传输中,传输层协议TCP是要建立连接的可靠传输,TCP建立连接的过程,我们称为三次握手。
在这里插入图片描述
三次握手的具体细节

1、第一次握手:Client将SYN置1,随机产生一个初始序列号seq发送给Server, 进入SYN SENT状态;
2、 第二次握手:Server收到Client的SYN=1之后,知道客户端请求建立连接, 将自己的SYN置1,ACK置1,产生一个acknowledge number=sequence number+1,并随机产生一个自己的初始序列号,发送给客户端;进入SYN RCVD状态;
3、 第三次握手:客户端检查acknowledge number是否为序列号+1,ACK是 否为1,检查正确之后将自己的ACK置为1,产生一个acknowledge number= 服务器发的序列号+1,发送给服务器;进入ESTABLISHED状态;服务器检查ACK 为1和acknowledge number为序列号+1之后,也进入ESTABLISHED状态;完成三次握手,连接建立。

简单来说就是:

1、 客户端向服务端发送SYN

2、 服务端返回SYN,ACK

3、 客户端发送ACK

三次握手的目的是建立可靠的通信信道,主要的目的就是双方确认自己与对方的发送与接收机能正常。

1、 第一次握手:客户什么都不能确认;服务器确认了对方发送正常

2、 第二次握手:
客户确认了:自己发送、接收正常,对方发送,接收正常;
务器确认了:自己接收正常,对方发送正常

3、 第三次握手:
客户确认了:自己发送、接收正常,对方发送、接收正常;
服 务器确认了:自己发送、接收正常,对方发送接收正常。

所以三次握手就能确认双发收发功能都正常,缺一不可。

当你明白了网络的传输原理,那么网络编程就简单多了。

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

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

相关文章

[附源码]计算机毕业设计基于springboot的小区宠物管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

css样式引入方式及优缺点

这篇文章主要介绍了css样式引入及优缺点,本文给大家分享三种css的引入方式,通过代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧 三种css的引入方式 1.行内样式 优点:书写方…

【Python自然语言处理】文本向量化处理用户对不同类型服装评论问题(超详细 附源码)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 下面以文本向量化为目标,举例说明基于不同模型的实现过程,使用的数据集的主题是用户对不同类型的女性服装的评论,总共有23485条记录 实现步骤如下 一、导入库文件 首先导入需要的库文件…

MySQL数据库日志、备份与恢复

目录 前言 一.MySQL 日志管理 数据的重要性 造成数据丢失的原因 1、错误日志 2、通用查询日志 3、二进制日志 4、慢查询日志 5、查看日志 6.中继日志(relay log) 7、普通日志(general log) 配置文件 二、数据库备份的…

Metabase学习教程:系统管理-4

序列化:在Metabase实例间迁移 如何使用Metabase的序列化功能将问题、仪表板、集合、设置等从一个Metabase实例复制到新的Metabase实例。 Metabase序列化 序列化仅在商业版上可用(仅在自托管计划上)。 许多客户在迁移到本地部署的商业版时…

二叉树OJ题详解

第一题:单值二叉树 力扣链接:力扣 单值二叉树就是每一个节点存放的数据都相同,那么如何判断一棵树为单值二叉树呢?我们就拿最简单的一棵树为例子,比如根节点为1它的左子树和右子树也为1的一棵树,我们只需要…

以太网 TCP协议(TCP报文交互后的状态机变化)

2.7.2 以太网 TCP协议(TCP报文交互后的状态机变化) 一、TCP状态机: 二、TCP状态机变化 1、TCP三次握手 客户端主动发起SYN置位TCP之后,状态变为SYN_SENT(请求发送状态)服务器默认处于LISTEN(监听状态)。收到SYN报文之后&#x…

VMwareWorkStation如何添加万兆网卡,万兆网卡添加教程

1.引言 不同于ESXi,在VMware WorkStation(后文简称VMware)中添加网卡后没有选择网卡速度等级的选项,例如百兆、千兆、万兆等。就算点开右下角的”高级“也不管用。不过按照VMware的默认设定,当新建虚拟机选择32位操作系…

【玩转STL】STL的简介和string类用法和接口讲解(源码解析)

接触编程时间长一点的朋友想必都多多少少听过vector、string、queue等容器,也大抵了解一些有关STL的概念,这一节,我们就一起来谈一谈STL的六大组件,再来一起深入理解string类。 这里写目录标题🍎、什么是STL&#xff0…

人工智能:语音合成技术介绍

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

PCL 点云采样

一、简介 点云采样一般有三种方式,上采样,下采样,平均采样 原理介绍 下采样: 一般是采样是通过构建一个三维体素的格栅,然后在每个体素内用体素的重心近似的作为这个体素的整体特征,也就是说用这一个体素…

python 拆分pdf(有可执行文件exe)

1.背景 被那些软件pdf拆分整气死了,今天用python写一份pdf拆分的代码。 2.代码:(计算机的可以去学习一下,自己改改) pdf_split.py from PyPDF2 import PdfFileReader, PdfFileWriter# PDF文件分割 def split_pdf():…

pytorch nn.utils.rnn.pack_padded_sequence 分析

pack_padded_sequence 在nlp模型的forward方法中,可能有以下调用令读者疑惑 packed_embedded nn.utils.rnn.pack_padded_sequence(embedded, text_lengths, batch_firstTrue, enforce_sortedFalse)为什么要使用pack_padded_sequence? 参考 Pytorch中…

TDengine3.0:解决高基数问题的时序数据库设计思路

小 T 导读: 数据集的高基数(High-Cardinality)问题一直困扰着诸多主流的时序数据库(Time Series Database,TSDB)产品。一些数据库管理系统,在基数较低时表现良好;但是随着基数的增加…

vue2.x与vue3.x中自定义指令详解

🐱个人主页:不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、华为云享专家、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏&#xff…

m基于GA遗传算法的分件供送螺杆参数优化matlab仿真,优化参数包括螺杆总尺寸-最大圈数等

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 首先介绍MATLAB部分的遗传算法的优化算法介绍: 遗传算法的原理 遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法…

AI 对话模型被网友玩坏了!这次还可以运行 Docker 容器...

最近一款新的聊天 AI 被网友们玩疯了。它可以直接生成代码、可以给你的代码 debug 以及提出优化...可以模仿莎士比亚风格写作...还可以解答各种各样的问题,而且显然不只 10 岁小孩子的智商,感觉它已经把互联网上所有的公开资料都吸收并消化了。这就是 Op…

mssql(1433端口)介绍

mssql介绍 Microsoft SQL Server是一个关系型数据库,微软开发的管理系统。作为数据库服务器,它是一种软件产品,其主要功能是存储和检索其他软件应用程序所请求的数据,这些应用程序可以运行在同一台计算机上,也可以运行…

Java连接数据库(JDBC非常重要)

目录 一.数据库连接 1.1之前如何操作数据库 1.2.实际开发中如何操作数据库? 二.JDBC(Java Database Connectinity)(重要) 2.1.JDBC的概念 2.2 JDBC核心思想 2.2.1 MySQL数据库驱动 2.2.2 JDBC API 2.3JDBC 环境搭建 2.4准备一张表 2.4.1 创建student表 2.4.…

[附源码]Python计算机毕业设计Django三星小区车辆登记系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…