【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)
一、TCP/IP协议簇(DoD参考模型)
用于简化OSI层次,以及相关的标准。
- 传输控制协议(tcp/ip)簇是相关国防部DoD所创建的,主要用来确保数据的完整性以及在毁灭性战争中维持通信
- 是由一组不同功能的协议组合在一起构成的协议簇
- 利用一组协议完成OSI所实现的功能
1. TCP/IP 协议簇中的相关协议
TCP/IP协议簇--应用层:
TCP/IP协议簇--主机到主机层:
TCP与UDP对比:
TCP相关报文结构:
- 源端口:即本地发起连接的端口
- 目标端口:即要访问的服务的端口
- 序列号:因为传输层会将上层的数据进行分段,因此需要对分段数据进行编号,同时也便于数据的重组
- 验证号:用于对数据的进行验证
UDP相关报文结构:
TCP/UDP端口号(1-65535)
- 在没有特殊指定情况下,源端口随机分配,目标端口使用知名端口
- 应用客户端使用的源端口号一般为系统中未使用的且大于1023的
- 目标端口号为服务器端应用服务的进程,如:telnet为23
二、TCP三次握手四次断开
置位概念:根据TCP的包头字段,存在三个重要的标识 ACK SYN FIN
- ACK:表示验证字段
- SYN:位数 置1,表示建立TCP连接
- FIN:位数 置1,表示断开TCP连接
1. 三次握手
建立过程说明:
- 由主机A 发送建立TCP连接的请求报文,其中报文中包含 seq 序列号,是由发送端随机生成的,并且还将报文中的 SYN 字段 置位1,表示需要建立TCP连接
- 主机B会回复A 发送的TCP连接请求报文,其中包含seq序列号(是由回复端随机生成的),并且将回复报文的 SYN 字段置1,并且会产生 ACK字段,ACK字段数值是在A发过来的seq序列号基础上 加1 进行回复,以便A收到信息时,知晓自己的TCP建立请求已经得到了验证
- A端收到B端发送的TCP建立验证请求后,会使自己的序列号加1 表示,并且再次回复 ACK 验证请求,在B端发送过来的seq的基础上加1,进行回复。
2. TCP四次挥手断开过程
注意:第一步的图中的ctl只发送FIN
断开过程说明:
- 主机A 发送断开TCP连接请求的报文,其中报文中包含seq序列号(是由发送端随机生成的),并且还将报文中FIN字段置为1,表示需要断开TCP连接
- 主机B 会回复A发送的TCP断开请求报文,其中包含seq序列号(是由回复端随机生成的),并且会产生ACK字段,ACK字段数值,是在A发过来的seq序列号基础上加1进行回复,以便A收到信息时,知晓自己的TCP断开请求已经得到了验证
- 主机B在回复完A的TCP断开请求后,不会马上就进行TCP连接的断开,主机B会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕就会将回复报文的FIN字段置1,并产生随机seq序列号。
- 主机A收到主机B的TCP断开请求后,会回复主机B的断开请求,包含随机生成的seq字段和ack字段,ack字段会在主机B的TCP断开请求的seq基础上加1,从而完成主机B请求的验证回复。
至此,TCP断开的4次挥手过程完毕。
三、TCP/IP 的11种状态
- CLOSED
- LISTEN
- SYN_SEND
- SYN_RCVD
- ESTABLISHED
- FIN_WAIT1
- CLOSE_WAIT
- FIN_WAIT2
- LAST_ACK
- TIME_WAIT
- CLOSING(服务器端的ACK丢包,客户端只收到了FIN报文)
三次握手的5种状态:
- 一开始,建立连接之前服务器和客户端的状态都为 CLOSED
- 服务器创建 socket 之后开始监听,变为LISTEN状态
- 客户端请求建立连接,向服务器发送 SYN 报文,客户端的状态变为 SYN_SENT
- 服务器收到客户端的报文后,向客户端发送SYN和ACK报文,此时服务器的状态变为SYN_RCVD
- 然后,客户端收到ACK,SYN,就像服务器发送ACK,客户端的状态变为ESTABLISHED。
- 拂去其收到客户端的ACK后也变为ESTABLISHED,此时,3次握手完成,连接建立!
四次挥手断开的7种状态:
由于TCP连接是全双工的,断开连接会比建立连接麻烦一点点。
- 客户端先向服务器发送FIN报文,请求断开连接,其状态变为 FIN_WAIT1
- 服务器收到FIN后,向客户端发出ACK,服务器状态变为 CLOSE_WAIT
- 客户端收到ACK之后,进入FIN_WAIT2状态,此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送
- 直到数据发送结束,服务器端就发送FIN报文,此时服务器进入 LAST_ACK状态
- 客户端收到服务器的FIN之后,马上发送ACK给服务器,此时客户端进入 TIME_WAIT状态
- 再过了2MSL 长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入了CLOSED状态。
至此,还有一个状态没有提及:CLOSING状态
CLOSING状态表示:
客户端发生了FIN,但没有收到服务器的ACK,却收到了服务器的FIN。
这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。
TCP的是一种状态转移总结
状态出现方式 | 状态出现环境 | 状态名称 | 状态描述 |
---|---|---|---|
TCP建立过程的5种状态 | 服务端/客户端 | CLOSED | 默认初始化状态 |
服务端 | LISTEN | 建立socket,进入监听状态 | |
客户端 | SYN_SENT | 发送syn报文,进入syn发送状态 | |
服务端 | SYN_RVCD | 接收syn报文,并回复ack及syn报文 | |
客户端/服务端 | ESTABLISHED | 接收syn报文,回复ack,建立连接(客户端);接收ack报文,建立连接(服务端) | |
TCP断开过程的6种状态 | 服务端/客户端 | ESTABLISHED | 默认断开前初始化状态 |
客户端 | FIN_WAIT1 | 发送断开请求fin报文 | |
服务端 | CLOSE_WAIT | 收到FIN后向客户端发出ACK | |
客户端 | FIN_WAIT2 | 收到服务端返回的ACK报文,等待数据传输 | |
服务端 | LAST_ACK | 发送fin断开请求报文 | |
客户端 | TIME_WAIT | 回复FIN断开请求,发送ack报文 | |
服务端/客户端 | CLOSED | 收到ack报文,立即转变为断开状态,等待2MSL后,进入断开状态 | |
客户端 | CLOSING | 没有收到回复FIN报文的ACK,直接收到FIN |
关闭的4次连接最难理解的状态是TIME_WAIT,存在TIME_WAIT的2个理由:
可靠地实现TCP全双工连接的终止。
允许老的重复分节在网络中消逝。
四、TCP/IP协议簇的层次介绍
TCP/IP协议簇--应用层:
TCP/IP协议簇--主机到主机层:
TCP/IP协议簇--因特网层:
TCP/IP协议簇--网络接入层:
五、IP协议¶
六、ARP协议
ARP协议的功能:
- 将IPv4地址解析为MAC地址
- 维护映射的缓存
网络层对应的IP地址,是跨网段使用的。
链路层地址对应的是MAC地址,是物理地址,是在局域网内使用的。
MAC地址就好比自己的小名一样,只有本地局域网有效
[root@oldboy ~]# arp -a
? (192.168.0.100) at f8:38:80:c2:0b:96 [ether] on eth3
? (192.168.0.101) at e4:46:da:ef:08:f1 [ether] on eth3
? (192.168.0.1) at 74:05:a5:87:ad:42 [ether] on eth3
? (192.168.0.102) at 8c:85:90:52:6e:de [ether] on eth3
192:~ zoe$ arp -a
192.168.0.1 (192.168.0.1) at 74:5:a5:87:ad:42 on en0 ifscope [ethernet]
192.168.0.100 (192.168.0.100) at f8:38:80:c2:b:96 on en0 ifscope [ethernet]
192.168.0.109 (192.168.0.109) at 8:0:27:4c:6f:ad on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]
ARP协议过程说明:
因特网层相关的工具:
- ping
- traceroute/tracert
七、通过实例分析互联网通信工程
- 主机A想访问 B主机,假设 主机A 是telnet 到 主机B 进行访问
- 主机A 由应用层构建一个数据包,发送到传输层
- 传输层拥有端口号的概念,就会在上层发过来的数据包加上 TCP的头部,即源端口和目标端口,源端口是随机的,目标端口是23。 因为访问的是目的地址的telnet服务;然后封装好的数据包再传给下层。
- 在互联网层上拥有IP的概念,就会在上层发过来的数据包加上IP的头部,即源IP地址和目标IP地址,源IP地址就是主机A的地址,目标IP地址就是主机B的地址。然后再将封装好的数据包发送给网络接入层
- 网络接入层有用MAC地址的概念,就会在上层发过来的数据包加上MAC地址,即源MAC地址和目标MAC地址,源MAC地址就是主机A的mac,目标的mac地址就是网关接口的MAC地址,默认要是没有网关接口的MAC地址,就会发送arp广播,获得到网关接口的mac地址
- 主机A 会将分装好的数据包以 bit 的方式传输给路由器
- 路由器收到数据包后,会进行数据包的解封装,获得目标ip网段地址,查询路由表进行路由的转发。
- 到达目标网络的路由器后,路由器会广播arp,找到对应目标IP地址的mac地址,根据获取到的目标mac地址,将数据转发到主机B
【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)的更多相关文章
- 网络基础二 tcp/ip协议簇 端口 三次握手 四次挥手 11种状态集
第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...
- TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集
第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...
- TCP/IP协议簇 端口 三次握手 四次挥手 11种状态集
第一章:概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN (Virturl LAN) ,翻译成中文是:“虚拟局域网”.VLAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计 ...
- 网络基础tcp/ip协议一
计算机网络: 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统,应用软件,应用程序通过通信线路互连 实现资源共享,信息传递 计算机网络的功能: 数据通信 资源共享 增加可靠性 提高系统 ...
- 网络基础tcp/ip协议四
网络层的功能: 定义了基于ip协议的逻辑地址. 链接不同的媒介类型. 选择数据通过网络的最佳路劲. 数据包格式: 优先级与服务类型(8)位:优先级与服务类型 标识符,标志,段偏移量:这几个字用来对数据 ...
- 网络基础tcp/ip协议二
物理层解析: 物理层是TCP/IP模型的最低层,物理层为数据提供数据传输可靠通路. 物理层关心的介质: 信号 接口 传输介质 信号的分类:(信号是信息传递的媒介.) 模拟信号:连续变化的物理量 数字信 ...
- 网络基础tcp/ip协议五
传输层的作用: ip层提供点到点的链接. 传输层提供端到端的链接. 传输层的协议: TCP: 传输控制协议可靠的,面向链接的协议,传输效率低. UDP: 用户数据报协议,不可靠,无连接的服务,传输效率 ...
- 网络基础tcp/ip协议三
数据链路层:(位于网络层与物理层之间) 数据链路层的功能: 数据链路的建立,维护. 帧包装,帧传输,帧同步. 帧的差错恢复. 流量的控制. 以太网:(工作在数据链路层) CSMA/CD(带冲突检测的载 ...
- Linux网络基础TCP/IP
1.osi:七层 上三层,主要是用户层面;下四层是实际进行数据传输物理层: 设备之间比特流的传输,物理接口,电气特性等 端口号的作用 通过IP找到服务器,通过端口号找到具体哪个服务.网页服务的端口号是 ...
随机推荐
- STM32CubeMX的安装
1.下载STM32CubeMX 在ST的官方网站上下载STM32CubeMXXX软件的安装包. 下载的安装包如下图所示.双击SetupSTM32CubeMX-5.0.1.exe. 安装STM32Cub ...
- PTA数据结构与算法题目集(中文) 7-32
PTA数据结构与算法题目集(中文) 7-32 7-32 哥尼斯堡的“七桥问题” (25 分) 哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七 ...
- servlet web.xml 3.1版本的头信息
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...
- Java反射(六)纯面向接口编程的简单框架实践
我们知道在使用MyBatis开发时,只需要添加DAO接口和对应的映射XML文件,不需要写DAO的实现类,其实底层是通过动态代理实现. 本文将使用前几篇文章的知识点实现一个纯面向接口编程的简单框架,与M ...
- time_wait 详解和解决方案
1. 产生原因 2. 导致问题 3. Nginx 3.1 长连接 4. 解决方案 5 .参考 产生原因 TCP 连接关闭时,会有 4 次通讯(四次挥手),来确认双方都停止收发数据了.如上图,主动关闭方 ...
- python--一些知识点
一. ==和is的区别 1. ==意为左右两端的值是否相等 2. is意为,左边是否就是右边,python会检测左右两边的引用位置,相等才是True(注:一定范围内的数字,左右两边为True) 二. ...
- 使用nginx转换HTTPS流量
背景 公司卖了一个产品给甲方,甲方要求部署后,要以https来访问.甲方提供了证书信息和私钥,记录一下部署过程. 实现 1.思路 在我们产品服务器上部署一个nginx.证书信息也放在这个服务器上.外界 ...
- Python常见数据结构-List列表
Python list基本特点 列表是一种有序集合,可以随时添加和删除元素. 序列中的每个元素都分配一个数字 - 它的位置. 列表的数据项不需要具有相同的类型. 创建一个列表,只要把逗号分隔的不同的数 ...
- coding++:漫画版-了解什么是分布式事务?
————— 第二天 ————— ———————————— 假如没有分布式事务: 在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子: 上图中包含了库存 ...
- python3(二十一) pip
先确保安装了windows的Python的pip 出现上图说明安装了,命令未找到则没有安装 安装一个图形处理的第三方库 Anaconda安装第三方库 我们经常需要用到很多第三方库,如MySQL驱动程序 ...