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

网络设备

交换机

交换机是工作在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是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单
可靠的网络工具。

nc的作用

nc的作用
  1.实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
  2.端口的扫描,nc可以作为client发起TCP或UDP连接
  3.机器之间传输文件
  4.机器之间网络测速

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

抓包

在这里插入图片描述
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.

windows的netstat命令

C:\Users\Administrator>netstat -all

显示协议统计信息和当前 TCP/IP 网络连接。

NETSTAT [-a] [-b] [-e] [-f] [-i] [-n] [-o] [-p proto] [-r] [-s] [-t] [-x] [-y] [interval]

  -a            显示所有连接和侦听端口。
  -b            显示在创建每个连接或侦听端口时涉及的
                可执行文件。在某些情况下,已知可执行文件托管
                多个独立的组件,此时会
                显示创建连接或侦听端口时
                涉及的组件序列。在此情况下,可执行文件的
                名称位于底部 [] 中,它调用的组件位于顶部,
                直至达到 TCP/IP。注意,此选项
                可能很耗时,并且可能因为你没有足够的
                权限而失败。
  -e            显示以太网统计信息。此选项可以与 -s 选项
                结合使用。
  -f            显示外部地址的完全限定
                域名(FQDN)-i            显示 TCP 连接在当前状态所花费的时间。
  -n            以数字形式显示地址和端口号。
  -o            显示拥有的与每个连接关联的进程 ID。
  -p proto      显示 proto 指定的协议的连接;proto
                可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s
                选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:
                IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
  -q            显示所有连接、侦听端口和绑定的
                非侦听 TCP 端口。绑定的非侦听端口
               不一定与活动连接相关联。
  -r            显示路由表。
  -s            显示每个协议的统计信息。默认情况下,
                显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;
                -p 选项可用于指定默认的子网。
  -t            显示当前连接卸载状态。
  -x            显示 NetworkDirect 连接、侦听器和共享
                终结点。
  -y            显示所有连接的 TCP 连接模板。
                无法与其他选项结合使用。
  interval      重新显示选定的统计信息,各个显示间暂停的
                间隔秒数。按 CTRL+C 停止重新显示
                统计信息。如果省略,则 netstat 将打印当前的
                配置信息一次。

netstat -no

查询当前正在和你主机建立了连接的地址,本地地址就是你的地址,外部地址就是和你建立连接的对方的地址

C:\Users\Administrator>netstat -no
活动连接
  协议    本地地址                外部地址                状态             PID
  TCP    127.0.0.1:49740        127.0.0.1:4369         ESTABLISHED     8476
  TCP    127.0.0.1:52100        127.0.0.1:4369         TIME_WAIT       0
  TCP    192.168.10.1:4369      192.168.10.1:52114     TIME_WAIT       0
  TCP    192.168.10.1:52072     192.168.10.158:22      ESTABLISHED     25592
  TCP    192.168.31.203:49545   121.14.76.247:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:49549   183.2.143.189:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:49566   113.96.19.161:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:49592   183.2.143.189:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:49611   183.47.99.24:443       ESTABLISHED     3284
  TCP    192.168.31.203:49622   183.2.143.189:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:49623   183.2.143.189:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:49624   183.2.143.189:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:49714   14.116.174.81:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:49752   103.212.12.56:3000     ESTABLISHED     12884
  TCP    192.168.31.203:49845   113.108.27.116:443     CLOSE_WAIT      5524
  TCP    192.168.31.203:49955   183.47.109.60:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:50684   182.247.224.217:443    ESTABLISHED     11800
  TCP    192.168.31.203:50712   20.197.71.89:443       ESTABLISHED     7328
  TCP    192.168.31.203:50749   183.47.110.146:443     ESTABLISHED     5524
  TCP    192.168.31.203:50752   183.2.144.33:443       ESTABLISHED     5524
  TCP    192.168.31.203:50841   113.96.19.161:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:51195   59.36.121.244:443      CLOSE_WAIT      5524
  TCP    192.168.31.203:51412   64.233.188.188:5228    ESTABLISHED     19200

tasklist

该工具显示在本地或远程机器上当前运行的进程列表。

C:\Users\Administrator>tasklist -all
错误: 无效参数/选项 - '-all'。
键入 "TASKLIST /?" 以了解用法。

C:\Users\Administrator>tasklist /?

TASKLIST [/S system [/U username [/P [password]]]]
         [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

描述:
    该工具显示在本地或远程机器上当前运行的进程列表。

参数列表:
   /S     system           指定连接到的远程系统。
   /U     [domain\]user    指定应该在哪个用户上下文执行这个命令。
   /P     [password]       为提供的用户上下文指定密码。如果省略,则
                           提示输入。
   /M     [module]         列出当前使用所给 exe/dll 名称的所有任务。
                           如果没有指定模块名称,显示所有加载的模块。

   /SVC                    显示每个进程中主持的服务。
   /APPS 显示 Microsoft Store 应用及其关联的进程。
   /V                      显示详细任务信息。
   /FI    filter           显示一系列符合筛选器
                           指定条件的任务。
   /FO    format           指定输出格式。
                           有效值: "TABLE""LIST""CSV"。
   /NH                     指定列标题不应该
                           在输出中显示。
                           只对 "TABLE""CSV" 格式有效。
   /?                      显示此帮助消息。

范例,找到哔哩哔哩的ip

在这里插入图片描述
查到哔哩哔哩与我的windows主机建立连接的ip地址分别来自江苏上海东莞等地
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值