CCNP 必备:Linux 网络抓包和 TCP 的三次握手(三)|学习笔记

简介: 快速学习CCNP 必备:Linux 网络抓包和 TCP 的三次握手

开发者学堂课程【Linux网络进阶 - TCP/IP协议及OSI七层模型CCNP 必备:Linux 网络抓包和 TCP 的三次握手学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/552/detail/7628


CCNP 必备:Linux 网络抓包和 TCP 的三次握手(三)


六、客户端的典型状态转移

客户端通过 connect 系统调用主动与服务器建立连接 connect 系统调用首先给服务器发送一个同步报文段,使连接转移到 SYN_SENT 状态

此后 connect 系统调用可能因为如下两个原因失败返回:

1、如果 connect 连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于 TIME_WAIT 状态的连接所占用(见后文),则服务器将给客户端发送一个复位报文段,connect 调用失败。

2、如果目标端口存在,但 connect 在超时时间内未收到服务器的确认报文段,则 connect 调用失败。

Connect 调用失败将使连接立即返回到初始的 CLOSED 状态。如果客户端成功收到服务器的同步报文段和确认,则 connect 调用成功返回,连接转移至 ESTABLISHED 状态

处于 FIN_WAIT_2 状态的客户端需要等待服务器发送结束报文段,才能转移至 TIME_WAIT 状态,否则它将一直停留在这个状态。

如果不是为了在半关闭状态下继续接收数据,连接长时间地停留在 FIN_WAIT_2 状态并无益处。

连接停留在 FIN_WAIT_2 状态的情况可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退出了。

此时客户端连接由内核来接管,可称之为孤儿连接(和孤儿进程类似,占用内存资源

Linux 为了防止孤儿连接长时间存留在内核中,定义了两个内核参数:/proc/sys/net/ipv4/tcp_max_orphans 指定内核能接管的孤儿连接数目)孤儿连接太多会占用内存资源。

/proc/sys/net/ipv4/tcp_fin_timeout 指定孤儿连接在内核中生存的时间60秒)

Syn(半连接)攻击:

如果想要把对方的服务器拖垮,可以假装一个客户端发起请求,对方响应后发出SYN=1,ACK=1。但是没有第三步了而且客户端的发出地址是伪造的。服务器等待的时候会占用内存,造成服务器瘫痪。

可以安装防火墙等手段来预防。

下图为各种状态的复合图。虚线为服务器端发送的;实线为客户端发送的。

image.png

下图为三次握手四次挥手总结图

前三次为三次握手,中间是传数据,最后则是分手。

image.png

首先建立连接,ctrl+c强行断开连接。前三次为三次握手,中间是传数据,最后则是分手。

例如:

两个主机之间各有两个程序在通讯。当两个软件分别进行连接的时候。浏览器访问外国网站,这时就有三次握手。有几个应用程序通讯,就有几个握手,几个分手。

image.png

开始时客户端为断开连接状态,连接服务器发送同步包变为sent状态,对方回应syn和ack,同时切换到estabilished状态如果想断开连接则发送fin,进入wait1,等待对方发确认如果对方回应ack则进入wait2同时发送ack,接收fin,进入time wait 等待30秒后完成断开

TCP的各种特性

1.面向连接

2.可靠

3.可基于半关闭

image.png

Ack=1代表0包已经收到了。


七、TCP 超时重传

异常网络状况下(开始出现超时或丢包),TCP 控制数据传输以保证其承诺的可靠服务

TCP 服务必须能够重传超时时间内未收到确认的 TCP 报文段。为此,TCP 模块为每个 TCP 报文段都维护一个重传定时器,该定时器在 TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP 模块将重传 TCP 报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是 TCP 的重传策略

 TCP 超时重传相关的两个内核参数:

/proc/sys/net/ipv4/tcp-retries1,指定在底层 IP 接管之前 TCP 最少执行的重传次数,默认值是3

/proc/sys/net/ipv4/tcp_retries2,指定连接放弃前 TCP 最多可以执行的重传次数,默认值 15(一般对应13~30min)

固定窗口:

image.png

滑动窗口:

image.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11月前
|
网络协议 Unix Java
计网 - TCP 实战:如何进行 TCP 抓包调试?
计网 - TCP 实战:如何进行 TCP 抓包调试?
131 0
|
网络协议 安全 数据库
第二章TCP/IP—iOS网络七层模型
分层: 应用层 (Application): 网络服务与最终用户的一个接口。 协议有:HTTP FTP TFTP SMTP SNMP DNS 表示层(Presentation Layer): 数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层) 格式有,JPEG、ASCll、DECOIC、加密格式等 会话层(Session Layer): 建立、管理、终止会话。(在五层模型里面已经合并到了应用层) 对应主机进程,指本地主机与远程主机正在进行的会话 传输层 (Transport): 定义传输数据的协议端口号,以及流控和差错效验。
468 0
第二章TCP/IP—iOS网络七层模型
|
缓存 算法 网络协议
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(四)|学习笔记
快速学习CCNP 必备:Linux 网络抓包和 TCP 的三次握手
104 0
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(四)|学习笔记
|
网络协议 安全 Linux
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(二)|学习笔记
快速学习 CCNP 必备:Linux 网络抓包和 TCP 的三次握手
78 0
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(二)|学习笔记
|
网络协议 Linux 网络性能优化
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(一)|学习笔记
快速学习CCNP 必备:Linux 网络抓包和 TCP 的三次握手
121 0
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(一)|学习笔记
|
缓存 运维 网络协议
CCNP 必备:Linux 网络抓包和 TCP 的三次握手|学习笔记
快速学习CCNP 必备:Linux 网络抓包和 TCP 的三次握手
65 0
CCNP 必备:Linux 网络抓包和 TCP 的三次握手|学习笔记
|
网络协议 Unix Linux
CCNA 必备:Linux 网络基础知识入门及 tcp 协议(二)|学习笔记
快速学习CCNA 必备:Linux 网络基础知识入门及 tcp 协议
96 0
CCNA 必备:Linux 网络基础知识入门及 tcp 协议(二)|学习笔记
|
网络协议 安全 Linux
CCNA 必备:Linux 网络基础知识入门及 tcp 协议(一)|学习笔记
快速学习CCNA 必备:Linux 网络基础知识入门及 tcp 协议
120 0
CCNA 必备:Linux 网络基础知识入门及 tcp 协议(一)|学习笔记
|
缓存 网络协议 算法
CCNA 必备:Linux 网络基础知识入门及 tcp 协议(三)|学习笔记
快速学习CCNA 必备:Linux 网络基础知识入门及 tcp 协议
139 0
CCNA 必备:Linux 网络基础知识入门及 tcp 协议(三)|学习笔记
|
网络协议 Linux 网络架构
CCNP必备:Linux网络及TCP、IP协议详解(一)|学习笔记
快速学习CCNP必备:Linux网络及TCP、IP协议详解
91 0
CCNP必备:Linux网络及TCP、IP协议详解(一)|学习笔记