写在前面
面试真是让人头疼的事情。
这是一篇关于网络编程的相关概念的文章,全文不涉及代码,只对一些名词进行简单解释和扩展。概念性的是最容易出错的,如果有错误,欢迎指正。
什么是网络编程?
网络编程就是两台设备之间传递数据的过程,也可以说是利用套接字完成通讯的编程。
常用的通讯方式有Http通讯和Socket通讯。他们之前的区别是Http是一种协议,而Socket是接口。这两种无论是谁都是在传输层之上的。
网络的七层协议是什么?
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
链路层:这层主要是一些硬件的接口
网络层:这层主要是IP协议(它是Internet最基本的协议,他定义了电子设备如何联入因特网以及数据在他们之间传输的标准,IP是联网设备在因特网中的地址,以前是IPv4协议,但是让他的空间是有限的,以后往IPv6方向发展。IP分类总共有5类,ABCDE,A类常用于大型网络,像IBM,B类用于中型网络,C类用于小型网络,像局域网,校园网,D类是广播地址,E类是保留地址给未来使用)
传输层:这层主要是TCP和UDP协议
应用层:这层主要就是Http协议和Socket接口
TCP和UDP
TCP是一种传输控制协议,它是面向有连接的,它是一种可靠的点对点的通讯
UDP是一种用户数据协议,它是面向无连接的,它是一种不可靠的一点对多点通讯
TCP是通过三次握手来实现连接的
首先客户端发送一个空的数据包给服务端木,并且将客户端置为发送状态;服务端收到这个数据包,会响应客户端一个确认包,并将服务端置为接受状态
客户端收到服务器发回来的响应,然后再向服务端发一个确认包,此包发送完,那么客户端与服务端就建立了连接状态。
UDP传输比TCP更加有效率,因为它不需要三次握手,但是正因为如此,他不如TCP可靠
Socket和Http
Socket就是一对套接字,在服务端叫ServerSocket,在客户端叫ClientSocket,这个Socket就是一个方便TCP和UDP编程的一个接口。它是对TCP/IP协议的一个封装的接口。这个主要用来区分不同的应用进程或者网络连接的通信,实现数据传输的并发服务。
他通过指定传输层协议来进行连接,比如他指定tcp,那么Socket连接就是一个tcp连接。
在看一个Http协议,它是超文本传输协议,是基于TCP之上的协议。他最显著的特点是遵循“请求-响应”的模式。就是客户端向服务端发送请求,服务器收到后响应,然后请求就结束了,他就会断开连接,这就是“一次连接”,也是一个短连接。
http1.0是一个请求对应一个连接,请求结束断开连接
http1.1是一个连接对应多个请求,多个请求可以并发执行,不用等一个请求结束后再执行下一个请求。
为什么要维持Socket和Http连接?
如果是Socket连接,比如说指定传输层为Tcp,那么他就是一个Tcp连接,理论上三次握手成功之后连接建立就可以传输数据了,但是在实际中客户端和服务端之间还要通过多个节点。比如网关,路由器,防火墙等,防火墙会自动关闭不活跃的连接从而导致Tcp连接中断,这时候想维持连接,那么就要通过轮询的方式告诉网关这个连接是处于活跃状态。
如果是http连接,因为他请求的时候需要建立连接,所以他比socket复杂,他需要先给服务器发送请求,然后服务器才能将消息将消息推送到客户端。所以http一般是通过定义向服务器发送连接请求,不仅可以向服务端标明客户端是在线的,同事还可以查询服务是否有新的消息。
Http和Socket的区别?
http封装或者显示数据的具体形式,而socket提供数据传输的能力,http是汽车骨架,而socket是发动机。
http与https的区别?
可以把https理解为http over ssl,ssl是一个安全协议。它是基于安全套接字的超文本传传输协议。
https的请求地址以https://开头
https是安全的
http的端口是80,https的标准端口是443
http需要对传输的数据进行加密
https需要认证证书
使用https连接时,服务器需要认证证书
Http缓存机制
缓存对于移动端是非常重要的存在
1.可以减少请求次数,减少服务器的压力
2.本地数据请求更快,页面不会空白几百秒
3.无网络的情况下也可以请求数据
怎么做
1.发送请求时首先检查是否有缓存
2.检查是否过期,如果没有过期,则从本地加载数据
3.否则从网络上加载数据
这样可以大幅度减少带宽和提升用户体验
Http常用状态码
一般是三位数
1开头的是临时响应——比如100表示服务器已经收到请求的一部分,正在等待其他部分
2开头表示成功——比如 200 代表请求成功
3开头表示重定向——比如 305代表使用代理
4开头表示请求错误——比如404找不到网页
5开头表示服务器错误——比如500表示服务器遇到错误,无法完成请求 503 表示服务不可用
网友评论