计算机网络体系结构

OSI参考模型

OSI(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。ISO为了更好的使网络应用更为普及,推出了OSI参考模型,这样所有的公司都按照统一的标准来指定自己的网络,就可以互通互联了。
OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)。

TCP/IP四层协议

(数据链路层、网络层、传输层、应用层)

  • 应用层
    应用层最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,TELNET等。
  • 传输层
    建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。
  • 网络层
    本层通过IP寻址来建立两个节点之间的连接。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。
  • 数据链路层
    通过一些规程或协议来控制这些数据的传输,以保证被传输数据的正确性。实现这些规程或协议的硬件和软件加到物理线路,这样就构成了数据链路

什么是TCP/IP和UDP

TCP/IP即传输控制/网络协议

是面向连接的协议,发送数据前要先建立连接(发送方和接收方的成对的两个之间必须建 立连接),TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达

UDP它是属于TCP/IP协议族中的一种。

是无连接的协议,发送数据前不需要建立连接,是没有可靠性的协议。因为不需要建立连接所以可以在在网络上以任何可能的路径传输,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

TCP与UDP区别:

  • TCP是面向连接的协议,发送数据前要先建立连接,TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达;
    UDP是无连接的协议,发送数据前不需要建立连接,是没有可靠性;

  • TCP通信类似于于要打个电话,接通了,确认身份后,才开始进行通行;
    UDP通信类似于学校广播,靠着广播播报直接进行通信。

  • TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多;

  • TCP是面向字节流的,UDP是面向报文的;面向字节流是指发送数据时以字节为单位,一个数据包可以拆分成若干组进行发送,而UDP一个报文只能一次发完。

  • TCP首部开销(20字节)比UDP首部开销(8字节)要大

形容一下TCP和UDP

TCP通信可看作打电话:
李三(拨了个号码):喂,是王五吗?
王五:哎,您谁啊?
李三:我是李三,我想给你说点事儿,你现在方便吗?
王五:哦,我现在方便,你说吧。
甲:那我说了啊?
乙:你说吧。
(连接建立了,接下来就是说正事了…)

UDP通信可看为学校里的广播:
播音室:喂喂喂!全体操场集合

运行在TCP 或UDP的应用层协议分析

运行在TCP协议上的协议:

HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
HTTPS(HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
FTP(File Transfer Protocol,文件传输协议),用于文件传输。
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。
SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。

运行在UDP协议上的协议:

NTP(Network Time Protocol,网络时间协议),用于网络同步。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。

运行在TCP和UDP协议上:

DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。

TCP的三次握手

什么是TCP的三次握手
在网络数据传输中,传输层协议TCP是要建立连接的可靠传输,TCP建立连接的过程,我们称为三次握手。

三次握手

  • 第一次握手:Client将SYN置1,随机产生一个通讯初始序列号seq发送给Server,进入SYN_SENT状态

  • 第二次握手:Server收到Client的SYN=1之后,知道客户端请求建立连接,将自己的SYN置1,ACK置1,产生一个acknowledge number=sequence number+1,并随机产生一个自己的通讯初始序列号,发送给客户端;进入SYN_RCVD状态;

  • 第三次握手:客户端检查acknowledge number是否为序列号+1,ACK是否为1,检查正确之后将自己的ACK置为1,产生一个acknowledge number=服务器发的序列号+1,发送给服务器;进入ESTABLISHED状态;服务器检查ACK为1和acknowledge number为序列号+1之后,也进入ESTABLISHED状态;完成三次握手,连接建立。

简单来说就是 :

  • 客户端向服务端发送SYN
  • 服务端返回SYN,ACK
  • 客户端发送ACK

TCP的四次挥手

什么是TCP的四次挥手
在网络数据传输中,传输层协议断开连接的过程我们称为四次挥手

四次挥手

  • 第一次挥手:Client将FIN置为1,发送一个序列号seq给Server;进入FIN_WAIT_1状态;

  • 第二次挥手:Server收到FIN之后,发送一个ACK=1,acknowledge number=收到的序列号+1;进入CLOSE_WAIT状态。此时客户端已经没有要发送的数据了,但仍可以接受服务器发来的数据。

  • 第三次挥手:Server将FIN置1,发送一个序列号给Client;进入LAST_ACK状态;

  • 第四次挥手:Client收到服务器的FIN后,进入TIME_WAIT状态;接着将ACK置1,发送一个acknowledge number=序列号+1给服务器;服务器收到后,确认acknowledge number后,变为CLOSED状态,不再向客户端发送数据。客户端等待2*MSL(报文段最长寿命)时间后,也进入CLOSED状态。完成四次挥手。

简单来说

  • 客户端向服务端发送FIN
  • 服务端向客户端返回ACK
  • 服务端向客户端返回FIN
  • 客户端向服务端发送ACK

客户端TIME_WAIT状态的意义是什么?

第四次挥手时,客户端发送给服务器的ACK有可能丢失,TIME_WAIT状态就是用来重发可能丢失的ACK报文。如果Server没有收到ACK,就会重发FIN,如果Client在2MSL的时间内收到了FIN,就会重新发送ACK并再次等待2MSL,防止Server没有收到ACK而不断重发FIN。 MSL(Maximum Segment Lifetime),指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

socket

  • 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。

  • 但是,Socket所支持的协议种类也不光TCP/IP、UDP,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

  • socket连接就是所谓的长连接,客户端和服务器需要互相连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉的,但是有时候网络波动还是有可能的

  • Socket偏向于底层。一般很少直接使用Socket来编程,框架底层使用Socket比较多,

  • 位于应用层和传输层之间,我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

http

Http协议是对客户端和服务器端之间数据之间实现可靠性的传输文字、图片、音频、视频等超文本数据的规范,格式简称为“超文本传输协议”

Http协议属于应用层,及用户访问的第一层就是http

Socket和http的区别和应用场景

  • Socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;

  • Socket适用场景:网络游戏,银行持续交互,直播,在线视屏等。

  • http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断开等待下次连接

  • http适用场景:公司OA服务,互联网服务,电商,办公,网站等等等等

什么是http的请求体?

HTTP请求体由:请求行 、请求头、请求数据组成的

http的响应报文有哪些?

http的响应报是服务器返回给我们的数据,必须先有请求体再有响应报文

响应报文包含三部分 状态行、响应首部字段、响应内容实体实现

http和https的区别?

其实HTTPS就是从HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护

区别:
HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;
HTTPS需要用到SSL证书,而HTTP不用;
Https默认端口号是443.而http默认端口号是80
HTTPS基于传输层(介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议),HTTP基于应用层
HTTPS在浏览器显示安全锁,HTTP没有显示;

https工作流程

1.Client发起一个HTTPS的请求,根据RFC2818的规定,Client知道需要连接Server的443(默认)端口。
2.Server把事先配置好的公钥证书(public key certificate)返回给客户端。
3.Client验证公钥(RSA加密)证书:比如是否在有效期内,证书的用途是不是匹配Client请求的站点,是不是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root证书或者Client内置的Root证书)。如果验证通过则继续,不通过则显示警告信息。
4.Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密(RSA加密)这个对称密钥,发给Server。
5.Server使用自己的私钥(private key)解密这个消息,得到对称密钥。至此,Client和Server双方都持有了相同的对称密钥。
6.Server使用对称密钥加密“明文内容A”,发送给Client。
7.Client使用对称密钥解密响应的密文,得到“明文内容A”。
8.Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”

