美文网首页
网络相关

网络相关

作者: 十丈_红尘 | 来源:发表于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

相关文章

  • 网络相关

    一.HTTP HTTP是超文本传输协议 1.请求报文的格式 请求行:方法(get、post)、url(请求的地址)...

  • 网络相关

    1.HTTP 超文本传输协议 请求相应报文 连接建立流程 HTTP的特点 (1)请求/响应报文 a.请求报文 b....

  • 网络相关

    随机加密

  • 网络相关

    查看端口是否外网可访问

  • 网络相关

    控制器销毁后一定要释放NSURLSession因为它是单例不会被销毁 所以它所开启的任务也都不会被销毁 要自己手动...

  • 网络相关

    1.GET POSTget是向服务器请求资源,是幂等的。幂等:多次请求同一个URL得到的结果是相同的。post不是...

  • 网络相关

    网络相关 1、为什么TCP是可靠的,UDP早不可靠的?为什么UDP比TCP快? TCP/IP协议高,因为其拥有三次...

  • 网络相关

    网络请求 三次握手 你好,能听到我说话吗 你好,我能听到你说话,你能听到我说话吗 你好,我也能听到你说话,建立连接...

  • 网络相关

    ** TCP/IP四层模型 ** 应用层(HTTP、HTTPS、SMTP、POP3、FTP等) 传输层(TCP、U...

  • 网络相关

    Mars 微信终端跨平台组件 Mars 正式开源! 关于 iOS HTTP2.0 的一次学习实践 AFNetwor...

网友评论

      本文标题:网络相关

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