前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCP的三次握手和四次挥手

TCP的三次握手和四次挥手

作者头像
承苏凯
发布2020-07-24 10:07:09
4560
发布2020-07-24 10:07:09
举报
文章被收录于专栏:唯手熟尔

TCP的三次握手和四次挥手

image-20200710193600055
image-20200710193600055
  • source port 源端口
  • destionation port 目的端口

注意: IP层只包含IP地址,端口是在传输层上的,IP+端口号可以唯一表识一个进程(套接字)

  • Sequence number 报文段的序号
  • Acknowledge Number 确认报文段
  • Offset 偏移
  • TCP Flags
  • widnow 滑动窗口 告知发送端 接收端的缓存大小从而控制发送端发送数据的速率从而达到流量控制
  • checksum 奇偶校验和 将TCP报文段的头部和数据进行16位的计算,并将结果保存在发送端并由接受端进行验证
  • Urgent Pointer 指出报文的紧急数据的字节数,URG置1
  • TCP Options 定义一些可选参数

TCP Flags

image-20200710194414469
image-20200710194414469
image-20200710195154783
image-20200710195154783
  • ESTAB-LISHED: 可以传输数据
  • SYN-SENT:建立连接

实战

  1. 首先找到http,tcp的握手就会出现在附近
image-20200710202329478
image-20200710202329478
  1. ip.dst==115.28.159.6 or ip.src==15.28.159.6
  2. 具体的描述(以本地的应用程序的端口号51471为例,51471端口和服务器的80端口之间建立TCP连接)
  • 51470向80发送建立连接请求信号(SYN=1,seq=0)
image-20200710203357381
image-20200710203357381
  • 80向51470应答连接请求信号(SYN=1,ACK=1,seq=0,ack=1)
image-20200710203452309
image-20200710203452309
  • 51470向80发出确认信号(ACK=1,seq=1,ack=1),连接建立成功,接下来就可以传输数据了
image-20200710203508456
image-20200710203508456
image-20200710204313349
image-20200710204313349

问题

为什么需要三次握手才能建立连接:

为了初始化Sequence Number的值

SYN超时,SYN Flood风险!!!会耗尽SYN连接队列!!!

image-20200710204848138
image-20200710204848138
image-20200710205001585
image-20200710205001585

建立连接后client中断了,怎么办?

image-20200710205141183
image-20200710205141183

TCP四次挥手

image-20200710205209472
image-20200710205209472

实战

  • Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态
image-20200710223231952
image-20200710223231952
  • Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态
image-20200710223256439
image-20200710223256439
  • Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态
image-20200710223310109
image-20200710223310109
  • Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,Server进入CLOSE状态,完成四次挥手
image-20200710223327278
image-20200710223327278

超时设置

为什么会有TIME_WAIT状态?

image-20200710224400375
image-20200710224400375
image-20200710224445299
image-20200710224445299
image-20200710224607431
image-20200710224607431
  • 查看CLOSE_WAIT的数量:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

image-20200710230752446
image-20200710230752446

CLOSE_WAIT一旦太多就会爆出too many open files

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TCP的三次握手和四次挥手
  • TCP Flags
    • 实战
      • 问题
      • TCP四次挥手
        • 实战
          • 超时设置
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档