美文网首页
网络相关

网络相关

作者: 十丈_红尘 | 来源:发表于2019-02-16 04:05 被阅读0次

    一 OSI七层协议


    物理层 : 网卡
    数据链路层 : 交换机
    网络层 : 路由器
    传输层 : 协议TCP/IP
    会话层 表示层 应用层 : 多系统之间通信


    二 TCP三次握手


    1️⃣建立连接时,客户端向服务器发送SYN包(SYN=j),然后客户端进行SYN-SENT状态,等待服务器回应;
    2️⃣此时服务器是LISTEN状态,服务器收到SYN包会想客户端确认,服务器向客户端确认SYN同时自己也发送一个SYN包,此时服务器进入SYN-RCVD状态;
    3️⃣客户端收到服务器SYN+ACK包,向服务器发送确认包,发送完毕后客户端和服务器都进入ESTAB-LISHED状态,完成三次握手;

    1.为什么要三次握手?

     为了初始化Sequence Numer的初始值;

    2. 隐患(超时问题)

     1. Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认;
     2. Server会不断重试直至超时,Linux默认等待63秒断开(重试5次,时间的平方);
     3. SYN Flood攻击的风险(可以耗尽服务器资源);
     4. tcp-syncookies参数回发SYN-cookies;
     5. 保活机制 :
      1. 向对方发送保活探测报文,如果未收到相应则继续重发;
      2. 如果发送次数达到保活探测数则中断连接;


    三 TCP的四次挥手


    1️⃣第一次挥手 : Client发送一个FIN用来关闭Client到Server的数据传输,Client进入FIN_WAIT_1状态;
    2️⃣第二次挥手 : Server收到FIN后会发送一个ACK给Client,确认序号为收到的序号+1,Server进入CLOSE_WAIT状态;
    3️⃣第三次挥手 : Server发送一个FIN用来关闭Server到Client的数据传输,Server进入LAST_ACK状态;
    4️⃣第四次挥手 : Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到的序号+1,Server进入CLOSED状态,完成四次挥手;

    1. 为什么会有TIME_WAIT状态?

     1. 确保有足够的时间让对方收到ACK包;
     2. 避免新旧连接混淆;

    2. 为什么需要四次挥手才能释放连接?

     因为全双工的,发送方和接收方都需要ACK报文和FIN报文,发送方和接收方各只需两次挥手即可,但是有一方是被动的就导致看上去就成了四次挥手;

    3. 为什么服务器出现大量CLOSE_WAIT?

     对方关闭socket连接,我方忙于读或者写,没有及时关闭连接,这种情况通常是连接没有释放导致的bug,或者是线程池的配置不合理;


    四 TCP与UDP的区别

    1. UDP的特点

     1. 面向非连接;
     2. 不维护连接状态支持同时向多个客户端传输数据;
     3. 数据包报头只有8个字节,开销比较小;
     4. 数据传输速度只受限于数据生成效率 网络传输速率以及机器性能;
     5. 不保证可靠交付,所以不需要维护复杂的连接状态;
     6. 面向报文,不对传输的数据进行拆分与合并;

    2. TCP与UDP的区别

     1. 面向对象不同 : TCP面向连接,UDP面向报文;
     2. 可靠性 : TCP保证传输可靠性,UDP不保证;
     3. 有序性 : TCP有序,UDP无序;
     4. 速度 : TCP相对较慢,UDP较快;
     5. 量级 : TCP占用的资源较多,UDP较小;


    五 TCP窗口滑动

    使用窗口滑动做流量控制和乱序重拍

    六 HTTP与HTTPS

    1. HTTP特点

     1. 支持客户/服务器模式;
     2. 简单快速;
     3. 灵活;
     4. 无连接/无状态;

    2. HTTP请求结构
    3. HTTP的请求/响应的步骤

     1. 客户端连接到Web服务器;
     2. 发送HTTP请求;
     3. 服务器接受请求并返回HTTP响应;
     4. 释放TCP连接;
     5. 客户端浏览器解析HTML内容;

    4. 在浏览器地址栏键入URL,按下回车之后的流程

     1. DNS解析;
     2. TCP连接;
     3. 发送HTTP请求;
     4. 服务器处理请求并返回HTTP报文;
     5. 浏览器解析渲染页面;
     6. 浏览器释放连接,连接结束;

    5. HTTP状态码

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

    6. HTTP常用状态码

     1. 200 : 正常返回信息;
     2. 400 : 客户端请求有语法错误不能被服务器理解;
     3. 401 : 请求未经授权,这个状态码必须和WWW-Authenticate报头一起使用;
     4. 403 : 服务器收到请求但拒绝提供服务;
     5. 404 : 请求资源不存在;
     6. 500 : 服务器发生了不可预知的错误;
     7. 503 : 服务器当前不能处理客户端请求,一段时间后可能恢复;

    7. HTTP和HTTPS的区别
    7.1. SSL

     1. 为网络通信提供安全及数据完整性的一种安全协议;
     2. 是操作系统对外的API;
     3. 采用身份验证和数据加密保证网络通信提供安全及数据完整性;

    7.2 HTTPS数据传输流程

     1. 浏览器将支持的加密算法信息发送给服务器;
     2. 服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器;
     3. 浏览器验证证书的合法性,并结合证书公钥加密信息发送给服务器;
     4. 服务器使用私钥解密信息,验证哈希加密响应信息回发浏览器;
     5. 浏览器解密响应信息,并对消息进行验证,之后进行加密交互数据;

    7.3 HTTP和HTTPS的区别

     1. HTTPS需要到CA申请证书,HTTP不需要;
     2. HTTPS密文传输,HTTP明文传输;
     3. 连接方式不同,HTTPS默认使用443端口,HTTP默认使用80端口;
     4. HTTPS = HTTP + 加密 + 认证 + 完整性保护,较HTTP安全;

    7.4 HTTPS不一定安全

     1. 浏览器默认填充http://请求需要跳转有被劫持的风险;
     2. 可以使用HSTS优化;


    七 GET和POST请求的区别

    HTTP报文层面 : GET将请求信息放在URL中,POST放在报文体中;
    数据库层面 : GET符合幂等性和安全性,POST不符合;
    其他层面 : GET可以被缓存,POST不可以;


    八 Cookie和Session的区别

    1. Cookie简介 :

     1. 是由服务器发给客户端的特殊信息,以文本的形式存放在客户端;
     2. 客户端再次请求的时候,会把Cookie回传;
     3. 服务器接收到以后,会解析Cookie生成与客户端相对应的功能;

    2. Cookie的设置以及发送过程 :
    3. Session简介 :

     1. 服务器端的机制,在服务器上保存信息;
     2. 解析客户端请求并操作session id,按需保存状态信息;

    4. Session的实现方式 :

     1. 使用Cookie来实现;
     2. 使用URL回写来实现;

    5. Cookie和Session的区别 :

     1. Cookie数据存放在客户的浏览器上,Session数据放在服务器上;
     2. Session相当于Cookie更安全;
     3. 若考虑减轻服务器负担可以考虑使用Cookie;


    九 Socket

    Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口;
    1. Socket通信流程 image.png

    相关文章

      网友评论

          本文标题:网络相关

          本文链接:https://www.haomeiwen.com/subject/kznveqtx.html