网络协议--TCP/IP协议栈--三握和四挥

news2024/11/23 21:35:57

文章目录

  • 网络设备
    • 交换机
      • 交换机的工作原理
    • 路由器
      • 路由器工作原理
  • TCP/IP协议栈
    • TCP/IP四层模型
    • TCP/IP通信过程
    • TCP特性
    • TCP包头结构
      • 源端口、目标端口
      • 序列号(seq)
      • 确认号(小ack)
      • 标记位
    • TCP协议端口号
      • 端口号分类
      • ssh服务
      • nc工具
      • 抓包
    • socket套接字
    • 端口占用
  • 三次握手
    • Wireshark抓包
    • tcpdump
  • 四次挥手
    • Wireshark抓包
  • 有限状态机

网络设备

交换机

交换机是工作在OSI参考模型数据链路层的设备,外表和集线器相似。它通过判断数据帧的目的MAC地址,不断地MAC地址学习,从而将数据帧从合适端口发送出去。

交换机作为网络的核心设备,其主要功能是高效地转发数据,减少冲突,提高网络带宽利用率。通过MAC地址学习和帧转发机制,交换机能够确保数据准确且快速地传递到目标设备。此外,交换机支持的VLAN功能和生成树协议等特性,进一步增强了网络的安全性和稳定性。

交换机的工作原理

交换机的工作原理
  1."MAC地址学习":当一个设备首次通过交换机发送数据时,交换机会记录该设备的MAC地址和数据来自的端口号。
                 通过这种方式,交换机建立并维护一张MAC地址表。

  2."数据帧的转发"2.1 "未知帧广播":如果交换机收到一个数据帧,但MAC地址表中没有目标地址的信息,交换机会将该帧广播到所有端口,
                    除发送端口外。此时,所有连接的设备都能收到数据包,但只有目标设备会响应。
    2.2 "单播转发":一旦目标设备的MAC地址被学习到,后续发送给该设备的数据帧就会直接转发到相应的端口,而不会再广播。
  
  3."帧过滤":交换机会过滤掉不必要的帧,比如目标MAC地址与源MAC地址相同的帧,避免回环。

  4."VLAN功能":交换机可以配置VLAN,通过将不同端口划分到不同的VLAN中,实现虚拟网络隔离。
               这样,即使在同一个物理交换机上,处于不同VLAN的设备也无法直接通信,增加了网络的安全性。

  5."生成树协议(STP)":为了避免网络中出现回路,交换机使用生成树协议(STP)来确定最佳路径并关闭多余的路径,从而防止广播风暴。

在这里插入图片描述

路由器

路由器(Router)是连接多个网络的网络设备,通常用于连接局域网(LAN)和广域网(WAN),并且在网络层(第三层)操作。路由器根据IP地址来确定数据包的路径,从而实现不同网络之间的数据传输。

路由器把一个数据包从一个设备发送到不同网络里的另一个设备上去。路由器只关心网络的状态和决定网络中的最佳路径。路由的实现依靠路由器中的路由表来完成。

路由器工作原理

路由器的工作原理
  1."路由表的维护"1.1 路由器使用路由表来决定数据包的转发路径。路由表包含了目标网络的IP地址及其对应的下一跳(即下一个路由器或网关)的信息。
    1.2 路由表可以通过手动配置(静态路由)或动态路由协议自动生成和更新。

  2."数据包的转发"2.1 当路由器接收到一个数据包时,它会检查数据包的目标IP地址,并在路由表中查找匹配的条目。
    2.2 路由器根据路由表中的信息将数据包转发到相应的接口或下一跳设备。
    2.3 如果路由器找不到匹配的路由,它可能会将数据包转发到默认网关或丢弃数据包。

  3."路径选择"3.1 路由器使用路由协议(如RIP、OSPF、BGP)来获取和分享路由信息,并选择最佳路径。
        这些协议基于度量值(如跳数、延迟、带宽)来确定数据包的最佳传输路径。
    3.2 在有多条路径时,路由器会选择最优路径进行数据转发,以提高网络的效率和可靠性。
    
  4."网络地址转换(NAT)"4.1 当内部网络中的设备发送数据包到外部网络(如互联网)时,
         路由器会将设备的私有IP地址转换为路由器的公有IP地址。这是通过NAT功能实现的。
    4.2 当外部网络的数据包返回时,路由器会将公有IP地址映射回私有IP地址,确保数据包到达正确的内部设备。

  5."访问控制和安全"5.1 路由器可以使用访问控制列表(ACL)来定义允许或拒绝的数据包,增强网络的安全性。
    5.2 通过防火墙功能,路由器可以监控和过滤进出网络的数据流,防止攻击和未经授权的访问。
    
  6."广播域和冲突域的隔离"6.1 路由器将不同网络隔离在不同的广播域中,这意味着广播数据包不会跨越路由器,从而减少网络中的广播流量。
    6.2它还隔离了冲突域,防止来自不同网络的数据包在同一段物理网络中发生冲突。

