网络编程

Posted liuxiaolu

tags:

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

一:什么是网络编程?

  网络通常指的是计算机中的互联网是由堕胎计算机通过网线或其他媒介相互链接完成的。编写基于网络的应用程序的过程称之为网络编程。如果要想与其他计算机建立连接,就必须要让你的计算机与其他计算机能够互相传递数据。

二:C/S架构(客户端Client与服务器Sever)

  提供数据的一方称之为服务器,访问数据的一方称之为客户端。技术分享图片

另外浏览器也可以访问服务器上的网页数据,称之为B/S,其本质上也是C/S只不过客户端是浏览器

 三:网络通信的基本要素

  1.两台计算机要想通信,必须要具备两个基本要素:

    1.1.物理连接介质,包括网线,无线电,光纤等

    1.2.通讯协议

  2.什么是协议?

    协议就是标准,大家要遵循相同的标准才能正常交流通讯。双方都能理解的语言就是标准,就是协议。互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

  3.OSI七层模型(Open System Internetconnection Reference Model)

    开放式系统互联网通信参考模型,缩写为OSI,是由国际标准组织推出的,其实就是一大堆协议,OSI吧整个通讯过程划分为七层,简称为OSI七层模型。

技术分享图片

  OSI相当于计算机界的通用语言,只要按照OSI规定的标准来通讯,就能够与全世界任何一台计算机通信。

    3.1物理层

    物理层的功能:基于电子器件发送交流信号,根据电流的高低可以对应到数字0和1,也就是二进制数据。

    3.2数据链路层

    数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思

    数据链路层的功能:定义了电信号的分组方式

    以太网协议:

    早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet

    ethernet规定:

      • 一组电信号构成一个数据包,叫做‘帧’
      • 每一数据帧分成:报头head和数据data两部分

技术分享图片

head包含:(固定18个字节)

发送者/源地址,6字节

接收者/目标地址,6字节

数据类型(标签+以太类型),6个字节

data包含:(最短46字节,最长1500字节)

  • 数据包的具体内容

head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

  mac地址:

    head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址

    mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)技术分享图片

  广播:

  有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)

  ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

技术分享图片


交换机不仅负责让网络中的计算机能够互相通信,还要优化网络传输,

如何优化呢?

当pc1想要与pc2通讯前

1需要知道pc2的MAC地址所以必须先将这个信息广播给所有的计算机,

2.这个信息必须先交给交换机,再由交换机广播出去,

3.pc2收到消息后发现目标MAC是自己,就回复数据给发送方,

4.而回复也必须先交给交换机,此时交换机就会记录pc2的MAC地址与网口1号的对应关系存到自己的缓存中,

5.下一次在要给pc2发数据时从缓存中查找pc2的MAC地址,

6.如果找到了就直接单独给pc2发送,不在需要广播,

7.如果没有则重复之前的广播过程

这一优化功能称之为自动学习功能

第一次链接某计算机时必须广播获取MAC地址:
技术分享图片

 

只要链接过一次MAC地址就被交换机记录下了下一次就不用广播了

技术分享图片

交换机的工作原理类似于早期的电话交换机,电话线打到总台,总台问你要几号?然后将电话线插到相应的口上。

   

 
























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

Linux高级网络编程系列教程

Linux高级网络编程系列教程

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

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

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

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