day28 网络编程

Posted fxc-520520

tags:

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

 

一,客户端/服务端架构

C/S        B/S

1,硬件c/s架构(打印机)

2,软件c/s架构:

互联网中处处是c/s架构

(B/S架构也是C/S架构的一种) 如你的浏览器是客户端,博客园网站是服务端。

比如,腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看到它的视频。

 

client《-------基于网络通信----------》server

browser<--------基于网络通信---------->server

3.server端必须满足的条件:

    1.稳定运行(网络,硬件,操作系统,服务端应用软件),对外一直提供服务。

     2.服务端必须绑定一个固定的地址。

二,什么是互联网?

   互联网的核心就是由一堆协议组成,协议就是标准,比如全世界人通信的标准是英语。

   如果把计算机比作人,互联网协议就是计算机界的英语。所有的计算机都学会了互联网协议,那所有的计算机都

   就可以按照统一的标准去收发信息从而完成通信了。

互联网两大要素:

1.底层的物理连接介质,是为通信铺好道路的。

2.一套统一的通信标准------》互联网通信协议

三,网络通信原理

   3.1 互联网的本质就是一系列的网络协议

   一台硬设有了操作系统,然后装上软件就可以正常使用了,然而你也只能自己使用。像这样,每个人都拥有一台自己    的机器,然而彼此孤立。

 

技术分享图片

结论:

英语称为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是一系列统一的标准,这些标准称为互联网协议。互联网的本质就是一系列的协议。

 

3.2 自定义协议:

任何一种协议都包含两部分:

1,报头:必须是固定长度。

2,数据

 

 

3.3  osi七层协议

 互联网协议按照功能不同分为tcp/ip五层:

技术分享图片

 

技术分享图片

首先,用户感知到的只是最上面的一层应用层,自上而下每层都依赖于下一层。

每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件。

1.物理层:

孤立的计算机想要一起玩,必须接入internet,言外之意是计算机必须完成组网。

技术分享图片

 

 物理层功能:

主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0.

 

2.数据链路层

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

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

以太网协议:

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

ethernet规定:

一组电信号组成一个数据报,叫做‘帧’

每一个数据报分成:报头和数据两部分。

把数据报比作我们平时寄信的话,报头相当于信封,可以看到是给谁的,数据相当于里面的信件。

总结:

任何一种通信协议都必须包含两部分:

一部分:报头(必须是固定的长度)

二部分:数据

 

mac地址:

报头中包含的源地址和目标地址由来:以太网规定接入inernet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址。

广播:

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

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

 

3.网络层

网络层由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由

一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,

这就不仅仅是效率低的问题了,这会是一种灾难

上图结论:必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,

就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关

网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

 

ip地址:

规定的网络地址的协议叫做ip协议,它定义的地址称之为ip地址;广泛采用的ipv4.

子网掩码:

所谓”子网掩码”,就是表示子网络特征的一个参数。再形式上等同于ip地址。

 

算出子网地址:

知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

 

总结:标识地址的方式:

     ip+mac地址就能标识全世界范围内独一无二的一台计算机。

     ip+mac+port就能标识全世界范围内独一无二的一个基于网络通信的应用软件。

     url地址:标识全世界范围内独一无二的一个资源。

  注意:

 url地址=应用层协议部分(http://)+域名部分和端口部分(即对应对方的网站)+路径。

 

ARP协议:

ARP协议由来:

计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到

通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议

 

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

1.如果处在同一子网中时:

技术分享图片

 

 上图中:pc1作为源mac,向同一子网里的主机以广播的方式发送数据包,在广播的时候有几个主机就复制几份进行发送。然后各个主机接收后拆开包,如果发现里面的ip是自己的,就返回自己的mac地址,上图中pc2发现是自己的,就返回了自己的mac.

2.如果处于不同的子网中时:

源mac--网管的mac---目标网管的mac----目标ip(解析出目标mac)

 

4.传输层:

传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,

那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

 

传输层的功能:

建立端口到端口的通信。

 

重点:

   tcp协议。(三次握手,四次挥手)

           三次握手建立连接:

技术分享图片

 

 以上是三次握手连接:syn是建立连接的意思。

第一步:客户端发送 请求包(syn=1)和序列号(seq=x)到服务端。

第二步:服务端通过序列号和请求包 确认请求(ack=1+x),同时向客户端发出请求包(syn=1)和序列号(seq=y)

第三步:客户端确认请求包(ack=1+y)

以上 syn_sent是发完,listen是等待。syn_rcvd是接受,established已经建立一个单项连接,established已经建立一个单项连接

 

四次挥手(断开连接):

技术分享图片

 

为什么有四次挥手,是因为中间关系到数据传输的问题,当数据没有传完的时候,需要等待一下,确认对方收到数据后,才能释放掉连接

技术分享图片

断开连接的时候,一般是服务端发起的。因为服务端要接其他的客户端。

第一步:服务端先发起断开请求(fin)和序列号(seq)

第二步:客户端确认请求(ack)

第三步:客户端发起断开请求(fin)

第四部:服务端确认断开请求(ack)

 

udp协议:

又称为‘不可靠传输’

udp协议不用建连接

优点:效率高,不用等待

缺点:是不等待就直接释放掉数据内存,如果对方数据还没接收完,容易丢失数据

 

五,半连接池:

技术分享图片

半连接池占的是内存空间,里面存的是建立连接请求数。先进先出。

假如半连接池最大为5,如果有6个主机同一时间进行访问请求,那么里面先一起放5个,一个一个的建立连接,出来一个再进去一个。

注意:

半连接池限制的是同一时间的请求数,而非连接数。

 

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

C#高级编程笔记 Day 8, 9月 28日 (数组)

目录大纲

常用模块(Day25-Day28)

Day 28(06/28)模块与包的调用

Python全栈之路Day22

假期福利Day 5:编程游戏-石头剪刀布 - Swift Playgrounds趣味编程,人人能编程!