在这里插入图片描述

TCP/IP协议栈

TCP/IP四层模型

在这里插入图片描述
在这里插入图片描述

TCP/IP通信过程

在这里插入图片描述

TCP特性

TCP特性
  1."面向连接"
    解释: TCP是一种面向连接的协议,在传输数据之前必须先建立连接。
         这个过程通过“三次握手”来实现,以确保发送端和接收    端都准备好通信。建立连接后,才能进行数据传输。
    优点: 提供可靠的端到端通信,确保数据传输的顺序和完整性。

  2."可靠性"
    解释: TCP 提供可靠的数据传输服务。它通过确认应答、超时重传、序列号等机制来保证数据的可靠性。
      确认应答: 每当发送方发送数据段时,接收方需要发送确认应答(ACK),表示已成功接收数据。
      超时重传: 如果发送方在一定时间内未收到确认应答,会重新发送数据段。
      序列号: 每个数据段都有一个序列号,用于确保数据按照正确的顺序传输和组装。

  3."数据流控制"
    解释: TCP 采用流量控制机制,确保发送方不会过快地向接收方发送数据,从而避免接收方的缓冲区溢出。
         这个机制通过窗口大小(Window Size)来实现。
    滑动窗口: 发送方根据接收方的接收能力调整发送速率,窗口大小决定了发送方可以在未收到确认应答前发送的数据量。

  4."拥塞控制"
    解释: TCP 还具备拥塞控制功能,以避免网络拥塞。常见的拥塞控制算法包括慢启动、拥塞避免、快重传和快恢复等。
      慢启动(Slow Start): 发送方开始时发送速度较慢,逐渐增加,直到检测到网络拥塞。
      拥塞避免: 发送方通过监控网络状态来避免发送速率增长过快。
      快重传和快恢复: 在检测到数据包丢失时快速重传丢失的数据,并调整拥塞窗口。

  5."全双工通信"
    解释: TCP支持全双工通信,即数据可以同时在两个方向上独立传输。这意味着发送方和接收方可以同时发送和接收数据,而不会互相影响。
    
  6."有序数据传输"
    解释: TCP保证数据按发送顺序接收。即使网络中发生乱序,接收方也会根据序列号将数据重新排序,确保数据的完整性。
  
  7."流量控制"
    解释: TCP使用滑动窗口协议来进行流量控制,以防止发送方发送过多数据而使接收方无法处理。
          流量控制确保了接收方有足够的资源来处理数据。
    
  8."数据完整性校验"
    解释: TCP使用校验和(Checksum)来保证数据的完整性。每个数据段在发送时都会生成校验和,
          接收方会检查数据段的校验和,以验证数据是否在传输过程中被破坏。

  9."三次握手和四次挥手"
    "三次握手": TCP在建立连接时使用“三次握手”来确保连接的可靠性。
      1.客户端发送SYN 请求包给服务器。
      2.服务器收到SYN后,回应SYN-ACK包给客户端。
      3.客户端收到SYN-ACK后,再发送ACK包给服务器,连接建立。
      
    "四次挥手": 断开连接时,使用“四次挥手”来安全关闭连接。
      1.客户端发送FIN请求断开连接。
      2.服务器收到后,回应ACK包确认。
      3.服务器再发送FIN包表示同意断开。
      4.客户端收到后,发送ACK确认,连接关闭。
   
更多关于tcp的内核参数,可参看man 7 tcp

在这里插入图片描述

TCP包头结构

在这里插入图片描述

源端口、目标端口

源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即65536。
在这里插入图片描述

序列号(seq)

序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0开始。
在这里插入图片描述

确认号(小ack)

确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方,我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
在这里插入图片描述

标记位

标记位的表示要么是0要么是1

"URG":表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效

"ACK":表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。
       TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段

