网络安全-->浅谈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

持续更新中

转载于:https://my.oschina.net/qrainly/blog/3075222

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值