知识内容:html
1.C/S架构与B/S架构前端
2.IP地址、端口、域名与URLnode
3.网络分层web
4.TCP/UDP协议编程
5.HTTP协议设计模式
6.socket浏览器
1、C/S架构与B/S架构缓存
1.C/S架构:client-server架构安全
C/S即client/server架构,是当前大多数网络编程所采用的架构模型。经过它能够充分利用两端硬件环境的优点,将任务合理分配到client端和server端来实现,下降了系统的通讯开销。client/server架构通常有一台后台计算机做为服务器,用户的我的机上的软件程序做为客户端服务器
server:服务端 client:客户端
典型应用:QQ、LOL
2.B/S架构:browser-server架构
B/S即browser/server架构,是web兴起后流行起来的一种网络架构模式,B/S架构使用浏览器看成客户点的应用软件,因此B/S架构能够看做C/S的一种特殊状况,是对C/S架构模式的一种改进
serve:服务端 browser:浏览器
典型应用:全部的网站
3.B/S架构的优势
a.便于部署、维护和升级: B/S的应用程序都部署在后台服务器上,通常无需更新客户端软件(即浏览器)
b.跨平台、对客户机要求低: 客户端的计算机硬件环境千差万别,传统C/S架构须要对不一样操做系统开发不一样的客户端软件,而每种操做系统都支持web浏览器,基于web开发的B/S架构系统只需开发一套客户端程序而且客户端程序是部署在web服务器上,由浏览器在访问时下载到客户端运行 (注: 这里的客户端程序通常指前端代码 eg: HTML\CSS\JavaScript等)
c.对安全性要求极高: B/S架构系统通常创建在广域网上,也就是有不少人能访问,面向的是未知用户,因此开发B/S系统时更要注意系统的防攻击、数据加密、备份、非伪造等能力
4.B/S架构与C/S架构的关系
B/S架构其实C/S架构的一种,不过client变成了browser,browser其实也是一种客户端
2、IP地址、端口、域名与URL
1.IP地址
(1)IP定义
IP是一个网络层中的概念,是物联网上的主机在网络中具备的逻辑地址,计算机网络中采用IP地址表示网络地址。如今的IP地址能够分为IPv4和IPv6两种
(2)IPv4和IPv6
IPv4: 一个32位二进制数的地址,通常表示为4个十进制数字,好比: 172.16.32.三、10.38.96.243等
一个IPv4地址被划分为两部分: 网络地址和主机地址。根据网络地址和主机地址的不一样位数规定,能够将IP地址划分为3类:
A(8位网络地址和24位主机地址) B(16位网络地址和16位主机地址) C(24位网络地址和8位主机地址),因为某些缘由,A类和B类地址几乎分配殆尽
IPv6: 因为IPv4的数量限制,就推出了IPv6,IPv6由1128位二进制数表示,在表达方式上使用8个16进制数字表示,好比: d23:4334:0:0:23:ade:9853:23
IPv4与IPv6比较: 单从数量级上来讲,IPv6所拥有的地址容量大概是IPv4的8*10^28倍,达到2^128个。IPv6不但解决了网络地址资源数量的问题,也为除了计算机外的设备分配IP地址来连入互联网提供了方便。固然目前普遍使用的仍是IPv4,可是毫无疑问IPv6将是将来IP地址的主流。
(3)IP\MAC\ARP之间的关系
为何须要IP地址:为了方便找到其余主机,能够经过ARP协议将IP地址转化成MAC地址, MAC地址是一个主机的惟一标识(全球惟一)
关于ARP协议:https://baike.baidu.com/item/ARP/609343?fr=aladdin&fromid=1742212&fromtitle=ARP%E5%8D%8F%E8%AE%AE
获取本机的IP地址和MAC地址:
1 # __author__ = "wyb" 2 # date: 2018/5/11 3 # 获取本机的IP地址和MAC地址 4 5 import socket 6 import uuid 7 8 ip = socket.gethostbyname(socket.gethostname()) 9 node = uuid.getnode() 10 macHex = uuid.UUID(int=node).hex[-12:] 11 mac = [] 12 for i in range(len(macHex))[::2]: 13 mac.append(macHex[i:i+2]) 14 mac = ':'.join(mac) 15 print('IP:', ip) 16 print('MAC:', mac)
(4)保留IP地址
保留IP地址:保留IP地址不会在互联网中使用,其主要被用在企业机构内部做为局域网地址使用
保留地址主要在如下四类:
这些地址是不会被互联网分配的,也不会被路由经过
127.0.0.1 -> 回环地址
2.端口
在web中,端口是一个软件级的概念,是虚拟端口,IP地址是网络层的寻址方式,而端口就是传输层的寻址方式。端口是一个16位二进制数表达的正整数,数字范围为0到65535
注:在同一时间内只能有只会有一个程序占用一个端口,不可能同时有两个程序占用同一个端口,通常状况下咱们本身使用8000以后的端口
经常使用的默认端口号:
IP地址与端口:
3.域名
IP地址由纯数字组成,让人难以记住,且不能表达功能、地理位置等信息,因此标准化组织就定义了域名这种主机地址表示方式
域名: 域名是应用层概念,是由一串用点分割的名字组成的网络上某台计算机或计算机组的名称,域名能够说是IP地址的一个面具
常见的域名: www.baidu.com www.sina.com.cn等
注: 域名中的符号都由英文字母和数字组成,每一个标点不超过63个字符,也不区分大小写字母,标号中除了连字符(-)之外不能使用任何其余标点符号
4.URL
URL: 全球统一资源定位符 其实就是一个连接,连接背后是资源,资源能够是一张图片、一首歌、一张网页、、、
URL的标准形式: [协议]://[主机]:[端口]/[路径]?[参数] 注: 通常协议有: http、https、ftp等 端口通常都省略了
eg: https://www.nowcoder.com/1476481
http://www.cnblogs.com/wyb666/p/8494861.html
URL组成(四部分)
http://www.zhihu.com/question/31838184
3、网络分层
每层的物理设备以下
每层的常见协议以下
OSI模型各层对应的协议:
4、TCP/UDP协议
1.TCP
TCP是一种面向链接的、可靠的、基于字节流的传输层通讯协议
TCP的特性: 有序性、真确性、可靠性、可控性,TCP使用面向链接的方式收发数据,在收发数据以前需创建链接,在数据传输以后释放链接,创建链接时采用3次握手的方式来保证发送的可靠性、可控性
在双方成功握手以后将在两个应用程序之间创建一个全双工的通讯,这个全双工通讯将占用两个计算机之间的通讯线路,直到它被一方关闭或双方关闭为止
全双工:双方能够收发消息,接受消息
应用:web浏览器、电子邮件、文件传输
为何链接的时候是三次握手,关闭的时候倒是四次挥手?
由于当Server端收到Client端的SYN链接请求报文后,能够直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。可是关闭链接时,当Server端收到FIN报文时,极可能并不会当即关闭链接,因此只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端全部的报文都发送完了,我才能发送FIN报文,所以不能一块儿发送。故须要四步握手
2.UDP
UDP是一种无链接的传输层协议,提供面向对象的简单的不可靠信息传送服务,虽然UDP不可靠,可是因为UDP的开销小通常UDP适用于吞吐量大(轻量级控制)、能够承受信息丢失(传输不可靠)的应用场景。并且在网络情况良好的状况下,UDP的丢包率在实际状况下也很是少,因此有不少经典的协议采用UDP进行传输,好比SNMP、NFS、DNS等
应用:域名系统(DNS)、视频流
3.TCP与UDP
TCP---传输控制协议,提供的是面向链接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间创建一个TCP链接,以后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另外一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,可是并不能保证它们能到达目的地。因为UDP在传输数据报前不用在客户和服务器之间创建一个链接,且没有超时重发等机制,故而传输速度很快
4.TCP、UDP与socket
5、HTTP协议
1.HTTP介绍
HTTP即超文本传输协议,是web中的最主要的web应用层标准,B/S架构的应用系统用HTTP在客户端于服务器之间进行传输数据。HTTP能够传输任何格式的数据,好比说文本、图片甚至视频均可以经过HTTP进行传输
浏览器(客户端)按照规定的格式发送文本数据(请求)到服务器 -> 服务器解析请求,按照规定的格式返回文本数据到浏览器 -> 浏览器解析获得的数据,并作相应处理
2.HTTP流程
例如:在浏览器地址栏键入URL,按下回车以后会经历如下流程:
HTTP端口号默认为80,当服务器发现有客户端创建链接并提交了一个HTTP请求后,就根据请求的内容执行相应的操做,并将结果返回给客户端
3.HTTP特色
1 HTTP协议属于应用层,并工做于客户端-服务端架构上 2 3 HTTP协议是用于从服务器传输超文本到本地浏览器的传送协议 4 5 HTTP是一个基于TCP/IP通讯协议来传递数据的协议 6 7 浏览器做为HTTP客户端经过URL向HTTP服务端即WEB服务器发送全部请求。Web服务器根据接收到的请求后,向客户端发送响应 8 9 简单快速:客户向服务器请求服务时,只需传送请求方法和路径;因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度快 10 11 灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记 12 13 无链接:无链接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间 14 15 无状态:无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。另外一方面,在服务器不须要先前信息时它的应答就较快
HTTP协议流程以下图:
4.HTTP请求格式和响应格式
(1)HTTP请求格式
请求首行; // 请求方式 请求路径 协议和版本,例如:GET /index.html HTTP/1.1 请求头信息; // 请求头名称:请求头内容,即为key:value格式,例如:Host:localhost 空行; // 用来与请求体分隔开 请求体。 // GET没有请求体,只有POST有请求体。
浏览器发送给服务器的内容就这个格式的,若是不是这个格式服务器将没法解读!在HTTP协议中,请求有不少请求方法,其中最为经常使用的就是GET和POST
HTTP默认的请求方法就是GET
注意:
GET请求经常使用的操做:
1. 在浏览器的地址栏中直接给出URL,那么就必定是GET请求
2. 点击页面上的超连接也必定是GET请求
3. 提交表单时,表单默认使用GET请求,但能够设置为POST
(2)HTTP响应格式
通常状况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
关于响应状态码:
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别: 1xx:指示信息--表示请求已接收,继续处理 2xx:成功--表示请求已被成功接收、理解、接受 3xx:重定向--要完成请求必须进行更进一步的操做 4xx:客户端错误--请求有语法错误或请求没法实现 5xx:服务器端错误--服务器未能实现合法的请求 常见状态码: 200 OK //客户端请求成功 400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用 403 Forbidden //服务器收到请求,可是拒绝提供服务 404 Not Found //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
5.GET和POST请求的区别
GET请求 GET /books/?sex=man&name=Professional HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Connection: Keep-Alive 注意最后一行是空行 POST请求 POST / HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley
GET提交,请求的数据会附在URL以后(就是把数据放置在HTTP协议头中)
POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据
所以,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
而在实际开发中存在的限制主要有:
GET和POST的区别:
6、socket
1.socket概念
socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑经过这个通道来实现数据的互相传递。 咱们知道网络 通讯 都 是基于 ip+port 方能定位到目标的具体机器上的具体服务,操做系统有0-65535个端口,每一个端口均可以独立对外提供服务,若是 把一个公司比作一台电脑 ,那公司的总机号码就至关于ip地址, 每一个员工的分机号就至关于端口, 你想找公司某我的,必须 先打电话到总机,而后再转分机
创建一个socket必须至少有2端, 一个服务端,一个客户端, 服务端被动等待并接收请求,客户端主动发起请求, 链接创建以后,双方能够互发数据
2.socket链接过程
服务器监听->服务器socket并不定位具体的客户端socket,而是处于等待连接的状态,实时监控网络状态
客户端请求->客户端socket发出链接请求,要链接的目标是服务端socket,为此,客户端socket必须先描述它要链接的服务端socket,指出服务端socket的地址和端口号,而后想服务端socket提出链接请求
链接确认->当服务端socket监听到或者说是接收到客户端socket的链接请求,它就响应客户端socket的请求,创建一个新的线程,把服务端socket的描述发给客户端,一旦客户端确认了,链接就行了。服务端socket基础处于监听状态
3.socket两种模式
socket有两种操做方式:面向链接和无链接的
具体使用什么模式得看场景,若是可靠性更重要的话,用面向链接的好一些,另外面向链接的操做使用tcp协议,效率会低一些,可是安全性高
无链接的操做使用数据报协议(udp),这种模式下的socket不须要链接目的socket,只是简单的透出数据报,无链接的操做是高效的,可是不安全。
4.socket层
5.理解socket
Socket是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来讲,一组简单的接口就是所有,让Socket去组织数据,以符合指定的协议
其实socket就是一个模块,咱们经过调用模块中的方法来创建两个进程之间的通讯