网络编程

Posted yb-guanxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。

一 客户端服务端架构

    我们使用qq、微信和别人聊天,通过浏览器来浏览页面、看京东的网站,通过优酷、快播(此处只是怀念一下它)看片片啥的等等,通过无线打印机来打印一个word文档等,只要有无线、有网、有4G,我们就能好好的聊天,好好的看片片、好好的购物什么的,对吧,那么这些操作都叫做网络通信,确切来说都需要使用网络通信,前提是你要有网(大家记着这个‘网‘,我下面会给大家详解),原来生活中处处使用了网络通信,我们通过网络通信的不同形式:比如说qq是我们下载到电脑或者手机上的应用程序(qq应用程序就是人家腾讯开发的软件,放到你的电脑或者手机上供你使用的,大概明白应用程序意思就行,不用深究~~),浏览器也是我们下载的应用程序,但是浏览器是通过页面来访问别人的网站的,而打印机我是通过我电脑上的word来操作使用的。根据这些不同的场景或者说不用的沟通方式,在业内划分了下面几个架构(架构:就是不同的结构,例子1:每个公司的部门组成不同。例子2:每个建筑的钢筋结构不同。)。在看下面的几个架构之前,我们需要知道什么是客户端,什么是服务端。客户端:安装在你电脑上的qq,浏览器(360浏览器、chrome浏览器、IE浏览器等),当我们使用qq发送消息的时候,消息先发送到了腾讯,然后腾讯在转发到你朋友的qq上,此时你的qq就是客户端,腾讯就是服务端。当我们使用浏览器来看京东的网站的时候,我们电脑上的浏览器就叫做客户端,京东就叫做服务端。ok~ok~

  客户端英文名称:Client,服务端英文名称:Server,下面所说的CS架构就是说的ClientServer架构。

    a.硬件CS架构:打印机。

    b.软件CS架构:QQ、微信、优酷、暴风影音、浏览器(IE、火狐,360浏览器等)。其中浏览器又比较特殊,很多网站是基于浏览器来进行访问的,浏览器和各个网站服务端进行的通讯方式又常被成为BS架构(浏览器英文名称:Browser)

二 网络通信的整个流程

 

明白了上面的CS架构之后,我们就以自己本地的电脑上的浏览器去访问的京东网站的整个流程这种BS架构来举例,有同学可能会问:你怎么不用qq或者微信来举例啊,是这样,因为qq和微信这种P2P的通信方式还是比较特殊的,也比较繁琐,具体为什么说它繁琐,我在博客的最后给大家说一下,然后有兴趣的同学可以去研究一番~~~

 

  网卡和mac地址

 

    你的电脑想要联网,首先要有一个网卡,而且电脑要做好相关的网路配置(如何配置,在下面有介绍)

技术分享图片

电脑插网线的地方就做网卡,网卡提供了网络的接口,这是硬件上面的,大家都是到网口是吧,我怎么找到电脑的网卡呢,有人说用IP地址,IP地址并不是,而是全球唯一的mac地址,专门给网络设备设定的,是出厂的时候就给定好的,一个设备的mac地址号码是全球唯一的。 head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址。   mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

      查看mac地址的方法:windows下在cmd窗口输入ipconfig -all指令:下面显示的这个物理地址就是mac地址。

技术分享图片

由于mac地址很难记忆,所以又出现了IP地址,在说IP地址之前,我们先说一下编码,我们都是到一个字节等于8位对吧,8个2进制的数,那么8位是不是可以表示256个字节啊,由于全球有太多的机器需要联网,那么网络设备的编号应该长一些,对不对,由4个点分十进制组成,由点分割的四个十进制的数,而十进制的数是不是在计算机中也是由二进制表示的啊,那么就成了这个样子:00000000.00000000.00000000.00000000 -- 11111111.11111111.11111111.11111111,0.0.0.0--255.255.255.255,也就是由4个8位的二进制数表示,这个表示就是我们的IP地址的形式。

      如果你用网线连网的,查看自己网络的属性,并且可以将ipv4版本的ip地址可以设置成静态的、也可以自动获取(动态分配的),下面是网络配置的大致方法:

      1、

