C++实战项目-网络编程基础包含TCP详解(一)

简介: C++实战项目-网络编程基础包含TCP详解(一)

网络结构模式(网络应用程序设计模式)

C/S结构

       客户机-服务器(client-server)结构。服务器完成对数据的管理,客户机完成与用户的交互任务。客户端是因特网上访问别人信息的机器,服务器是提供信息供人访问的机器。

       客户端通过局域网与服务器相连,接受用户请求,并通过网络向服务器端提出请求,对数据库进行操作。服务器接受客户机的请求,将数据提交给客户机,客户机将数据进行计算并将结果呈现给用户。服务器还要提供完善安全保护及对数据完整性的处理等操作,并允许多个客户机同时访问服务器,这就对服务器的硬件处理数据能力提出了很高的要求。

       在C/S结构中,应用程序分为两部分:服务器部分和客户机部分。

       服务器部分是多个用户共享的信息与功能,执行后台服务,如控制数据库的操作

       客户机部分为用户所专有,负责执行前台功能,如出错提示、数据计算等

优点:

       1.协议选用灵活

       2.客户端响应快(能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器)

       3.操作界面漂亮、形式多样。可以充分满足客户自身的个性化要求

       4.C/S结构的管理信息系统具有较强的事务处理能力,能够实现复杂的业务流程

       5.安全性较高,C/S一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强,一般高度机密的信息系统采用C/S结构适宜。

缺点:

       1.客户端需要安装专门的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题(病毒、硬件损坏)都需要进行安装或维护。软件升级时,每一台客户机需要重新安装,其维护和升级成本高。

       2.对客户机的操作系统一般也有限制,不能够跨平台

B/S结构

       B/S结构(浏览器、服务器模式)是web兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用,客户机上只要安装一个浏览器,服务器安装数据库(MySQL、Oracle)。浏览器通过Web Server同数据库进行数据交互。

优点:

       B/S架构最大的优点是总体拥有成本低、维护方便、分布性强、开发简单,可以不用安装任何专门的软件就能实现任何地方进行操作,客户端零维护,系统的扩展性非常容易,只需要一台能上网的电脑

缺点:

       1.通信开销大,系统和数据的安全性较难保障

       2.个性特点明显降低,无法实现具体有个性化的功能要求

       3.协议固定:http/https

       4.客户端服务器的交互式请求-响应模式,通常动态刷新页面,响应速度明显降低

MAC地址

网卡式一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,又称为网络适配器或网络接口卡NIC。其拥有MAC地址,属于OSI模型的第2层,它使得用户可以通过电缆或无线相互连接。每一个网卡都有一个被称为MAC地址的独一无二的48位串行号。网卡的主要功能:1.数据的封装与解封装 2.链路管理 3数据编码与译码

MAC地址,也称为局域网地址、以太网地址、物理地址或硬件地址,它是一个用来确认网络设备位置的地址,由网络设备制造商生产烧录在网卡中。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层负责MAC地址MAC地址用于在网络中唯一标识一个网卡、一台设备若有一或多个网卡,则每一个网卡都需要并会有一个唯一的MAC地址

MAC地址长度位48位(6个字节),通常表示为12个16进制数。如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE分配,而后3个字节,16进制数AE-3C-40代表制造商所制造的某个网络产品的系列号。只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象的说,MAC地址就如同身份证号码一样,具有唯一性。

IP地址

IP协议是为了计算机网络相互连接进行通信而设计的协议。在因特网中,它是能连接到网络的所有计算机网络实现互相通信的一套规则,规定了计算机在因特网上进行通信时应当遵循的规则。

IP协议实际上是一套由软件程序组成的协议软件,它把各种不同“帧”统一转换成“IP数据报”格式,这种转换时因特网的一个最重要的特点,使所有各种计算机都能在因特网上实现互通。正是因为有了IP协议,因特网才得以迅速发展成为世界上最大、开放的计算机通信网络。因此,IP协议也可以叫做"因特网协议"。

