网络

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接口,转换为字节流便于在网络上传输和保存在本地文件。
 
    你知道的越多,你不知道的越多。

网络基础知识与协议说明。
    
                
            
        
浙公网安备 33010602011771号