技术分享图片

技术分享图片

 

 

配置好自己电脑的网络信息之后,我们就有了身份证(mac地址)和名字(IP地址),通过他们,我们就在网络中有了自己的身份,只要有网,我们就可以正大光明的和别人进行通信了。

      

      arp协议功能:广播的方式发送数据包,获取目标主机的mac地址

      下面是网络通信流程图:

 技术分享图片

 

 

 

流程描述:

第一步:打开浏览器,想要请求访问京东,在地址栏输入了网址:www.jd.com。(www.jd.com是域名就是一个IP地址的名称,IP地址不好记,所有有了域名。)

第二步:先将请求信息发给了交换机,然后交给了路由器,路由发给DNS服务器,通过DNS协议去找我们要访问的京东的IP地址:

技术分享图片

 

 

第三步:查到的京东服务器对应的IP地址之后,路由器通过路由协议找到一个路由转发的最优路径,将你的请求信息还送给这个IP地址的京东的路由器

  第四步:京东的路由器发给了京东网站的服务器上

  第五步:京东网站服务器按照来的时候的路径,在返回给你他自己的网站

  第六步:当你打开浏览器的时候,你的电脑给你的浏览器这个运行起来的程序给了一个编号,叫做端口号,当你的电脑收到京东发送过来的消息的时候,你的电脑通过端口号找到你的浏览器,你的浏览器拿到了京东的网站信息,然后将网站呈现在了自己的浏览器上

技术分享图片

内网和外网:   

    所谓内网就是我们平常说的局域网。局域网就是在固定的一个地理区域内由2台以上的电脑用网线和其他网络设备搭建而成的一个封闭的计算机组。它可以是邻居之间的2台电脑,也可以是一幢100层大楼里的1000台电脑。局域网可以是独立封闭运行的,也可以是和外网相连接的。
所谓外网,也就是广域网。是一种地域跨度非常大的网络集合。它是由无数个局域网+独立服务器构成的。注意,此处所说的局域网既可以是小型的广域网,也可以是局域网。
    实际上,从规模上来看我们很难分辨局域网与广域网,因为大小都是相对的。所以。真正局域网与广域网的分别是通过IP地址来实现的。
    任何一台电脑要上网,都必须在网络上有一个唯一的IP地址。在局域网内,这个IP地址是唯一的。但是在另外一个局域网,这个IP地址仍然能够使用。
    网络A里有一台IP地址为192.168.1.231的客户端,网络B里也可以有一台同样IP的电脑。那么。我们就说这2台机器分别在2个局域网里。但是在广域网内,所有的IP地址都是唯一的。山西电信的DNS服务器IP地址是61.134.1.4.那么,这个地址在全世界都是唯一的,不可重复的。这就是广域网和局域网的区别。

    如果只有内网的ip地址你是不能上网的,你上网肯定要通过一个外网地址,这个外网地址又称为公网地址,这个公网地址是全球唯一的,他在你的对外出口的路由器上,也就是你的外网网关地址。

三 DNS服务器

 

当我们请求https:\\www.JD.com的时候,首先电脑会在本地的DNS缓存中找是否有这个DNS缓存(DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。 DNS是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,一个IP地址可以有多个域名,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器通常为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。)本地的DNS缓存是在我们访问过一个网站之后,例如京东,那么本地会保存一个京东域名和京东服务器IP地址的映射关系,将来再次请求的时候,就不用再到外部的DNS上查询这个域名对应的IP地址了,提高了效率,如果是第一次请求,请看上面的DNS查询过程

 