常用HTTP状态码是怎么分类的,有哪些常见的状态码?

HTTP状态码表示客户端HTTP请求的返回结果、标识服务器处理是否正常、表明请求出现的错误等。
1xx:
指示信息–表示请求已接收,正在处理

2xx:
成功–表示请求已被成功接收、理解、接受

3xx:
重定向–要完成请求必须进行更进一步的操作

4xx:
客户端错误–请求有语法错误或请求无法实现

5xx:
服务器端错误–服务器未能实现合法的请求

Http协议中有那些请求方式

PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有 > 效。
DELETE: 删除文件,与PUT方法相反,删除对应URI位置的文件。

GET方法与POST方法的区别

区别一:
get重点在从服务器上获取资源,post重点在向服务器发送数据;

区别二:
Get传输的数据量小,因为受URL长度限制,但效率较高;
Post可以传输大量数据,所以上传文件时只能用Post方式;

区别三:
get是不安全的,因为get请求发送数据是在URL上,是可见的,可能会泄露私密信息,如密码等;
post是放在请求头部的,是安全的

http版本的对比

HTTP1.0版本的特性:

  • 早先1.0的HTTP版本,是一种无状态、无连接的应用层协议。
  • HTTP1.0规定浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

HTTP1.1版本新特性

  • 默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求
  • 管线化 HTTP Pipelining,客户端可以同时发出多个HTTP请求,而不用一个个等待响应(断点续传原理)

HTTP2.0版本的特性

  • 二进制分帧(采用二进制格式的编码将其封装)
  • 头部采用HPACK压缩(设置了专门的首部压缩设计的HPACK算法。)
  • 流量控制(设置了接收某个数据流的多少字节一些流量控制)
  • 多路复用(可以在共享TCP链接的基础上同时发送请求和响应)
  • 请求优先级(可以通过优化这些帧的交错和传输顺序进一步优化性能)
  • 服务器推送(就是服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资 源无需客户端明确的请求。(重大更新))

什么是对称加密与非对称加密

  • 对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;

  • 而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,非常的慢

cookie和session对于HTTP有什么用?

HTTP协议本身是无法判断用户身份。所以需要cookie或者session

什么是cookie

cookie是由Web服务器保存在用户浏览器上的文件(key-value格式),可以包含用户相关的信息。客户端向服务器发起请求,就提取浏览器中的用户信息由http发送给服务器

什么是session

session 是浏览器和服务器会话过程中,服务器会分配的一块储存空间给session。

服务器默认为客户浏览器的cookie中设置 sessionid,这个sessionid就和cookie对应,浏览器在向服务器请求过程中传输的cookie 包含 sessionid ,服务器根据传输cookie 中的 sessionid 获取出会话中存储的信息,然后确定会话的身份信息。

cookie与session区别

  • cookie数据存放在客户端上,安全性较差,session数据放在服务器上,安全性相对更高
  • 单个cookie保存的数据不能超过4K,session无此限制
  • session一定时间内保存在服务器上,当访问增多,占用服务器性能,考虑到服务器性能方面,应当使用cookie。

参考