网络安全--浅谈TCP协议

目录

  • 简介
  • 连接机制(三次握手,四次挥手)
    • 建立连接
    • 断开连接
    • 确认应答机制(ACK机制)
    • 超时重传机制
    • 滑动窗口
    • 流量控制
    • 拥塞控制
    • 延迟应答
    • 捎带应答
    • 面向字节流
    • 粘包问题
    • TCP异常情况
    • TCP保证的可靠性和高性能
    • 基于TCP常用协议

简介

TCP-传输控制协议
报头:

16位源端口号/16位目的端口号:表示数据从哪个进程来,到那个进程去
32位序号:
4位首部长度:表示该TCP报头有多少个4字节
6位保留:保留数据
6位标志位:
URG:标识紧急指针是否有效
ACK:标识确认序号是否有效
PSH:用来提示接收端应用程序立刻将数据从TCP缓冲区取走
RST:要求重新建立连接(含有此标识的报文称为复位报文段
SYN:请求建立连接(含有此标识的报文称为同步报文段
FIN:通知对端,本端即将关闭(含有此标识的报文称为结束报文段
16位窗口大小:
16位校验和:由发送端填充,校验形式有CRC校验等。接收端校验不通过,则认为数据有问题。(校验包含TCP首部+TCP部分数据)
16位紧急指针:标识那部分数据是紧急数据

连接机制(三次握手,四次挥手)

建立连接

第一次:Client–>Server Server端知道Client要建立连接
第二次:Server–>Client Client端知道Server收到连接请求了
第三次:Client–>Server Server知道Client端收到了自己的回应

连接具体步骤:
1、TCP服务器进程创建传输控制块TCB,准备接收客户端的连接请求,服务器状态从CLOSE进入到LISTEN监听状态。
2、TCP客户端进程创建传输控制块TCB,向服务器发出连接请求报文,报文首部同步标记为SYN=1,同时选择一个初始序列号seq=x。客户端进入SYN-SENT
同步已发送状态。(SYN同步段不能携带数据,必须消耗序列号)
3、TCP服务端收到请求报文后,如果同意连接,则发出确认报文。确认报文ACK=1,SYN=1,确认序号x+1。同事服务端初始化一个序列号seq=y,服务端进入
SYN-RCVD同步收到状态
4、TCP客户端收到确认后,向服务端给出确认。确认报文ACK=1,确认序号y+1,客户端序列号x+1
5、建立连接,客户端进入ESTABLISHED已建立连接状态。服务端收到确认后也进入ESTABLISHED已建立连接状态

断开连接

第一次:Client–>Server Server端知道Client要断开连接
第二次:Server–>Client Client端知道Server收到了断开请求了
第三次:Server–>Client Client端知道Server要断开连接了
第四次:Client–>Server Server端知道Client收到了断开请求了

1、客户端发出连接释放报文,停止发送数据。释放报文首部FIN=1,序列号seq=u=已经发送的最后一个字节的序号+1,客户端状态进入FIN-WAIT-1终止
等待1状态。(不携带数据也要消耗序列号)
2、服务端收到连接释放报文后,发出确认报文ACK=1,确认序号为u+1,自带序列号seq=v。服务端进入CLOSE-WAIT关闭等待状态
TCP服务器通知高层应用进程,客户端向服务端的方向释放了,这时候处于半关闭状态,客户端已经停止数据发送,服务端若发送数据,客户端依然要接受。
这个过程就是整个CLOSE-WAIT持续的时间。
3、客户端收到服务端的确认请求后,客户端进入FIN-WAIT2终止等待2状态。等待服务器发送连接释放报文(在此之前客户端还在接受服务端的数据)
4、服务端发送完最后的数据后,向客户端发送链接释放报文FIN=1,确认序号为v+1,自带序号seq=w。(半关闭状态服务端可能有发送了一些数据)服务端
进入LAST-ACK最后确认状态。
5、客户端收到服务端的连接释放报文后,发出确认报文ACK=1,确认序号为w+1,自带序号u+1。客户端进入TIME-WAIT时间等待状态。经过2*MSL最长报文段
寿命时间后,客户端撤销TCB进入CLOSE状态,TCP断开连接。
6、服务器收到客户端的确认报文后,立即进入CLOSE状态,撤销TCB,断开TCP连接。

2*MSL保证:
1、保证客户端发送的确认报文能够到达服务器端
2、防止新连接出现旧报文

问题:
如果已经建立连接,客户端挂了怎么办?
– TCP设有一个保活计时器,服务端没收到一次客户端请求都会重置这个计时器。计时器时间一般都是2小时。若两个小时内服务端没有收到任何数据,
服务器会发送一个探测报文段,之后每75分钟发一次,累计0次任没有反应则认为客户端挂了,服务端就可以直接关闭连接了。

确认应答机制(ACK机制)

超时重传机制

发送端在一段时间间隔内没有收到服务端的ACK确认,则会重新发送

滑动窗口

批量发送请求
ACK实现

流量控制

窗口大小控制

拥塞控制

慢启动机制
– 发送开始的时候,定义拥塞窗口大小为1
– 每次收到ACK应答,拥塞窗口+1
– 每次发包时,对比拥塞窗口和接收端反馈的窗口大小,取小值
– 初始指数增长,到达一个阈值后线性增长
– TCP开始启动的时候,慢启动阈值等于窗口最大值
– 每次超时重发,阈值变成原来一半,拥塞窗口重置为1

延迟应答

最大限度的保证网络不拥堵的情况下提高传输效率
每隔N个包应答一次
超过最大延迟时间应答一次
一般N取2,最大延迟时间取200ms

捎带应答

ACK和响应数据一期返回发送端

面向字节流

TCP的一个连接既有发送缓冲区,也有接收缓冲区。对于这种一个连接即可读数据也能写数据叫全双工模式。

粘包问题

定长的包按照固定长度读取
变长的包可以在数据包头部约定好一个总长字段或者从代码层定义分隔符

TCP异常情况

机器断电或网络断开:接收端会进行reset

TCP保证的可靠性和高性能

可靠性:
1、校验和
2、序列号
3、确认应答
4、超时重传
5、连接管理
6、流量控制
7、拥塞控制
高性能:
1、滑动窗口
2、高速重传
3、延迟应答
4、捎带应答

定时器:
1、超时重传定时器
2、保活定时器
3、TIME-WAIT定时器

基于TCP常用协议

1、HTTP
2、HTTPS
3、SSH

参考文献:https://blog.csdn.net/sinat_36629696/article/details/80740678

持续更新中

你可能感兴趣的:(网络协议,TCP,协议)