步骤

 

  本地查询顺序

 

    浏览器缓存: 浏览器会按照一定的频率缓存DNS记录。chrome://net-internals/#dns 查看chormeDNS缓存。

 

    操作系统缓存: 如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。cmd命令ipconfig /displaydns 用于查看操作系统dns缓存。

 

    路由缓存: 路由器也有DNS缓存。 找本机的hosts文件 Windows host文件路径: C:WINDOWSsystem32driversetchosts (由于直接修改之后不能保存,可以copy一份到桌面,修改之后,在替换掉原路径下的文件就可以了),hosts文件以静态映射的方式提供IP地址与主机名的对照表。

 

    ISP(网络服务提供商):如果还是没有,那么就去检查ISP有没有吧~,每一个ISP(网络服务提供商),或一个大学,甚至是一个大学里的系都会有一个自己的本地域名服务器,他会在url第一次访问时缓存该域名的指向。下次再访问时,他会从缓存里把这个url曾经指向的IP调出来。

 

  

 

    递归查询

 

      第一步:在hosts静态文件、DNS解析器缓存中查找某主机的IP地址

 

      第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找

 

      第三步:本地DNS服务器查不到就向ISP(ISP是互联网服务提供商(Internet Service Provider))的简称,ISP有专门的DNS服务器应对DNS查询请求。再找不到就根据‘根提示文件’向负责顶级域‘.com’的DNS服务器查询

第四步:‘根DNS服务器‘根据查询域名中的‘xyz.com‘,再向xyz.com的区域服务器查询

      第五步:www.xyz.abc.com的DNS服务器直接解析该域名,将查询到的ip再原路返回给请求查询的主机

    迭代查询:

      第一步:在hosts静态文件、DNS解析器缓存中查找某主机的IP地址

      第二步:上一步无法找到,在DNS本地服务器(即域服务器)查找所有本层次的区域服务器

      第三步:本地DNS服务器查不到就向ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。再找不到就查询上一层次的所有区域服务器,以此类推直至根域名DNS服务器‘.’

      第四步:到达根域名服务器后又向下查询,直至查到结果为止。

    迭代查询与递归查询结合

    递归查询需要经过逐层查询才能获得查询结果,当查询具有许多层次的DNS结构时效率很低,所以一般采用两者相结合的查询方式。

      第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址

      第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找

      第三步:本地DNS服务器查不到就向ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。再找不到就根据‘根提示文件’向负责顶级域‘.com’的根DNS服务器查询

      第四步:根DNS服务器直接将其区域DNS服务器的ip地址返回给本地服务器,而不用再向xyz.com的区域服务器查询。

      第五步:(京东有自己DNS服务器)本地DNS服务器将结果返回给请求的主机

四 交换机、路由器和网关(含DHCP)

 

然后通过路由A转发将消息发出去,消息中包含目标路由D的网关的IP地址,网关分很多的类型:传输网关、应用网关、协议网关等等,我们经常说的网关是指的传输网关,简称网关,我们主要就看它,网关在路由器这里,当请求信息发送到了网关这里的时候,我们先到路由表里面看看有没有这个请求的目标地址的IP,如果没有说明不是我们自己网络内部的IP地址,需要路由转发出去,到internet网络中,但是网络这么大,怎么办,那么通过网关计算出一个最佳的传输路径去找到对应的目标网关地址,在路由转发的过程中(当请求被路由B接收到了之后,路由B打开之后发现不是找自己的,就会把请求信息包继续转发)然后传输到这个网关地址的路由器上,目标网关路由器上设置了一些IP地址+端口和各个服务器上的映射关系,即便是所有的交换机都接收到了这个请求,但是还是能够找到对应的服务器。在通过交换机发送到对应的服务器上

 

那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为 “192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上, TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络B向网络A转发数据包的过程也是如此。

京东的路由器干了什么呢:京东的路由器拿到请求消息之后,需要发给内网(局域网)中的对应的服务器上,这里在路由器上做了一个映射关系也就是说只要访问我这个192.168.3.0:443端口的请求,都去找京东的服务器A,就类似这么个映射关系,具体情况看到时候路由器交换机怎么设置