IP地址是指互联网协议地址(又称网际协议地址)。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异

IP地址是一个32位的二进制数,通常被分割位4个8位二进制数。IP地址通常采用"点分十进制"表示。

IP地址编址方式

       为了方便寻址和层次化构造网络,每一个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括服务器、路由器等)有一个主机ID与其对应。

      A类IP地址

       一个 A 类 IP 地址是指, 在 IP 地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算 机的号码。如果用二进制表示 IP 地址的话,A 类 IP 地址就由 1 字节的网络地址和 3 字节主机地址组 成,网络地址的最高位必须是“0”。A 类 IP 地址中网络的标识长度为 8 位,主机标识的长度为 24 位,A 类网络地址数量较少,有 126 个网络,每个网络可以容纳主机数达 1600 多万台。 A 类 IP 地址 地址范围 1.0.0.1 - 126.255.255.254(二进制表示为:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。最后一个是广播地址。 A 类 IP 地址的子网掩码为 255.0.0.0,每个网络支持的最大主机数为 256 的 3 次方 - 2 = 16777214 台。

       B类IP地址

        一个 B 类 IP 地址是指,在 IP 地址的四段号码中,前两段号码为网络号码。如果用二进制表示 IP 地址的 话,B 类 IP 地址就由 2 字节的网络地址和 2 字节主机地址组成,网络地址的最高位必须是“10”。B 类 IP 地址中网络的标识长度为 16 位,主机标识的长度为 16 位,B 类网络地址适用于中等规模的网络,有 16384 个网络,每个网络所能容纳的计算机数为 6 万多台。 B 类 IP 地址地址范围 128.0.0.1 - 191.255.255.254 (二进制表示为:10000000 00000000 00000000 00000001 - 10111111 11111111 11111111 11111110)。 最后一个是广播地址。 B 类 IP 地址的子网掩码为 255.255.0.0,每个网络支持的最大主机数为 256 的 2 次方 - 2 = 65534 台。

      C类IP地址

       一个 C 类 IP 地址是指,在 IP 地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算 机的号码。如果用二进制表示 IP 地址的话,C 类 IP 地址就由 3 字节的网络地址和 1 字节主机地址组 成,网络地址的最高位必须是“110”。C 类 IP 地址中网络的标识长度为 24 位,主机标识的长度为 8 位, C 类网络地址数量较多,有 209 万余个网络。适用于小规模的局域网络,每个网络最多只能包含254台 计算机。 C 类 IP 地址范围 192.0.0.1-223.255.255.254 (二进制表示为: 11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。 C类IP地址的子网掩码为 255.255.255.0,每个网络支持的最大主机数为 256 - 2 = 254 台。

      D类IP地址

      D 类 IP 地址在历史上被叫做多播地址(multicast address),即组播地址。在以太网中,多播地址命 名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是 “1110”,范围从 224.0.0.0 - 239.255.255.255

       特殊的网址

       每一个字节都为 0 的地址( “0.0.0.0” )对应于当前主机; IP 地址中的每一个字节都为 1 的 IP 地址( “255.255.255.255” )是当前子网的广播地址; IP 地址中凡是以 “11110” 开头的 E 类 IP 地址都保留用于将来和实验使用。 IP地址中不能以十进制 “127” 作为开头,该类地址中数字 127.0.0.1 到 127.255.255.255 用于回路测 试,如:127.0.0.1可以代表本机IP地址。

子网掩码

       子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个 IP 地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合 IP 地址一起使用。子网掩码只有一个作用,就是将某个 IP 地址划分成网络地址和 主机地址两部分。 子网掩码是一个 32 位地址,用于屏蔽 IP 地址的一部分以区别网络标识和主机标识,并说明该 IP 地址是在局域网上,还是在广域网上

        子网掩码是在 IPv4 地址资源紧缺的背景下为了解决 lP 地址分配而产生的虚拟 lP 技术,通过子网掩码将 A、B、C 三类地址划分为若干子网,从而显著提高了 IP 地址的分配效率,有效解决了 IP 地址资源紧张 的局面。另一方面,在企业内网中为了更好地管理网络,网管人员也利用子网掩码的作用,人为地将一 个较大的企业内部网络划分为更多个小规模的子网,再利用三层交换机的路由功能实现子网互联,从而 有效解决了网络广播风暴和网络病毒等诸多网络管理方面的问题。

端口

端口是绑定每一个进程的,或者说服务器通过这个端口进行监听是否有客户端与之连接。

端口分类:

1.周知端口

       周知端口是众多周知的端口号(又称知名端口、公认端口或者常用端口),范围0-1023,他们紧密绑定于一些特定的服务。【80端口用于分配给WWW服务、21端口用于分配给FTP服务、23端口分配给Telnet等

       网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在地址栏上指定端口号,方法是在地址栏里输入“网址:端口号”。但一些系统协议使用固定端口号,它是不能被改变的,比如139端口专门用于NetBIOS与TCP/IP之间的通信,不能手动改变

2.注册端口

       端口号从1024到49151,他们松散地绑定于一些服务,分配给用户进程或应用程序,这些进程主要是用户选择安装的一些应用程序。这些端口在没有被服务器资源占用的时候,可以用用户端动态选择位源端口。【我们之间写程序时可选用的端口

3.动态端口/私有端口

       动态端口的范围从49152到65535。称之为动态端口,是因为它一般不固定分配某种服务,而是动态分配。

网络模型

OSI七层模型

       七层模型,亦称 OSI(Open System Interconnection)参考模型,即开放式系统互联。参考模型 是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为 OSI 参考模型或七层模型。 它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。

应用层 为应用程序提供服务
表示层 数据格式转换、数据加密
会话层 建立、管理和维护会话
传输层 建立、管理和维护端到端的连接
网络层 IP选址和路由选择
数据链路层 提供介质访问和链路管理
物理层 物理设备的标准
        应用层:网络服务与最终用户的一个接口。这一层为用户的应用程序(例如电子邮件、文件传输和 终端仿真) 提供网络服务

       表示层:数据的表示、安全、压缩。主要是进行对接收的数据进行解释、加密与解密、压缩与解压 缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。

       会话层通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求。

       传输层:定义了一些传输数据的协议和端口号。主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这 一层数据叫做段。

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

       数据链路层建立逻辑连接、进行硬件地址寻址、差错校验等功能。定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。将比特组合成字节进而组合成帧,用MAC地 址访问介质。

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

TCP/IP四层模型

       现在Internet使用的主流协议族是TCP/IP协议族,它是一个分层、多协议的通信体系。TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一个层完成不同的功能,且通过若干协议来完成,上层协议使用下层协议提供的服务。    

应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的

               (1)对不同种类的应用程序他们会根据自己的需要来使用应用层的不同协议

                    (邮件传输协议:SMTP  万维网应用:HTTP  远层登录服务:TELNET)

               (2)加密、解密、格式化数据(将计算机能看懂的东西变成人能看懂的)

               (3)建立或解除与其他节点的联系,这样可以充分节省网络资源

传输层:定义了一些传输数据的协议和端口号。主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这 一层数据叫做段。

网络层:可以进行网络连接的建立和终止以及IP地址的寻找等功能

网络接口层:由于兼并了物理层和数据链路层所以网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的路线。

通信过程

两台计算机通过TCP/IP协议通讯的过程:

上图表示两台计算机在同一个网段中的情况,如果两台计算机在不同的网段中。那么数据从一台计算机到另一台计算机传输中要经过一个或多个路由器。

        链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(即从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧,由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。

       网络层的IP协议是构成Internet的基础。Internet上的主机通过IP地址来标识,Internet上有大量的路由器负责根据IP地址选择合适的路径转发数据包,数据包从Internet上的源主机到目的主机往往需要经过十多个路由器。路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包,因此路由器需要将进来的数据包拆掉网络层和数据链路层两层首部并重新封装。IP协议不保证传输的可能性,数据包在传输过程中可能丢失,可靠性在上层协议或应用程序中提供支持。

       网络层负责点到点的传输(主机或路由器),传输层负责端到端的传输(源主机和目的主机)。传输层可选择TCP或UDP协议。

       TCP是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说话保证那边可以听得到,并且按说话的顺序听到的,说完话挂机断开连接。也就是说TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据报自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。

       UDP是无连接的传输协议,不保证可靠性,有点像寄信,信写好了放到邮箱,既不能保证信件在邮递过程中不会丢失,也不能保证信件寄送顺序。使用UDP协议的应用程序需要主机完成丢包重发、消息排列等工作。

       目的主机收到数据包后,如果经过各层协议栈最后到达应用程序呢?

以太网驱动程序首先根据以太网首部的“上层协议”字段确定该数据的有效载荷(除去协议首部传输的数据)是IP、ARP、RARP协议的数据报,然后交给相应的协议处理。假如是IP数据报、IP协议再根据首部的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。假如是TCP或UDP段,TCP或UDP再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。【分用】

       IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识的不同进程的地址。IP地址和端口号合起来标识网络中唯一的进程。

       虽然IP、ARP、RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。虽然TCP、UDP、ICMP、IGMP的数据都需要IP协议来封装数据报,但是从功能上划分,ICMP和IGMP与IP同属于网络层,TCP和UDP属于传输层。

相关文章
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
98 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
1月前
|
NoSQL 网络协议 Linux
Redis的实现一:c、c++的网络通信编程技术,先实现server和client的通信
本文介绍了使用C/C++进行网络通信编程的基础知识,包括创建socket、设置套接字选项、绑定地址、监听连接以及循环接受和处理客户端请求的基本步骤。
48 6
|
20天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
62 6
|
1月前
|
机器学习/深度学习 数据可视化 测试技术
YOLO11实战:新颖的多尺度卷积注意力(MSCA)加在网络不同位置的涨点情况 | 创新点如何在自己数据集上高效涨点,解决不涨点掉点等问题
本文探讨了创新点在自定义数据集上表现不稳定的问题,分析了不同数据集和网络位置对创新效果的影响。通过在YOLO11的不同位置引入MSCAAttention模块,展示了三种不同的改进方案及其效果。实验结果显示,改进方案在mAP50指标上分别提升了至0.788、0.792和0.775。建议多尝试不同配置,找到最适合特定数据集的解决方案。
318 0
|
21天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
47 4
|
21天前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
39 1
|
22天前
|
网络协议 安全 NoSQL
网络空间安全之一个WH的超前沿全栈技术深入学习之路(8-2):scapy 定制 ARP 协议 、使用 nmap 进行僵尸扫描-实战演练、就怕你学成黑客啦!
scapy 定制 ARP 协议 、使用 nmap 进行僵尸扫描-实战演练等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(8-2):scapy 定制 ARP 协议 、使用 nmap 进行僵尸扫描-实战演练、就怕你学成黑客啦!
|
22天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
25天前
|
自然语言处理 编译器 Linux
告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐
本文中,阿里云智能集团开发工程师李泽政以 Alinux 为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个 C++ 模块工程并使用模块封装第三方库或是改造现有的项目。
|
1月前
|
安全 程序员 编译器
【实战经验】17个C++编程常见错误及其解决方案
想必不少程序员都有类似的经历:辛苦敲完项目代码,内心满是对作品品质的自信,然而当静态扫描工具登场时,却揭示出诸多隐藏的警告问题。为了让自己的编程之路更加顺畅,也为了持续精进技艺,我想借此机会汇总分享那些常被我们无意间忽视却又导致警告的编程小细节,以此作为对未来的自我警示和提升。
117 5

热门文章

最新文章

下一篇
无影云桌面