TCP/IP是一个协议族,是一组不一样层次上的多个协议的组合,一般可分为4层协议系统,每组负责不一样的功能html
链路层:也称数据链路层或网络接口层,用于处理与电缆(或其余任何传输媒介)的物理接口细节; 数据链路层中的主要协议有点对点协议PPP,CSMA/CD协议,以太网802.3前端
网络层:网络层向上只提供简单灵活的、无链接的、尽最大努力交付的数据报服务。网络层不提供服务质量的承诺,即所传输的分组可能出错、丢失、重复和失序,固然也不保证分组交付的时限。git
网际层中主要协议有IP协议,地址解析协议ARP和网际控制报文协议ICMP等。 IP协议是网际层的核心,经过路由选择将下一跳IP封装后交给网络接口层。IP 数据报是无链接服务。 ICMP是网际层的补充,能够回送报文。用来检测网络是否通畅(使用ping命令)。 ARP是经过已知IP,寻找对于主机的MAC地址。github
传输层:主要为两台主机身上的应用程序提供端到端的通讯;TCP(传输控制协议)和UDP(用户数据包协议)
二者的区别以下:web
应用层:负责处理特定的应用程序细节;
应用层中主要协议有域名系统DNS,文件传输协议FTP,远程终端协议TELNET,超文本传输协议HTTP,简单邮件传送协议SMTP,邮件读取协议POP3和IMAP,动态主机配置协议DHCP等。
DNS:提供域名解析服务,提供域名到IP地址之间的转换,使用端口53
FTP:在异构网络中任意计算机之间传送文件,使用端口21
TELNET:提供用户远程登陆服务,使用端口23,使用明码传送,保密性差、简单方便
HTTP:用于实现万维网上的各类连接,即万维网客户程序与万维网服务器之间的链接,使用端口80
SMTP/POP三、IMAP:提供邮件的传输,用来控制信件的发送、中转、从邮件服务器读取邮件
DHCP:为新加入网络的计算机自动分配IP地址面试
OSI参考模型分层:
算法
模型把网络通讯的工做分为7层。1至4层被认为是低层,这些层与数据移动密切相关。5至7层是高层,包含应用程序级的数据。每一层负责一项具体的工做,而后把数据传送到下一层。由低到高具体分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。json
每一层的功能和协议有:浏览器
(1) 电路交换的三个过程
电路创建 -> 数据传输 -> 电路拆除
在通讯以前要在通讯双方之间创建一条被双方独占的物理通路(由通讯双方之间的交换设备和链路逐段链接而成)
(2) 报文交换
报文交换方式的数据传输单位是报文,报文就是站点一次性要发送的数据块,其长度不限且可变。当一个站要发送报文时,它将一个目的地址附加到报文上,网络节点根据报文上的目的地址信息,把报文发送到下一个节点,一直逐个节点地转送到目的节点。
每一个节点在收到整个报文并检查无误后,就暂存这个报文, 而后利用路由信息找出下一个节点的地址, 再把整个报文传送给下一个节点。所以,端与端之间无需先经过呼叫创建链接。
(3) 分组交换
分组交换是报文交换的一种改进,它将报文分红若干个分组,每一个分组的长度有一个上限,有限长度的分组使得每一个节点所需的存储能力下降了,分组能够存储到内存中,提升了交换速度。它适用于交互式通讯,如终端与主机通讯。缓存
当应用程序用TCP传送数据时,数据被送入协议栈中,而后逐个经过每一层直到被看成一串比特流送入网络。其中每一层对收到的数据都要增长一些首部信息(有时还要增长尾部信息),该过程下图所示。TCP传给IP的数据单元称做 TCP报文段或简称为TCP段。IP传给网络接口层的数据单元称做 IP数据报(IP datagram)。经过以太网传输的比特流称做帧(Frame)。
TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登录的端口,使用23端口,用户能够以本身的身份远程链接到计算机上,可提供基于DOS模式下的通讯服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。因为网络设备不少,无链接的服务就体现出其优点。
(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
在 TCP/IP协议族中,链路层主要有三个目的:
IP模块发送和接收IP数据报;
为ARP模块发送ARP请求和接收ARP应答;
为RARP发送RARP请求和接收RARP应答。TCP/IP支持多种不一样的链路层协议,这取决于网络所使用的硬件。
2.1 基本概念
以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称做MTU,最大传输单元。不一样类型的网络大多数都有一个上限。
当在同一个网络上的两台主机互相进行通讯时,该网络的MTU是很是重要的。可是若是两台主机之间的通讯要经过多个网络,那么每一个网络的链路层就可能有不一样的MTU。重要的不是两台主机所在网络的MTU的值,重要的是两台通讯主机路径中的最小MTU。它被称做路径MTU。
两台主机之间的路径 MTU不必定是个常数。它取决于当时所选择的路由。而选路不必定是对称的(从A到B的路由可能与从B到A的路由不一样),所以路径MTU在两个方向上不必定是一致的。
IP是TCP/IP协议族中最为核心的协议,全部的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。IP提供不可靠、无链接的数据报传输服务。不可靠是指它不能保证IP数据报能成功地到达目的地,仅提供最好的传输服务。无链接是IP并不维护任何关于后续数据报的状态信息。
互联网上的每一个接口必须有一个惟一的Internet地址(也称做IP地址)。IP地址长 32 bit。Internet地址并不采用平面形式的地址空间,如 一、 二、 3等。IP地址具备必定的结构,五类不一样的互联网地址格式如图所示
A类地址:以0开头, 第一个字节范围:0~127(1.0.0.0 - 126.255.255.255;
B类地址:以10开头, 第一个字节范围:128~191(128.0.0.0 - 191.255.255.255;
C类地址:以110开头, 第一个字节范围:192~223(192.0.0.0 - 223.255.255.255;
10.0.0.0—10.255.255.255, 172.16.0.0—172.31.255.255, 192.168.0.0—192.168.255.255。(Internet上保留地址用于内部)
ARP协议的用途:解决同一个局域网内主机或路由器的IP地址和MAC地址的映射问题。
如今源端计算机 A ( 192.168.3.1 )要和计算机 B(192.168.3.2)通讯。在计算机 A 发送信息前, 必须首先获得计算机B的MAC地址的映射关系。
ARP 协议工做过程以下:
反向地址转换协议就是将局域网中某个主机的物理地址转换为IP地址,好比局域网中有一台主机只知道物理地址而不知道IP地址,那么能够经过RARP协议发出征求自身IP地址的广播请求,而后由RARP服务器负责回答。
工做原理:
IP提供的是尽最大努力交付的无链接服务,所以并不能解决网络层中的数据报丢失、重复、延迟或乱序等问题,为了提升IP数据报成功交付的机会, 在网络层使用ICMP(Internet Control Message Protocol:Internet控制报文协议)协议来容许主机或者路由器报告差错和异常状况.
a. ICMP就像一个更高层的协议那样使用IP协议(ICMP消息被封装在IP数据报中);然而,ICMP是IP的一个组成部分,而且全部IP模块都必须实现它。
b. ICMP用来报告错误,是一个差错报告机制。它为遇到差错的路由器提供了向最初源站报告差错的办法,源站必须把差错交给一个应用程序或采起其它措施来纠正问题。
c. ICMP报文的种类有两种: ICMP差错报告报文和ICMP询问报文;
Ping(Packet Internet Groper)分组网间探测是ICMP的一个重要应用,用来测试两个主机之间的连通性。Ping使用了ICMP回送请求与回答报文。Ping是应用层直接使用网络层ICMP的一个例子。它没有经过运输层的TCP或UDP。
实现原理为: ping向目的主机发送4个32字节长的ICMP回送请求报文,若目的主机正常工做而且响应了该ICMP回送请求报文,就将发回ICMP回送回答报文。最后可得出的统计结果为目的IP地址,发送的,收到的和丢失的分组数,及往返时间的最小值、最大值和平均值。
Traceroute(Linux)/tracert(Windows)是用来侦测主机到目的主机之间所经路由状况的重要工具。
它的原理以下:
源主机首先给目的主机发送一个TTL=1的UDP数据包,而通过的第一个路由器收到这个数据包之后,就自动把TTL减1,而TTL变为0之后,路由器就把这个包给丢弃了,并同时产生”目的主机不可达”的ICMP差错报告报文给源主机。源主机收到这个数据报之后再发一个TTL=2的UDP数据报给目的主机,而后刺激第二个路由器给源主机发送差错报文。如此往复直到到达目的主机。这样,traceroute就拿到了全部的路由器IP。
传输层的主要功能:
TIME_WAIT状态:
TCP:
UDP:
HTTP 协议是无状态的(stateless),即不须要记忆交互的当前状态,由于过程简单。
HTTP 1.0协议是非持续链接。创建TCP链接后,一个HTTP请求过去,一个HTTP响应过来,而后就断开TCP链接。不一样于HTTP/1.0,HTTP/1.1 协议使用持续链接。
HTTP 使用了面向链接的 TCP 向上提供的服务。
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。
根据HTTP标准,HTTP请求可使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:请求的主机名,容许多个域名同处一个IP地址,即虚拟主机。
最后一个请求头以后是一个空行,发送回车符和换行符,通知服务器如下再也不有请求头。
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于须要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。
状态码 | 英文名称 | 中文描述 |
---|---|---|
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功。通常用于GET与POST请求 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的状况下,可确保浏览器继续显示当前文档 |
206 | Partial Content | 部份内容。服务器成功处理了部分GET请求 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。从此任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301相似。但资源只是临时被移动。客户端应继续使用原有URI |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端一般会缓存访问过的资源,经过提供一个头信息指出客户端但愿只返回在指定日期以后修改的资源 |
400 | Bad Request | 客户端请求的语法错误,服务器没法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
403 | Forbidden | 服务器理解请求客户端的请求,可是拒绝执行此请求 |
404 | Not Found | 服务器没法根据客户端的请求找到资源(网页)。经过此代码,网站设计人员可设置"您所请求的资源没法找到"的个性页面 |
500 | Internal Server Error | 服务器内部错误,没法完成请求 |
502 | Bad Gateway | 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求 |
503 | Service Unavailable | 因为超载或系统维护,服务器暂时的没法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,没法完成处理 |
首部字段名 | 说明 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 逐跳首部、链接的管理 |
Date | 建立报文的日期时间 |
Pragma | 报文指令 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Accept | 表明发送端(客户端)但愿接受的数据类型,如application/json、text/plain、text/html、image/jpeg、application/msword、image/png、application/pdf |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言 |
Host | 指定资源所在服务器 |
If-Match | 比较实体标记(ETag) |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 比较实体标记(与If-Match相反) |
Referer | 对请求中URI的原始获取方 |
User-Agent | Http客户端程序的信息 |
Accept-Range | 是否接受字节范围请求 |
ETag | 资源的匹配信息 |
Location | 另客户端重定向至指定URI |
Server | Http服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
在HTTP/1.0中,默认使用的是短链接。 从 HTTP/1.1起,默认使用长链接,用以保持链接特性。使用长链接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive在使用长链接的状况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP链接不会关闭,若是客户端再次访问这个服务器上的网页,会继续使用这一条已经创建的链接。Keep-Alive不会永久保持链接,它有一个保持时间,能够在不一样的服务器软件(如Apache)中设定这个时间。实现长链接要客户端和服务端都支持长链接。
HTTP协议的长链接和短链接,实质上是TCP协议的长链接和短链接。
短链接的操做步骤是: 创建链接——数据传输——关闭链接…创建链接——数据传输——关闭链接 长链接的操做步骤是: 创建链接——数据传输…(保持链接)…数据传输——关闭链接
参考文章: HTTP/2 头部压缩技术介绍
目前经常使用的加密算法主要分红对称加密算法与非对称加密算法
对称加密算法
发送方和接收方须要持有同一把密钥,发送消息和接收消息均使用该密钥。 相对于非对称加密,对称加密具备更高的加解密速度,但双方都须要事先知道密钥,密钥在传输过程当中可能会被窃取,所以安全性没有非对称加密高。
非对称加密算法
接收方在发送消息前须要事先生成公钥和私钥,而后将公钥发送给发送方。发送放收到公钥后,将待发送数据用公钥加密,发送给接收方。接收到收到数据后,用私钥解密。在这个过程当中,公钥负责加密,私钥负责解密,数据在传输过程当中即便被截获,攻击者因为没有私钥,所以也没法破解。非对称加密算法的加解密速度低于对称加密算法,可是安全性更高。
参考文章:
本人方向为前端,从八月份准备到九月份面试到十月份拿到满意的offer,前先后后大概两个月,期间面试了不少互联网公司,在面试中发现基础占了80%,项目和其余占了20%,如今面试结束了,想系统的把前端常见的面试问题整理一下,主要分为计算机网络与HTTP,HTML5,CSS3,算法,其余面试遇到的问题这几个类别,方便本身之后查阅复习也能够给别人参考,尚未写完,目前正在补充中,地址:github.com/wangfengyua…