路由器对外部网络的通信都是通过外网接口(wan口)去转发出去的,也就是不管你是内网中的哪个电脑,你的请求都要通过路由的外网接口发送出去,别人对你的请求都是通过外网接口接收进来的,至于路由器上对内的lan口是怎么分配IP地址给内网的,要看路由器怎么设置划分vlan也就是子网(内部局域网),每个lan口的IP地址可以是静态的,也可以是动态分配的(DHCP协议),而且可以划分网段,例如:我的1号lan口对接的网段是192.168.1.0-192.168.1.255,那么所有这个网段的电脑的信息进出都走这个lan口到路由器上,对于连接路由器的交换机来讲,主要的作用就是搭桥用的,搭桥的意思就是让连接该交换机的所有电脑都能够连接起来,只要是同一个网段的互相都可以进行通信,当然这个也要看交换机怎么配置,具体路由器和交换机的配置在这里就不说了,内容很多,大家大概明白它的流程和意思就可以了,喜欢网络的同学,大家可以去深入研究一下,关于公司的网络配置,我会给大家来一个简单的流程给大家参考一下。 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段 交换机又分二层交换机和三层交换机,二层交换机主要就是个搭桥的作用,三层交换机还兼有路由的作用,一般现在的交换机都有DHCP功能,也就是说交换机下面连接的这些电脑的子网IP或者说是局域网IP也可以由交换机来动态生成和分配,路由器和交换机所生成的子网IP都是自己在路由器和交换机上设置的,和路由器上的外网IP没有关系,具体的划分又分为24位的16位的等等,举例:24位的就是10.11.1.0-10.11.1.255这256个IP地址,0表示后面的8bit是00000000,255表示后面的8bit是11111111
  详细一些的交换机和路由器的工作原理,大家可以去看我这篇博客:https://www.cnblogs.com/clschao/articles/9612944.html

细说二层交换机、三层交换机、四层交换机。百科:

技术分享图片

 

 广域网和路由器:(广域网是个相对的概念,是相对于局域网来说的)

 技术分享图片

为了避免广播风暴(以前通过mac地址就可以通信,mac地址通信是广播的形式,如果世界上所有的电脑都通过这种形式通信,就会形成广播风暴,堵塞网络不说,全部信息都变得不安全了,因为所有人都可以收到你发的信息):分了多个局域网,然后通过路由器连起来了。

五 总结及其他一些内容简介

 

最后,至于路由是如何进行转发的、内部路由表是如何保存的、网关是如何计算最后传输路线的、路由的内网是如何划分的、DHCP和静态IP是如何设置的,DHCP又是如何分配IP地址的,交换机内部工作原理、路由和交换机如何进行配置等等,我们在本篇博客上就不进行深入研究了,本篇博客是为了让小白同学熟悉一下网路相关知识。谢谢大家谅解,如何大家想了解其他的内容,请给我留言,我就会把相关内容整理出来,分享给大家。你的问题是我们共同进步的动力。

 

为什么说qq这种p2p的网络通信方式比较特殊呢,因为它是两个局域网的电脑或者手机进行通讯,双方不能确定对方的IP地址,因为你的qq也不知道在哪里登陆,用什么网络,对吧,也就是说双方不知道对方的IP地址,怎么办,需要借助第三方承接,就是腾讯,那么这里面就涉及到了udp打洞,net穿透等技术,有兴趣的可以去了解一下,腾讯为什么nb,也是因为它基本上是国内第一家实现了这些技术的公司,让我们的qq沟通更加方便。

 

 

 






以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章

Linux高级网络编程系列教程

Linux高级网络编程系列教程

面向对象编程面向组件编程面向方面编程面向服务编程

编程范式:命令式编程(Imperative)声明式编程(Declarative)和函数式编程(Functional)

少儿编程教育未来前景如何?我想加入少儿编程这行。

TCP/IP网络编程——理解网络编程和套接字编程