基于VS2019 C++的跨平台(Linux)开发(2.1)——网络基础

一、引言

        首先,来聊聊我们现实中的QQ聊天,如下图所示,两个客户端分别表示聊天的两方,那么可能有人会想为什么中间多了个腾讯公司的服务器呢?因为我们的QQ软件是从腾讯公司下载下来的,它其实起到了中转站的效果,即用户1001发送个“你好”的信息,会经过腾讯服务器转接给我们的用户1002。

基于VS2019 C++的跨平台(Linux)开发(2.1)——网络基础_第1张图片

        但这时候可能又想了,聊天数据存在服务器无可厚非,但是聊天为什么也要经过服务器?但有没有想过如果对方不在线呢?实际情况是即使对方不在线我一样能够发出去,等对方上线就能收到我给他发的消息。这就说明了双方聊天时,如果对方在线的话,服务器直接转接数据。如果对方不在线聊天数据就先保存在服务器等在线了再发。

        我们知道现实中电脑端和手机端可以做到QQ聊天记录的互通,因为聊天记录也不会保存在电脑或者手机上,而是保存在腾讯的服务器上,也正是为什么我们能够查看几个月前的聊天记录的原因?

        打游戏的同学应该都知道如果你在游戏中发送的消息出现了一些违法的信息等,发出去可能是****,因为服务器上做了敏感词的屏蔽。    

 二、网络三要素

        了解了以上这些后,我们在网络当中如何去查找对方呢?现实中我们可能在各地都会登录QQ,那么我们怎么找到腾讯服务器呢?首先,我们要确定他的位置在哪,所以涉及到了IP地址这个概念,

1、IP地址 

概念:确定网络中某一台计算机的位置

        我们在cmd中ipconfig,其中的ipv4地址实质上是虚拟的,经过转换的。如果连接了wifi,ip地址就通过路由器转换得来 。而我们平时在浏览器地址栏输入www.baidu.com(域名)其实也是通过ip地址查找的(经过转换)。域名和ip地址一一对应,就像我们数据结构中的map键值对,键是唯一的,即你要想访问百度除了这个域名,其他域名你是访问不到百度的。而这个域名其实是通过在运营商那边注册绑定之后生成了对应ip地址,即我们输入完域名,会传给运营商解析找到对应ip地址,根据ip地址去访问百度公司的服务器。(域名方便用户使用记忆)

基于VS2019 C++的跨平台(Linux)开发(2.1)——网络基础_第2张图片

        再拿腾讯公司举例,如果只有ip地址,你只能找到腾讯公司的位置,但腾讯公司有多个服务器,此时如果我们想用QQ聊天,肯定只能发送给QQ的服务器而不是其他服务器,那么怎么做到一一对应呢?所以就得利用端口号找到对应服务器。

基于VS2019 C++的跨平台(Linux)开发(2.1)——网络基础_第3张图片

2、端口号

概念:确定是哪个应用程序(进程)收(注意不是进程pid)

        现在知道了ip地址和端口号,那么这时就能进行通信了吗?再举个例子,如果你接到一通电话,对方跟你说的是日语或者你听不懂的语言,就不能正常的沟通。而我们网络就是就是为了和对方进行合理的沟通,所以就涉及到了通信协议。

一共有65535个端口号,10000以下是操作系统使用,自己定义10000之后

 3、通信协议

概念:通信时,通信双方预定好的规则

就好比我们在老家可能都会讲家乡话,而跟同学朋友沟通可能都会讲普通话

所以要想打通网络从而实现通信这三要素缺一不可。接下来将详细阐述这个通信协议。

3.1、分类

①已经成熟通信协议
FTP(文件传输) 、HTTP(网页)、RTSP(流媒体——音视频)、TCP、UDP(最基础的两个通信协议)
②自定义通信协议

3.2、TCP/IP协议概述

OSI参考模型与TCP/IP参考模型如下

基于VS2019 C++的跨平台(Linux)开发(2.1)——网络基础_第4张图片

 OSI七层 应表会传网数物(应表会可以分别对应qt开发界面、数组链表容器包含的数据、数据库接口以及sql语句,数物则偏向硬件)

 OSI模型传输数据过程:先将数据打包发送给对方的OSI,再解包获取数据

三、TCP/IP协议族

TCP/IP 实际上是一个一起工作的通信家族,为网际数据通信提供通路。为讨论方便可将
TCP/IP 协议组大体上分为三部分:

  • Internet 协议(IP)
  • 传输控制协议(TCP)和用户数据报文协议(UDP)
  • 处于TCP 和UDP 之上的一组协议专门开发的应用程序。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等许多协议。

四、TCP、UDP区别(重点)

TCP UDP
通信状态 通信时一定要验证双方是否都在线(客户端和对应 的服务器) 不用验证是否在线
传输介质 流式lO(字节) 数据报文包(一定要打包后发)
传输长度 理论上每一次传输不限制大小(最好不要超过100kb,网络中容易丢数据)
 
每一次只能传输64KB(根据包)
优缺点 牺牲效率,提高传输安全性 牺牲部分安全性,提高传输效率
应用场景

当对网络通讯质量有要求的时候:打电话(主流的网络开发)

当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快:上课屏幕共享、发短信

安全性:TCP验证双方是否都在线,较为安全(如果是UDP,你在使用支付宝支付的时候,不验证服务器是否在线,就把支付密码等信息发送到网络中,就可能被别人截胡。)

效率上:UDP更快(TCP每次都要验证)

127.0.0.1网络回环地址(本机网络IP)

IPV4:数字。只能是0~255的整型数

IPV6:数字+字母。应用不太广泛(一般用在军事上)

本章的网络基础就介绍到这,下面来讲述socket网络编程 

基于VS2019 C++的跨平台(Linux)开发(1.6.2)——SOCKET网络编程

你可能感兴趣的:(服务器,Linux,c++,linux,vs,socket)