1、TCP的连接和释放连接?
连接建立的过程:
·Client向Server发送连接请求
·Server接收到Client的请求后,同意建立连接后向Client发送ACK确认报文,并为这次连接的建立分配资源
·Client接收到对方发来的ACK确认后也向Server发送ACK确认报文,连接建立完成
思考题:TCP的连接建立为什么需要三次握手(即进行了两次确认)?
答:这主要是为了防止已经失效的连接请求报文段突然又传给了服务器,因而会产生错误。假如现在Client端向Server端发送请求连接,而这个报文段却在网络结点中长时间滞留了,在连接释放以后Client发送的这个报文段才到达对方,此时这个报文段就是一个已经失效的连接请求报文段。但Server收到这个报文段后并不知其失效,以为是Client又发送的一次请求,就会向Client发送同意建立连接的确认报文段。但问题是Client并没有给Server发送请求,因此也会对这个确认报文段不予理睬,也不会发送数据。但Server会以为连接建立了,并会一直处于等待状态,等待对方的数据,在这样的情况下,Server的一些资源就会浪费了。
TCP释放连接(四次挥手):
·Client主动发送释放连接的请求,并停止发送数据。Client将连接释放报文段的首部的FIN置为1,其序号为u,它等于前面已传送过的数据的最后一个字节的序号加1。此时Client进入FIN-WAIT-1(终止等待1)状态。
·Server接收到Client的释放请求后发出确认,确认号是u+1,而确认报文段自己的序号是v,等于Server前面已经传送过的数据的最后一个字节的序号加1。接着Server进入CLOSE-WAIT(关闭等待)状态,并且TCP会通知高层应用程序,此时Client到Server的连接已经关闭,但Server到Client的连接仍然存在,因此此时的TCP连接处于半关闭状态。Server仍然有可能会给Client发送数据,Client也要接收。
·Client收到来自对方的确认后,进入FIN-WAIT-2(终止等待2)状态,等待Server释放连接。
·Server发送完数据后发送释放报文段,其应用程序就通知TCP释放连接。Server发送的报文段中必须将FIN置为1。由于在半关闭状态Server可能也发送了数据,因此假定此时Server的序号为w,除此之外,Server也必须重复上次发送的确认号u+1。发送完后Server进入LAST-ACK(最后确认)状态,等待Client确认。
·Client收到释放报文段后发送确认报文段。此时Client并没有释放掉连接,而是进入TIME-WAIT(时间等待)状态,等过了2MSL时间后才进入到CLOSED状态。
为什么A要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态? 为了保证B能收到A的确认应答。 若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。
2、浏览器从接收到一个URL到最后展示出页面,经历了哪些过程?
1、DNS解析(UDP)
第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
第五步:重复第四步,直到找到正确的纪录。
2、tcp连接,三次握手。(TCP,IP,ARP)
3、浏览器向服务器发送http请求,浏览器发送请求头信息,服务器处理请求,服务器做出应答,服务器发送应答头信息,服务器发送数据。
4、页面渲染。
3、长连接
TCP的保活功能主要为服务器应用提供。如果客户端已经消失而连接未断开,则会使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,此时服务器将永远等待客户端的数据。保活功能就是试图在服务端器端检测到这种半开放的连接。
如果一个给定的连接在两小时内没有任何动作,服务器就向客户发送一个探测报文段,根据客户端主机响应探测4个客户端状态:
客户主机依然正常运行,且服务器可达。此时客户的TCP响应正常,服务器将保活定时器复位。
客户主机已经崩溃,并且关闭或者正在重新启动。上述情况下客户端都不能响应TCP。服务端将无法收到客户端对探测的响应。服务器总共发送10个这样的探测,每个间隔75秒。若服务器没有收到任何一个响应,它就认为客户端已经关闭并终止连接。
客户端崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
客户机正常运行,但是服务器不可达。这种情况与第二种状态类似。
TCP协议在哪一层?IP协议在那一层?HTTP在哪一层?
数据链路层:RARP
网络层: IP,ICMP,IGMP,ARP
传输层:TCP ,UDP
应用层:Telnet,FTP,SMTP,SNMP. HTTP
get和post区别
get参数通过url传递,post放在request body中。
get请求在url中传递的参数是有长度限制的,而post没有。
get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
get请求只能进行url编码,而post支持多种编码方式
get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
cookie和session介绍一下区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
TCP、UDP的区别
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的 UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
HTTP、HTTPS
HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
对称秘钥:对称密钥加密又叫专用密钥加密,即发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算。通常有两种模式:流加密和分组加密。
非对称秘钥:非对称加密算法需要两个密钥:公开秘钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
知道 HTTPS 通信过程吗?
客户端发送请求到服务器端
服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在
客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端
服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端
客户端使用共享密钥解密数据
SSL加密建立
Ping
ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。
计算机网络模型
1.1 应用层
应用层的任务是通过应用进程间的交互来完成特定网络应用。
应用层协议定义的是应用进程间通信和交互的规则。对于不同的网络应用需要有不同的应用层协议,应用层包括许多协议,例如HTTP(Web应用的主要协议)、SMTP(邮件传输)和FTP(文件传送)等。再比如我们每天都在使用的DNS域名系统。
我们把位于应用层交互的数据单元称为报文。
负责向两台主机中进程之间的通信提供通用的数据传输服务。
TCP向它的应用程序提供了面向连接的、可靠的数据传输服务。其数据传输的单位是报文段。
UDP协议向它的应用程序提供无连接的、尽最大努力的数据传输服务。其数据传输的单位是用户数据报。
负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。
网络层包括著名的IP协议,该协议定义了在数据报中的各个字段以及端系统和路由器如果作用于这些字段。网络层也包括决定路由的路由选择协议,它使得数据报根据该路由从源传输到目的地。
在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送帧。每一帧包括数据和必要的控制信息。
物理层的任务是将该帧中的一个一个比特从一个结点移动到下一个结点。物理层的协议是和链路相关的,并且进一步与该链路的实际传输媒体相关。比如,以太网具有许多物理层协议:一个是关于双绞铜线的,另一个是关于同轴电缆的,还有是关于光纤的等等。
拥塞避免
慢开始(slow-start)
拥塞避免算法(congestion avoidance)
快重传(fast retransmit)
快恢复(fast recovery)
HTTP1.0和1.1区别
HTTP1.0和HTTP1.1的区别 - 雪之灵 - 博客园
HTTP1.0、HTTP1.1 和 HTTP2.0 的区别 - _浪潮之巅.☆ - 博客园
TCP与HTTP有什么关系
http是要基于TCP连接基础上的,简单的说,TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上的。
SSL 握手
客户端发送随机数1,支持的加密方法(如RSA公钥加密)
服务端发送随机数2,和服务器公钥,并确认加密方法
客户端发送用服务器公钥加密的随机数3
服务器用私钥解密这个随机数3,用加密方法计算生成对称加密的密钥给客户端,
接下来的报文都用双方协定好的加密方法和密钥,进行加密
HTTP状态码
1XX 信息,服务器收到请求,需要请求者继续执行操作
100:客户端应当继续发送请求
2XX 成功,操作被成功接收并处理
200:请求已成功,请求所希望的响应头或数据体将随此响应返回
3XX 重定向,需要进一步的操作以完成请求
301:被请求的资源已永久移动到新位置
302:请求的资源临时从不同的 URI响应请求
4XX 客户端错误,请求包含语法错误或无法完成请求
401:当前请求需要用户验证
403:服务器已经理解请求,但是拒绝执行它。
404:请求失败,请求所希望得到的资源未被在服务器上发现
5XX 服务器错误,服务器在处理请求的过程中发生了错误
500:这个问题都会在服务器端的源代码出现错误时出现。
503:由于临时的服务器维护或者过载,服务器当前无法处理请求