关于http和tcpIp

256 阅读9分钟
// 说出几个http协议状态码?
// 200, 201, 302, 304, 400, 404, 500
// 200:请求成功
// 201:请求成功并且服务器创建了新的资源
// 302:服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。
// 304:自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
// 客户端是怎么知道这些内容没有更新的呢?其实这并不是客户端的事情,而是你服务器的事情,大家都知道服务器可以设置缓存机制,这个功能是为了提高网站的访问速度,
// 当你发出一个GET请求的时候服务器会从缓存中调用你要访问的内容,这个时候服务器就可以判断这个页面是不是更新过了,如果未更新过那么他会给你返回一个304状态码。
// 400:服务器不理解请求的语法。
// 404:请求的资源(网页等)不存在
// 500: 内部服务器错误

// 1xx:指示信息--表示请求已接收,继续处理。
// 2xx:成功--表示请求已被成功接收、理解、接受。
// 3xx:重定向--要完成请求必须进行更进一步的操作。
// 4xx:客户端错误--请求有语法错误或请求无法实现。
// 5xx:服务器端错误--服务器未能实现合法的请求。

//     http——超文本传输协议资源
//   https——用安全套接字层传送的超文本传输协议  解决 流量劫持和隐私数据劫持。
//   ftp——文件传输协议
//   mailto——电子邮件地址
//   ldap——轻型目录访问协议搜索
//   file——当地电脑或网上分享的文件
//   news——Usenet新闻组
//   gopher——Gopher协议
//   telnet——Telnet协议

    // http请求中的常用头(请求头)的含义:
    // Accept:告诉服务器,客户端支持的数据类型。
    // Host:客户机通过这个头告诉服务器,想访问的主机名。
    // Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)
    // Cookie:客户机通过这个头告诉服务器,可以向服务器带数据。

function https() {
    // 二、HTTP和HTTPS协议的区别
    // 1、https协议需要到证书颁发机构(Certificate Authority,简称CA)申请证书,一般免费证书很少,需要交费。  
    // 2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。  
    // 3、http和https使用的是完全不同的连接方式,使用的端口也不一样,前者是80,后者是443。 
    // 4、http的连接很简单,是无状态的 。 
    // 5、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议, 要比http协议安全。

    // 从上面可看出,HTTPS和HTTP协议相比提供了
    // 数据完整性:内容传输经过完整性校验
    // 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
    // 身份认证:第三方无法伪造服务端(客户端)身份
    // 其中,数据完整性和隐私性由TLS Record Protocol保证,身份认证由TLS Handshaking Protocols实现。

    // 握手的时候使用的非对称加密算法 ,用来加密握手之后的请求和应答
    // 传输信息的时候使用的对称加密,
    // 保证数据的完整性用的是hash算法(数字签名)

    // HTPS的工作过程
    // 1.客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了
    // 2.服务器从中选出一套加密算法和hash算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构
    // 3.客户端收到网站的证书之后要做下面的事情: 
        // 1.验证证书的合法性
        // 2.如果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密
        // 3.用约定好的hash算法计算握手消息,然后用生成的密钥进行加密,然后一起发送给服务器
    // 4.服务器接收到客户端传送来的信息,要求下面的事情: 
        // 1.用私钥解析出密码,,用密码解析握手消息,验证hash值是否和浏览器发来的一致
        // 2.使用密钥加密消息,回送
    // 5.如果计算法hash值一致,握手成功

}
   

function http2与1区别() {
    // 与HTTP 1.1相比,主要区别包括:

    // HTTP/2采用二进制格式而非文本格式
    // HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
    // 使用报头压缩,HTTP/2降低了开销
    // HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
}

function 三次握手四次挥手() {
    // 1. TCP建立连接为什么需要三次握手,两次不行吗?
    //     答:在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。
    //     “已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,
    //     而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server,
    //     本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,
    //     就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。


    // 为什么建立连接需要3次,而关闭连接需要4次?
    // 关闭连接时,当Server端收到FIN报文时,
    // 很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,。
    // 只有等到Server端所有的报文都发送完了,才能发送FIN报文,ACK和FIN不能一起发送,所以多一次。

    // 三次握手
    // A对B说:我的序号是x,我要向你请求连接;(第一次握手,发送SYN包,然后进入SYN-SEND状态)
    // B听到之后对A说:我的序号是y,期待你下一句序号是x+1的话(意思就是收到了序号为x的话,即ack=x+1),同意建立连接。(第二次握手,发送ACK-SYN包,然后进入SYN-RCVD状态)
    // A听到B说同意建立连接之后,对A说:与确认你同意与我连接(ack=y+1,ACK=1,seq=x+1)。(第三次握手,A已进入ESTABLISHED状态)
    // B听到A的确认之后,也进入ESTABLISHED状态。

    // 四次挥手
    // 1.A与B交谈结束之后,A要结束此次会话,对B说:我要关闭连接了(seq=u,FIN=1)。(第一次挥手,A进入FIN-WAIT-1)
    // 2.B收到A的消息后说:确认,你要关闭连接了。(seq=v,ack=u+1,ACK=1)(第二次挥手,B进入CLOSE-WAIT)
    // 3.A收到B的确认后,等了一段时间,因为B可能还有话要对他说。(此时A进入FIN-WAIT-2)
    // 4.B说完了他要说的话(只是可能还有话说)之后,对A说,我要关闭连接了。(seq=w, ack=u+1,FIN=1,ACK=1)(第三次挥手)
    // 5.A收到B要结束连接的消息后说:已收到你要关闭连接的消息。(seq=u+1,ack=w+1,ACK=1)(第四次挥手,然后A进入CLOSED)
    // 6.B收到A的确认后,也进入CLOSED。

}

function tcpUdp() {
    // TPC/UDP协议是传输层协议,有状态,主要解决数据如何在网络中传输。
    // HTTP是应用层协议,无状态,主要解决如何包装数据。
    // 最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
    // Socket是对TCP的封装,它相当于一个调用接口,通过Socket,使用TCP协议。
    // UDP和TCP协议的主要区别:
    // TCP面向连接的,在正式收发数据前,必须和对方建立可靠的连接。
    // UDP面向非连接的,它不与对方建立连接,而是直接就把数据包发送过去。 适用于一次只传送少量数据、对可靠性要求不高的应用环境
    //  
    // TCP                    UDP 
    // 面向连接             	 面向非连接 
    // 可靠                     不可靠 
    // 传输大量数据      		  少量数据 
    // 慢                       快
    //  
}
function 为什么tcp就是可靠的() {
    // [1] 确认和重传机制
    // 建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础
    // 传输过程中,如果Checksum校验失败、丢包或延时,发送端重传

    // [2] 数据排序
    // TCP有专门的序列号SN字段,可提供数据re-order

    // [3] 流量控制
    // 窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量

    // [4] 拥塞控制
    // TCP的拥塞控制由4个核心算法组成。
    // “慢启动”(Slow Start)
    // “拥塞避免”(Congestion avoidance)
    // “快速重传 ”(Fast Retransmit)
    // “快速恢复”(Fast Recovery)
}