TCP
三次握手
三次握手原因:
TCP是面向连接的,需要双方都确认连接的建立。
- 第一次握手:客户端请求建立连接
- 第二次握手:服务器应答,并请求建立连接
- 第三次握手:客户端针对服务器请求的确认应答
漏洞:
SYN洪泛攻击
网络服务所在的端口发送大量伪造原地址的攻击报文,发送到服务端,造成服务端上的半开连接队列被占满,从而阻止其他用户进行访问
解决方案:
- 无效连接监控释放
- 延缓TCB分配方法
- 防火墙
四次挥手
心跳
TCP有心跳控制,但是是2小时才检测这种,不靠谱
所以一般需要在应用层来控制心跳
TCP keepAlive 是在一定时间内(默认2小时)socket 上没有接收到数据时主动断开连接,避免浪费资源,TCP keepAlive 检测的主要是传输层的连通性,应用层心跳主要检测应用层服务是否可用,如如果出现死锁虽然 socket 是联通的但服务已经不可用。
TCP通信原理
Socket套接字
Socket使用ip+port作为TCP连接的端点
TCP缓冲区
每个TCP的Socket的内核中都有一个发送缓冲区和接收缓冲区,这是 操作系统的范畴
窗口机制
滑动窗口
- 发送方和接收方都会维护一个数据帧的序列,这个序列称为窗口
- 发送方的窗口大小由接收方确认
目的
- 确保数据不丢失
如果发送的数据丢失了可以重发 - 控制发送速度
以免接收方缓存不够大导致溢出,同时控制流量防止网络阻塞
Http过程
- 三次握手建立TCP连接
- 客户端向服务器发送请求get
- 客户端发送请求头信息
- 服务器应答http1.1 200 ok
- 返回响应头信息
- 服务器向客户端发送数据
- 服务器关闭TCP连接