网络

网络

Http和Https

Http Https
80端口 443端口
明文传输 SSL加密传输(公钥加密,私钥解密)
无证书 CA申请证书(证明公钥正确性)
无状态连接 加密传输,身份认证

Http报文

  • 请求报文

    • 请求行:http协议版本,url字段,方法字段(GET,POST)。
    • 请求头:Host(主机地址),User-Agent(浏览器类型),Accept(内容类型)。
    • 请求数据:post方法中,数据以key value的形式发送请求。
  • 响应报文

    • 状态码。
    • 响应头:服务器类型,内容类型,长度,日期时间。
    • 响应体。

状态码

  • 2XX
    • 200:正常处理。
    • 204:处理成功,无资源返回。
    • 206:资源部分请求。
  • 3XX
    • 301:永久性重定向。输入旧网址,输入栏显示新网址,页面显示新网址。
    • 302:临时性重定向。输入旧网址,输入栏显示旧网址,页面显示新网址。
    • 303:临时重定向,get访问。
  • 4XX
    • 400:请求报文语法错误。
    • 401:请求需要认证。
    • 403:未授权访问。
    • 404:服务器没有请求的资源。
  • 5XX
    • 500:服务器内部错误。
    • 503:服务器超载。

版本

  • 1.1
    • 缓存处理
    • 请求部分资源
    • 新增错误状态响应码
    • Host域共享主机
    • 长连接
  • 2.0
    • 二进制格式
    • 多路复用
    • 头部压缩

get和post

  • get的请求数据再url上,post的请求在http的包内。

  • get的长度有限制(浏览器限制),post理论上没有限制。

  • get产生一个TCP数据包(header和data),服务器响应200;post产生两个TCP数据包,先发送header,服务器响应100,再发送data,服务器响应200。

TCP

  • 三次握手:SYN,seq -> SYN,ACK,seq,ack -> ACK,seq,ack。防止过期的连接再次传到被连接的主机。
  • 四次挥手:FIN,seq -> ACK,seq,ack -> FIN,ACK,seq,ack -> ACK,seq,ack。
    • 需要发送一些数据,然后发送FIN同意关闭。

    • server大量close_wait状态

      • 出现在server收到FIN之后,server发送FIN之前。
      • 调用close:引用计数器减1,等于1则发送FIN关闭TCP连接。
      • 调用shutdown:直接发送FIN关闭TCP连接。
    • server大量time_wait状态

      • 开启socket重用。
      • 开启快速回收。
    • time_wait状态等待2MSL

      • 重发可能丢失的ACK报文。
  • 可靠传输
    • 重排序
    • 丢弃重复数据
    • 应答机制
    • 超时重发机制(前面的包传完后继续发送,延时越来越大)
    • 流量控制
    • 拥塞控制
      • 慢开始:一开始向网络注入的报文段少,只要网络没有拥塞,拥塞窗口增大。
      • 拥塞控制:拥塞避免阶段拥塞窗口线性增长。
      • 快重传:发送方尽快重传,而不是等超时重传计时器超时,提高网络吞吐量。
      • 快恢复
    • 粘包和拆包
      • Nagle优化算法封包,延时等待,将几个字符合成一个片段。

      • 报文末尾加入换行符表示完整信息。

      • 消息头声明长度,根据长度获取报文。

      • 规定报文长度,不足部分空位补齐。

  • TCP报文
    • 端口号
      • 源端口
      • 目标端口
    • 序号,确认号
    • 数据偏移,保留
    • 控制位
      • URG:紧急指针标志
      • PSH:push标志,报文不在缓冲区排队
      • RST:重置连接标志
      • SYN:同步序号标志
      • FIN:finish标志,用于关闭本方数据流
      • ACK:确认序号标志
    • 窗口:晃动窗口的大小
    • 校验和:对整个TCP报文奇偶校验
    • 紧急指针:URG标志为1时有效,偏移量,和顺序号中的字段相加表示最后一个字节的序号。
    • 选项(最长报文大小)和填充(保证TCP头是32的整数倍)。
    • 数据部分。

UDP

  • 无连接,即发送数据之前不需要建立连接。

  • 自定义重传策略,把丢包的延迟降到最低。

  • 传输效率高,不保证可靠交付。

BIO、NIO、AIO模型

BIO NIO AIO
没有线程可用时阻塞等待连接和数据传输。 处理并发:创建线程执行连接请求。 耗资源。 Channel,Selector,ByteBuffer组成。 Channel注册到Selector后监听,判断返回值处理请求和数据。 无需轮询,IO操作的状态改变后,系统会通知相应的线程处理。

TCP/IP网络协议

  • 应用层:用户面向应用程序的统称。

  • 传输层:提供应用程序间的通信。

  • 网络层:定义了IP地址格式。

  • 网络接口层:接受IP数据包并通过网络发送;网络上接收物理帧,抽出IP数据报文交给IP层。

ping指令的原理

  • 用来检测主机之间是否可通信。

  • 基于ICMP协议,发送回送应答消息,如果源主机在一定时间内收到,则认为主机可达。

  • 先根据ip地址在网络层中传播,再根据mac地址由数据链路层传到目标主机。

多路复用

  • Select:监听的fd数量限制,轮询。
  • Poll:大量fd的数组拷贝,无大小限制,水平触发,轮询。
  • Epoll:回调,没有并发连接数量的限制,利用文件映射内存加速与内存空间的消息传递,水平触发和边缘触发。

序列化

  • 对象实现Serializable接口,转换为字节流便于在网络上传输和保存在本地文件。
posted @ 2020-09-05 11:13  樱空废宅  阅读(150)  评论(0)    收藏  举报