"PSH":提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。
       如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,
       如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
      
"RST":如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
       或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段

"SYN":在建立连接时使用,用来同步序号。当SYN=1,ACK=O时,表示这是一个请求建立连接的报文段;
       当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。
       只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
      
"FIN":表示通知对方本端要关闭连接了,标记数据是否发送完毕。
       如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了",带FIN标志的TCP报文段称为结束报文段

TCP协议端口号

传输层通过端口号(port),确定应用层协议,范围0-65535
在这里插入图片描述
维基百科:https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

linux上和windows上都有常见tcp端口号范围,
linux在“/etc/services”文件里
windows在“C:\Windows\System32\drivers\etc\services”文件里

[root@rocky ~]# less /etc/services

在这里插入图片描述
在这里插入图片描述

端口号分类

IANA互联网数字分配机构负责域名,数字资源,协议分配

1.系统端口
    0-1023:系统端口或特权端口(仅管理员可用),
    众所周知,永久的分配给固定的系统应用使用, 22/tcp(ssh), 80/tcp(http), 443/tcp(https)

2.用户端口
    1024-49151:用户端口或注册端口,但要求并不严格,
    分配给程序注册为某应用使用,
    1433/tcp(SqlServer), 1521/tcp(oracle), 3306/tcp(mysql), 11211/tcpludp (memcached). 

3.动态端口
    49152-65535:动态或私有端口,客户端随机使用端口,(这些端口并不是一个固定范围,是可以调整的)
    范围定义: /proc/sys/net/ipv4/ip_local_port_range

查看动态端口范围和修改范围

