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

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

开发者学堂课程【Linux企业运维实战系列课程之Linux网络与自动化运维CCNP 必备:Linux 网络抓包和 TCP 的三次握手学习笔记,与课程紧密联系,让用户快速学习知识。

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


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


内容介绍:

一、三次握手

二、有限状态机 FSM:Finite State Machine

三、TCP包头结构

四、映射第四层到应用程序

五、有限状态机

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

七、TCP 超时重传

八、拥塞控制

九、UDP 特性


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

客户端通过 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.可基于半关闭


七、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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
63 0
Linux C/C++之TCP / UDP通信
|
5月前
|
网络协议 Linux
在Linux中,如何理解Tcp/ip协议三次握手?
在Linux中,如何理解Tcp/ip协议三次握手?
|
5月前
|
网络协议 安全 Linux
在Linux中,tcp三次握⼿的过程及原理?
在Linux中,tcp三次握⼿的过程及原理?
|
7月前
|
网络协议 算法 Linux
技术笔记:Linux学习:TCP粘包问题
技术笔记:Linux学习:TCP粘包问题
48 0
|
8月前
|
网络协议 安全 Go
TCP基础详解:Telnet回音服务器搭建
TCP基础详解:Telnet回音服务器搭建
93 0
|
缓存 运维 网络协议
CCNP 必备:Linux 网络抓包和 TCP 的三次握手|学习笔记
快速学习CCNP 必备:Linux 网络抓包和 TCP 的三次握手
CCNP 必备:Linux 网络抓包和 TCP 的三次握手|学习笔记
|
缓存 算法 网络协议
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(四)|学习笔记
快速学习CCNP 必备:Linux 网络抓包和 TCP 的三次握手
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(四)|学习笔记
|
网络协议 Linux 网络性能优化
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(一)|学习笔记
快速学习CCNP 必备:Linux 网络抓包和 TCP 的三次握手
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(一)|学习笔记
|
网络协议 Linux 网络安全
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(三)|学习笔记
快速学习CCNP 必备:Linux 网络抓包和 TCP 的三次握手
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(三)|学习笔记
|
网络协议 安全 Linux
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(二)|学习笔记
快速学习 CCNP 必备:Linux 网络抓包和 TCP 的三次握手
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(二)|学习笔记