文章引用了 : https://www.cnblogs.com/Andya/p/7272462.html
wireshark 用来抓包的软件
1.OSI 开放式互联网参考模型(7层)
物理层,数据链路层,网络层(IP),传输层(TCP/UDP),
会话层,表示层,应用层
OSI模型只是一个参考的标准,并没有实现
OSI的实现是“TCP/IP”
2.“TCP/IP”协议 分四层
3.IP 协议 网络层 不可靠传输
4.TCP 协议 传输层 面向连接的、可靠的、基于字节流的传输层通信协议
6个标志位:
URG-紧急指针有效
ACK-确认序号有效
PSH-接收方应尽快将这个报文交给应用层
RST-连接重置
SYN-同步序号用来发起一个连接
FIN-终止一个连接
(IP是用来标示唯一的主机,
TCP中的端口号用来标示唯一的进程)
5.tcp三次握手
第一次:A(SYN-SENT) ----> B(LISTEN) SYN=1,seq=x,
第二次: B (SYN-RCVD) ----> A SYN=1,ACK=1,seq=y,ack=x+1
第三次:A(ESTABLISHED) ----> B(ESTABLISHED) ACK=1,seq=x+1,ack=y+1
ACK是用来确认是否接收到了数据
Seq 是用来排序,用来最后将tcp传输的包进行排序,
同时防止丢包后,重新发缺少序号的包

server 收到 client 的SYN,回复SYN-ACK的后,为再收到client 发来的 ACK包,sever则会不断重试请求直至超时,liunx默认等待是63秒才断开连接,差不多5次
会造成 SYN Flood的防护措施
SYN队列满了后,通过tcp_syncookies参数回发SYN Cookie
若为正常连接则Client会回发SYN Cookie,直接建立连接
建立连接后,client出现故障:
保活机制(keep alive time)
1.向对方发送保活探测报文,如果未收到响应则继续发送
尝试次数达到保活探测数仍未响应则应中断连接。
TCP 四次挥手
第一次: A---->B FIN=1,seq=u
第二次: B---->A ACK=1,seq=v,ack=u+1
第三次: B---->A FIN=1,ACK=1,seq=w,ack=u+1
第四次: A---->B ACK=1,seq=u+1,ack=w+1
为什么会有TIME_WAIT状态
确保有足够的时间让对方收到ACK包
避免新旧连接混淆
服务器出现大量CLOSE_WAIT状态的原因
对方关闭socket连接,我方忙于读或写,没有
及时关闭连接
检查代码,特别是释放资源的代码
检查配置,特别是处理请求的线程配置
linux 命令:netstat
UDP协议
没有报错重传,滑动窗口
面向非连接
不维护连接状态,支持同时向多个客户端传输相同的消息
数据包报头只有8个字节,额外开销较小
吞吐量只受限于数据生成速率、传输速率以及机器性能
不拆分或者合并报文
TCP与UDP 区别
面向连接 VS 无连接
可靠性
有序性
速度
量级
TCP的滑动窗口
RTT 和 RTO
RTT:发送一个数据包到收到对应的ACK,所花的时间
RTO:重传时间间隔,需要根据RTT进行计算
TCP使用滑动窗口做流量控制与乱序重排
保证TCP的可靠性
保证TCP的流控特性
可靠性是通过滑动窗口的确认重传机制
HTTP:
http协议的主要特点:
支持客户/服务器模式
简单快速
灵活
无连接
无状态
在浏览器地址栏输入url,之后经历的流程
1.DNS解析,根据URL 从 浏览器缓存,系统缓存,路由缓存等等找IP地址
2.根据IP地址和对应的端口 建立TCP
3.发送HTTP请求
4.服务器处理请求并返回HTTP报文
5.浏览器解析渲染页面
HTTP状态码
1xx : 指示信息-表示请求已接受,继续处理
2xx :成功--表示请求已被成功接收、理解、接受
3xx : 重定向--要完成请求必须进行更进一步的操作
4xx :客户端错误--请求有语法错误或请求无法实现
5xx :服务器端错误--服务器未能实现合法的请求
200 成功
400 客户端请求有语法问题
401 请求未经授权
404 没找到页面
403 服务器接到请求,但拒绝服务
500 服务器问题
503 服务器当前不能处理客户端请求,一段时间后才能回复正常
因为http是无状态的所以要引用
cookie 和 session
cookie 是由服务器发给客户端的特殊信息,以文本
的形式存放在客户端。
客户端再次请求的时候,会把Cookie回发
服务器接收到后,会解析Cookie生成与客户端
相对应的内容
session 服务器端的机制,在服务器上保存的信息
解析客户端请求并操作session id,按需保存状态信息
实现方式:使用cookie 或url 实现 jsessionID
cookie 更快 session 更安全
http 与 https 的区别
https 中包含了
SSL :
为网络通信提供安全及数据完整性的一种安全协议
是操作系统对外的API
采用身份验证 和 数据加密 保证安全
https数据的传输流程:
浏览器将支持的加密算法信息发送给服务器
服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器
浏览器验证证书的合法性,并结合证书中的公钥加密
信息发送给服务器
服务器使用私钥解密信息,验证哈希,加密响应消息
回发浏览器
浏览器解密响应消息,并对消息进行验真,之后
进行加密交互数据
https 需要到CA申请证书,Http 不需要
https 密文传输 , http 明文传输
https 默认使用443端口 http 默认使用80端口
socket
ip+端口 唯一标示网络中的进程