网络

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号