[root@centos8 ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768	60999
[root@centos8 ~]# echo 20000 62000 > /proc/sys/net/ipv4/ip_local_port_range 
[root@centos8 ~]# cat /proc/sys/net/ipv4/ip_local_port_range
20000	62000

系统端口只能系统管理员使用,普通用户使用会权限拒绝
在这里插入图片描述

ssh服务

在windows上我们通过Xshell软件来连接vmware上的虚拟主机,其实是虚拟主机上的运行了ssh服务,我们通过该服务连接到了远程主机。
在这里插入图片描述

nc工具

nc号称是网络中的瑞士军刀
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

抓包

在这里插入图片描述
157发给158
在这里插入图片描述
158发给157
在这里插入图片描述

socket套接字

可以简单的理解为:
  socket套接字=IP+port(tcp/udp) 唯一标识网络中应用程序

端口占用

可以使用ss和lsof工具查看占用端口程序
在这里插入图片描述
lsof工具需要安装
在这里插入图片描述
在这里插入图片描述

三次握手

注意三次握手建立连接过程中的状态切换。
在这里插入图片描述
使用ss命令的a选项可以看到各种状态

[root@centos8 ~]# man ss
  DESCRIPTION
       ss is used to dump socket statistics. 
       It allows showing information similar to netstat.  
       It can display more TCP and state information than other tools.
[root@centos8 ~]# ss -help
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -n, --numeric       don't resolve service names
   -a, --all           display all sockets
   -l, --listening     display listening sockets
   -t, --tcp           display only TCP sockets

在这里插入图片描述

Wireshark抓包

157的机器ssh远程链接158
在这里插入图片描述
第一次握手
在这里插入图片描述

第二次握手
在这里插入图片描述
第三次握手
在这里插入图片描述

tcpdump

安装tcpdump

[root@centos8 ~]# dnf -y install tcpdump

在这里插入图片描述

在这里插入图片描述

四次挥手

TCP断开连接时,客户端和服务端都有可能主动关闭。就像离婚一样,离婚很纠结,需要男女双方都同意才行。

B站弹幕网友说等待2MSL是离婚冷静期。为什么要等,因为网络中,数据包被拆分发送后,有可能先发的数据包后到,后发的数据包先到,为了保证数据包被接受的完整,客户端会等待服务端没有报发送了才断开连接。

但是四次挥手断开连接只是比较理想的状态,若服务器直接宕机了,就不需要跟你确认了。就像电影《消失的她》,妻子被丈夫直接笼沉大海了,就算她不同意离婚也没办法了。
在这里插入图片描述
在这里插入图片描述

Wireshark抓包

第一次挥手
在这里插入图片描述
第二次挥手
在这里插入图片描述
第三次挥手
在这里插入图片描述
第四次挥手
在这里插入图片描述

有限状态机

11种状态机
  1.CLOSED  没有任何连接状态
  2.LISTEN  侦听状态,等待来自远方TCP端口的连接请求. 
  3.SYN-SENT  在发送连接请求后,等待对方确认
  4.SYN-RECEIVED  在收到和发送一个连接请求后,等待对方确认
  5.ESTABLISHED  代表传输连接建立,双方进入数据传送状态
  6.FIN-WAIT-1  主动关闭,主机已发送关闭连接请求,等待对方确认
  7.FIN-WAIT-2  主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
  8.TIME-WAIT  完成双向传输连接关闭,等待所有分组消失
  9.CLOSE-WAIT  被动关闭,收到对方发来的关闭连接请求,并已确认
  10.LAST-ACK  被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失. 
  11.CLOSING  双方同时尝试关闭传输连接,等待对方确认
[root@rocky ~]# man 8 netstat
State
       The  state  of the socket. Since there are no states in raw mode and usually no states used in UDP and UDPLite, this column may be left blank.
       Normally this can be one of several values:

       ESTABLISHED
              The socket has an established connection.

       SYN_SENT
              The socket is actively attempting to establish a connection.

       SYN_RECV
              A connection request has been received from the network.

       FIN_WAIT1
              The socket is closed, and the connection is shutting down.

       FIN_WAIT2
              Connection is closed, and the socket is waiting for a shutdown from the remote end.

       TIME_WAIT
              The socket is waiting after close to handle packets still in the network.

       CLOSE  The socket is not being used.

       CLOSE_WAIT
              The remote end has shut down, waiting for the socket to close.

       LAST_ACK
              The remote end has shut down, and the socket is closed. Waiting for acknowledgement.

       LISTEN The socket is listening for incoming connections.  Such sockets are not included in the output unless you specify the --listening  (-l)
              or --all (-a) option.

       CLOSING
              Both sockets are shut down but we still don't have all our data sent.

       UNKNOWN
              The state of the socket is unknown.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

构建完美人工智能工程师培养计划

一、理论基础构建 1. 数学与统计学基础:作为AI的基石,扎实的数学与统计学知识不可或缺。培养计划应涵盖高等数学、线性代数、概率论与数理统计、优化理论等课程,为学员打下坚实的理论基础。 2. 计算机科学基础:包括数据结构、算…

DLT645-2007通信协议---读取解析智能电表数据

一、DLT645-2007通讯协议 DLT645-2007是中国电力行业规定的一种智能电表通信协议,主要用于电能表与数据采集设备之间的通信。DLT645-2007协议定义了电能表与数据采集设备之间的数据格式、通信方式、命令集等内容,用于实现电能表数据的采集、传输和管理。…

SpringBoot整合Liquibase

1、是什么? Liquibase官网 Liquibase是一个开源的数据库管理工具,可以帮助开发人员管理和跟踪数据库变更。它可以与各种关系型数据库和NoSQL数据库一起使用,并提供多种数据库任务自动化功能,例如数据库迁移、版本控制和监控。Li…

盲盒抽奖源码

介绍: 功能上还可以,商品和盲盒可以在你程序里添加,设置概率等!! 新盲盒星球抽奖商城手机网站源码 随机开箱抢购 代码有点大,三百多M。 教程搭建很简单,基本10分钟搭建一套,可一个服务器搭建多套,只要你…

【时时三省】(C语言基础)模拟实现字符串相关函数

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 模拟实现库函数:strcpy 示例: const修饰指针 示例: const 修饰变量,这个变量为常变量,不能被修改,但本质上还是变量 正常num=20是改不了它…

招聘管理型岗位,HR会考察候选人的哪些方面?

团队管理能力 团队管理能力可以说是管理型岗位最基本的要求,只有具备优秀的团队管理能力,才能够带领团队实现组织目标,提高团队凝聚力,而想要考察一个人是否具备团队管理能力,就要通过多方面来测试。可以先了解一下候…

CSS笔记总结:第五天(HTML+CSS笔记完结)

Xmind鸟瞰图: 简单文字总结: css知识总结: 元素的显示与隐藏: 1.通过display隐藏元素 不保留位置 2.通过visibility 隐藏元素 保留位置 3.overflow 溢出隐藏 鼠标样式cursor: 1.defauly小白 2.p…

走进 keepalived:解析高可用架构背后的关键技术

一、什么是keepalived Keepalived 是一个用于实现服务器高可用性(High Availability,简称 HA)的软件。 简单来说,它的主要作用是检测服务器的状态,并在主服务器出现故障时,自动将服务切换到备份服务器上&…

SVN权限控制解析

一、基础数据说明 1. 代码目录存在多级 2. 角色存在多级 二、规则说明 结合例子讲规则 1、多级文件夹 a. 继承与覆盖 【文件夹层级】: Repositories/BS_Projects/科顺 BS_Projects包含了多个项目,每个项目是一个文件夹,比如“科顺”是其…

分布式事务Seata保证审批状态一致性

文章目录 下载安装Seata创建对应数据库修改application.yml相应配置启动SeataPmHub 实战——添加任务事务管理业务库添加undo_log 表对应服务加上对应的seata依赖Nacos 配置文件 pmhub-project-dev.yml 添加 seata 配置:接口添加 GlobalTransactional 注解涉及数据表…

Centos7升级gitlab(17)

在 CentOS 7 中将 GitLab 从版本 17.1.1 升级到 17.2.2,涉及以下步骤。请务必在升级前备份数据,以防止升级过程中出现问题导致数据丢失。 升级步骤 1. 备份 GitLab 数据 在升级之前,确保已经备份了 GitLab 的数据,包括数据库、…

【windows安装gradle】

1.去官网下载自己需要的版本。 2.直接解压到指定目录 3.配置环境变量 3.1.新建 GRADLE_HOME 环境变量值指向你的 Gradle 的解压路径 3.2.将 %GRADLE_HOME%\bin 添加到 Path 环境变量中 4.打开cmd命令行输入gradle -v查看是否安装成功以及当前版本 下面显示说明已经安装完成了…

软件测试用例的编写(六)

软件测试用例 定义 测试用例(TestCase)是为项目需求而编制的一组测试输入,执行步骤,以及预期结果,以便测试某个程序是否满足客户需求 可以总结为:每一个测试点的数据设计和步骤设计 – 对测试点的细化 作…

CentOS 7虚拟机安装部署MongoDB

1.添加MongoDB的YUM仓库 打开终端,执行以下命令来添加MongoDB的YUM仓库: sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo 在打开的文件中,输入以下内容: [mongodb-org-4.4] nameMongoDB Repository baseurlhttps://repo.mon…

城V4系列版本开源前后端uniapp代码

本文来自:智慧同城V4系列版本开源前后端uniapp代码 - 源码1688 应用介绍 演示地址:https://tongchengsaas.88881111.icu/ 账号:ceshi 密码:12345678 前端演示: 测试环境 php7.2mysql5.6ningx 安装拓展 ioncube&#x…

AppScan——Web 应用安全扫描的得力工具

一、引言 在当今数字化时代,Web 应用成为企业业务的重要支撑,但同时也面临着各种安全威胁。AppScan 作为一款专业的 Web 应用安全扫描工具,为保障 Web 应用的安全性提供了有力的支持。本文将对 AppScan 进行详细介绍,包括其功能、…

CogVideoX环境搭建推理测试

引子 智谱AI版Sora开源,首个可商用,18G显存即可运行。前文写了Open-Sora1.2的博文,感兴趣的童鞋请移步(Open-Sora1.2环境搭建&推理测试_open sora 1.2-CSDN博客)。对于这种占用资源少,且效果不错的多模…

ThreeJs学习笔记--坐标系,光源,相机控件

坐标系 一、创建添加坐标系 给场景添加坐标系THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小,你可以根据需要改变尺寸 const axesHelper new THREE.AxesHelper(200)//数值是坐标的尺寸 scene.add(axesHelper)//添加到场景里 坐标系包含三个坐标轴&…

HarmonyOS NEXT - Toast和Loading使用

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新,请前往github查看最新代码 HarmonyOS NEXT - Toast和Loading使用 效果图调用方式JhProgressHud.ets 完整代码 官方有个toast但是比较单一(官方toast promptAction)&#…

【TiDB】10-对 TiDB 进行 TPC-C 测试

目录 1、安装bench工具 2、插入数据 3、运行测试 4、测试结果分析 4.1、总体性能概览 4.2、事务类型详细性能 4.3、错误事务分析 4.4、结论与建议 5、清理测试数据 TPC-C 是一个对 OLTP(联机交易处理)系统进行测试的规范,使用一个商…