首页 > 系统相关 >2024-02-29-Linux高级网络编程(1-计算机网络概述)

2024-02-29-Linux高级网络编程(1-计算机网络概述)

时间:2024-02-28 16:58:47浏览次数:28  
标签:02 协议 IP 报文 TCP 2024 地址 Linux 服务器

1. 计算机网络概述

1.1 计算机发展简史

最早的广域网:在通信双方或多方之间,通过电路交换建立电路连接的网络。

image-20240228154426736

1.1.1 电路交换特点

  1. 建立链接->使用链接->释放链接
  2. 物理通路被通信双方独占

1.1.2 电路交换适用于电话网

​ 计算机数据是突发式出现在数据链路上的,而电路交换网的建立链接、使用链接、释放链接的三个过程使得传输效率太低,故电路交换适用于电话网,不适合传输计算机数据

1.2 计算机网络发展

​ 最早的计算机网络是由美国ARPA创造的,但是最早的ARPA无法连接不同类型的计算机和不同类型的操作系统。

1.2.1 分组交换

通过标有地址的分组进行路由选择传送数据,使通信通道仅在传送期间被占用的一种方式。

image-20240228155109567

1.2.2 交换方式-存储转发

交换方式:存储转发

节点收到分组,先暂时存储下来,在检查其首部,按照首部中的目的地址,找到合适的节点转发出去。

  1. 以分组作为传输单位
  2. 独立的选择转发路由
  3. 逐段占用,动态分配传输带宽

1.2.3 因特网的发展

1983年,TCP/IP协议成为APRANET的标准协议。

三级结构的因特网

image-20240228155706154

1.2.4 计算机网络的世界语 TCP/IP协议

​ 到现在为止,只要是能够通信的机器,能够上网的机器,一定用的就是TCP/IP协议族

1.3 TCP/IP协议

为了减少协议设计的复杂性,大多数网络模型均采用分层的方式来组织;

  1. 每一层利用下一层提供的服务来为上一层提供服务
  2. 本层服务的实现细节对上层屏蔽

1.3.1 分层结构

​ 为了实现不同类型计算机和不同类型的操作系统之间进行通信,引入了分层的概念。最早的分层体系结构是OSI开发系统互联模型(由国际标准化组织制定)。由于OSI模型过于复杂,所以到现在为止也没有使用,而是使用TCP/IP协议

OSI一共7层,TCP/IP协议族一共4层。

image-20240228160612670

应用层:应用程序间沟通的层,如FTP、Telnet、HTTP等

传输层: 提供进程间的数据传输服务,如TCP、UDP等

网络层:提供基本的数据封包传送功能,如IP、ICMP等

链路层:负责数据帧的发送和接收

1.3.2 IP协议简介

IP协议也称为网际协议,特指为实现在一个相互连接的网络系统上从源地址到目的地传输数据包(互联网数据包)所提供必要功能的协议

  1. 不可靠:它不能保证IP 数据包能成功地到达它的目的地,仅提供尽力而为的传输服务
  2. 无连接:IP 并不维护任何关于后续数据包的状态信息。每个数据包的处理是相互独立的。IP 数据包可以不按发送顺序接收

IP 数据包中含有发送它主机的IP地址(源地址)和接收它主机的 IP 地址(目的地址)

1.3.3 TCP协议简介

​ TCP也叫传输控制协议,是一种面向连接的、可靠的传输层通信协议。

功能: 提供不同主机上的进程间通信
特点

  1. 建立链接->使用链接->释放链接(虚电路)
  2. TCP 数据包中包含序号和确认序号
  3. 对包进行排序并检错,而损坏的包可以被重传

服务对象:需要高度可靠性且面向连接的服务如 HTTP、FTP、SMTP 等

1.3.4 UDP协议简介

​ UDP协议也叫用户数据报协议,是一种面向无连接的、不可靠的传输层通信协议。

功能: 提供不同主机上的进程间通信
特点:

  1. 发送数据之前不需要建立链接
  2. 不对数据包的顺序进行检查
  3. 没有错误检测和重传机制

**服务对象: **主要用于查询-应答的服务,如:NFS、NTP、DNS等

1.3.5 MAC地址、IP地址、Netmask、端口

网卡:又称为网络适配器或网络接口卡NIC,但是现在更多的人愿意使用更为简单的名称“网卡”通过网卡能够使不同的计算机之间连接,从而完成数据通信等功能。

MAC地址:用于标识网络设备,类似于身份证号,且理论上全球唯一的,以太网内的 MAC 地址是一个 48 bit 的值;以两个十六进制数为一组,一共分为6组,每组通过:隔开;前三组为厂商ID,后三组为设备ID。

image-20240228162536845

IP地址:IP地址是一种Internet上的主机编址方式,也称为网际协议地址

  • 目前大部分软件使用 IPv4 地址,但 IPv6 也正在被人们接受,尤其是在教育网中,已经大量使用。

    一台计算机可以拥有一个独立的 IP 地址,一个局域网也可以拥有一个独立的 IP 地址(对外就好像只有一台计算机)。对于目前广泛使用 IPv4 地址,它的资源是非常有限的,一台计算机一个 IP 地址是不现实的,往往是一个局域网才拥有一个 IP 地址。

    在因特网上进行通信时,必须要知道对方的 IP 地址。实际上数据包中已经附带了 IP 地址,把数据包发送给路由器以后,路由器会根据 IP 地址找到对方的地里位置,完成一次数据的传递。路由器有非常高效和智能的算法,很快就会找到目标计算机。

  • IPV4地址

    IPv4编址;A类、B类、C类、D类、E类IP地址(IP地址;网络地址和主机地址;子网掩码;网关;广播地址;)

    地址分类 地址范围 默认子网掩码 模式
    A 1.0.0.0-126.0.0.0 255.0.0.0 16777214个主机地址,一般用于大型网络
    B 128.1.0.0-191.255.0.0 255.255.0.0 65534个主机地址,一般用于中等规模网络
    C 192.0.1.0-223.255.255.0 255.255.255.0 254个主机地址,一般用于小型网络;
    D 224.0.0.1-239.255.255.254 多播地址
    E 240.0.0.0---255.255.255.254 保留地址
  • 子网掩码

    子网掩码由 网络ID主机ID 组成;

    网段占位可以先后扩展,即网段占位越多,子网数越多,后面的主机位数越少

    IP地址 网络ID 网络ID 网络ID 主机ID
    192.168.5.0 192 168 5 00000000
    192.168.5.64 192 168 5 01000000
    192.168.5.128 192 168 5 10000000
    192.168.5.192 192 168 5 11000000

    各类网段子网掩码

    掩码类型 网络ID 网络ID 网络ID 主机ID
    A类网段子网掩码(32位) 11111111 00000000 00000000 00000000
    A类子网掩码 255 0 0 0
    B类网段子网掩码(32位) 11111111 11111111 00000000 00000000
    B类子网掩码 255 255 0 0
    C类网段子网掩码(32位) 11111111 11111111 11111111 00000000
    C类子网掩码 255 255 255 0

    网段计算

    例:网络A中,主机A1的IP地址为192.168.2.183,子网掩码为255.255.255.240,网络A的网络ID是多少?

    image-20230110140042316

    即A网络的网络ID为192.168.2.178,我们通常说主机A1位于192.168.2.178w网段,位于同一网段的计算机即在同一局域网

    子网划分

    如果要将一个网络划分成多个子网,该如何划分呢? 例如:现有一个C类的地址192.168.5.0,希望将它划分成5个子网,请问子网掩码是多少,各子网的网络号是多少?

    分析:C类网络的子网掩码前三个分段分别是255,即255.255.255.0,需要通过最后一个段来进行划分;最后一个段是8个为00000000,满足前三个位的0,1组合大于5,即可。

    image-20230110143209574

  • CIDR 子网掩码

    无类别域间路由(Classless Inter-Domain Routing,CIDR)是一个用于给用户分配 IP 地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。

    表示方法:A.B.C.D/N(N 的范围 [0, 32]

  • MAC地址

    现实的情况是,一个局域网往往才能拥有一个独立的 IP;换句话说,IP 地址只能定位到一个局域网,无法定位到具体的一台计算机。这可怎么办呀?这样也没法通信啊。

    其实,真正能唯一标识一台计算机的是 MAC 地址,每个网卡的 MAC 地址在全世界都是独一无二的。计算机出厂时,MAC 地址已经被写死到网卡里面了(当然通过某些“奇巧淫技”也是可以修改的)。局域网中的路由器/交换机会记录每台计算机的 MAC 地址。

MAC 地址是 Media Access Control Address 的缩写,直译为“媒体访问控制地址”,也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或物理地址(Physical Address)。

数据包中除了会附带对方的 IP 地址,还会附带对方的 MAC 地址,当数据包达到局域网以后,路由器/交换机会根据数据包中的 MAC 地址找到对应的计算机,然后把数据包转交给它,这样就完成了数据的传递。

  • 地址解析协议 ARP

    动态地址解析协议(Address Resolution Protocol,ARP)是根据 IP 地址获取 MAC 地址的一种协议

    简单的来说 ARP 的作用就是把 IP 地址映射为物理地址,而与之相反的 RARP(逆向 ARP)就是将物理地址映射为 IP 地址。

  • NAT 地址转换

    网络地址转换(Network Address Translation,缩写:NAT;又称网络掩蔽、IP 掩蔽)在计算机网络中是一种在 IP 数据包通过路由器或防火墙时重写来源 IP 地址或目的 IP 地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有 IP 地址访问互联网的私有网络中。它是一个方便且得到了广泛应用的技术。当然,NAT 也让主机之间的通信变得复杂,导致了通信效率的降低。

  • DNS 域名解析系统(Domain Name System)

    DNS是进行域名(domain name)和与之相对应的 IP 地址(IP address)转换的服务器。DNS 中保存了一张域名(domain name)和与之相对应的 IP 地址(IP address)的表,以解析消息的域名。

  • CDN 内容分发网络

    內容分发网络(Content Delivery Network 或 Content Distribution Network,简称 CDN) 通过将源站内容分发至 最接近用户 的节点,从而 降低核心系统负载(系统、网络),使用户可就近取得所需内容,提高用户访问的响应速度。这种技术方案解决了因分布、带宽、服务器性能带来的访问延迟问题,适用于图片小文件、大文件下载、音视频点播、全站加速和安全加速等场景。

  • 端口号

    有了 IP 地址和 MAC 地址,虽然可以找到目标计算机,但仍然不能进行通信。

    一台计算机可以同时提供多种网络服务,例如 Web 服务(网站)、FTP 服务(文件传输服务)、SMTP 服务(邮箱服务)等,仅有 IP 地址和 MAC 地址,计算机虽然可以正确接收到数据包,但是却不知道要将数据包交给哪个网络程序来处理,所以通信失败。

    为了区分不同的网络程序,计算机会为每个网络程序分配一个独一无二的端口号(Port Number),例如,Web 服务的端口号是 80,FTP 服务的端口号是 21,SMTP 服务的端口号是 25。

    端口(Port)是一个虚拟的、逻辑上的概念。可以将端口理解为一道门,数据通过这道门流入流出,每道门有不同的编号,就是端口号。如下图所示:

    image-20230110103547660

    计算机端口号总数:65535,一般用到的是1~65535,0一般不使用

    端口号 说明
    0-1023 系统端口,也叫公认端口,这些端口只有系统特许的进程才能使用
    1024-5000 临时端口,一般的应用程序使用1024到4999来进行通讯
    5001-65535 服务器(非特权)端口,用来给用户自定义端口

    计算机常用默认端口号

    端口号 说明
    20 主要用于FTP(File Transfer Protocol,文件传输协议)服务,用于数据传输
    21 FTP服务,21端口用于控制信令的传输,控制信息和数据能够同时传输
    22 SSH 为 Secure shell 的缩写,专为远程登录会话和其他网络服务提供安全性的协议
    23 主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序
    25 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议
    53 DNS(Domain Name Server,域名服务器)服务器所开放,主要用于域名解析,DNS 服务在NT 系统中使用的最为广泛
    67 Bootstrap Protocol Server(引导程序协议服务端)
    68 Bootstrap Protocol Client(引导程序协议客户端)
    69 TFTP 是Cisco 公司开发的一个简单文件传输协议,类似于FTP
    79 端口是为Finger 服务开放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲区溢出等用户的详细信息
    80 HTTP(HyperText Transport Protocol,超文本传输协议),主要用于在WWW(World Wide Web,万维网)服务上传输信息的协议
    443 网页浏览端口,主要是用于HTTPS 服务,是提供加密和通过安全端口传输的另一种HTTP

1.4 数据包的组装、拆解

1.4.1 数据链路层

  • 物理层

    物理层通过一定的规则识别01信号物理层确保原始的数据可在各种物理媒体上传输

    物理层主要功能:调整信号变换过程(即信号从一种格式转换成另一种格式的过程),以便信号能在物理信道上能正常使用

    简单理解:把自己的想法用文字的形式写在信上

    典型协议、标准和应用:V.35、EIA/TIA-232

    物理层信息传输单位:位

    典型设备:集线器

    物理媒介媒介可以传送物理信号,比如亮度、电压或者振幅。比如用高电压表示1,低电压表示0 。针对某种媒介,电脑可以有相应的接口,用来接收物理信号,并解读成为0/1序列

    四大特性(规定各种机械状况的意义)

    • 机械特性 指明接口所用接线器的形状和尺寸、引线数目和排列等。
    • 电气特性 指明在接口电缆的各条线上出现的电压的范围。
    • 功能特性 指明某条线上出现的某一电平的电压表示何种意义。
    • 过程特性 指明对于不同功能的各种可能事件的出现顺序
  • 数据链路层

    数据链路层用于跨物理层在网段节点之间传输数据,通常指以太网、无线局域网等通信手段。

    数据链路层提供了在网络的两个实体之间传输数据的功能,并且提供了差错检测用于纠正物理层中发生的错误。

    数据链路层主要功能:识别0/1序列中所包含的帧。即定义了在单个链路上如何传输数据

    简单理解:同一个小区内,向某一户送信

    数据链路层信息传输单位:帧 (所谓的帧,是一段有限的0/1序列)

    典型协议、标准和应用:Ethernet、IEEE802.3、PPP和HDLC

    典型设备:交换机、网桥、网卡

    链路层地址: MAC 地址

1.4.2 网络层

网络层为位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。

网络层主要功能: 路由、寻址Network

简单理解:理解相应链路层信息,读取帧并通过内部ip地址改写帧

典型协议、标准和应用: IP 协议 、ARP协议 、 ICMP 协议

IP协议详细

image-20230110160312189
  • Version(版本号)

    IP 协议版本号。目前只有两个版本:IPv4 和 IPv6

  • HeaderLength(IP 协议头部长度)

    IP 协议头部的长度,单位字节(32bit)需要这个值是因为任选字段的长度是可变的,这个字段占 4bit(最多能表示 15 个 32bit 的的字,即 4*15=60 个字节的首部长度),因此 IP 头部最多有 60 字节长度。正常的长度是 20 字节;如果有额外的 IP 的 options 选项,还得加上 option 的长度。

  • TypeofService (服务类型)

    标示包传输优先级。总共 8 位,是由 3 个优先权位(不再使用),4 个 TOS 位,1 个固定的 0 组成。
    4 个 TOS 位:最新延迟、最大吞吐量、最高可靠性、最小成本,只能 4 选一。

  • TotalLength(包长度)

    整个 IP 包的长度,16 位,最大可以标示 65536 个字节,TotalLength-HeaderLength = 数据长度。通过 HeaderLength 和 TotalLength 就可以知道数据的起始位置和结束位置。

  • Identifier(标识符)

    网络中转发的 IP 报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度,则报文就需要分割成若干个小的片段才能在链路上传输。比如以太网帧中数据最大长度(MTU)为 1500 字节,大于 MTU 的都会被分割,被分割的每个包都有相同的一个值,表示这是同一个 ip 包。

  • Flag(标志位)

    标志字段在 IP 报头中占 3 位。

    • 第 1 位作为保留;
    • 第 2 位,分段,是否允许分片;(如果不允许分片,包超过了数据连路支持的最大长度,则丢弃该包,返回发送者一个 ICMP 错误)
    • 第 3 位,更多分段。表示是否最后一个分片。
      当目的主机接收到一个 IP 数据报时,会首先查看该数据报的标识符,并且检查标志位的第 3 位是置 0 或置 1,以确定是否还有更多的分段。如果还有后续报文,接收主机则将接收到的报文放在缓存直到接收完所有具有相同标识符的数据报,然后再进行重组。
  • FragmentedOffset(偏移量)

    当某个 IP 大包分成多片时,各个分片是不按顺序达到目的地的,IP 包根据分片的偏移量进行重组包。(跟 TCP 原理一样)

  • TimetoLive (生存时间)

    表示数据包经过的路由器个数。如果网络上有些路由器的路由表配置不合理,路由寻址可能会导致死循环,数据包会一直循环传输。IP 包发送的时候可以设置一个 TTL 值,比如 TTL=64,没经过一个路由器 TTL 减 1,减到 0 还没到到目的地,路由器会抛弃这个 IP 包,并使用一个 ICMP 消息通知发送方。

  • Protocal(协议)

    协议类型 1:ICMP,2:IGMP,6:TCP,17:UDP

  • HeaderCheckSum(首部校验和)

    校验 IP 协议头,判断 IP 协议头是否正确传输

  • SourceAddress(源 IP)

    请求方 IP

  • DistinationAddress(目的 IP)

    响应方 IP

  • Options(可选字段)

    IP 支持很多可选选项

ARP协议详解

  • 功能

    把网络层 32 位的 IP 转换成数据链路层 48 位的 MAC 地址,在这个过程中有一个很重要的表,ARP 缓存表。该表的形式如下,也是一个映射;

    image-20230110161332919

  • 运行原理

    对于 ARP 缓存表的使用,有两种情况

    • ARP 缓存表中缓存 IP 地址和 MAC 地址的映射关系

      A 可以直接告诉数据链路层,E 的 MAC 地址。A 会查询 ARP 缓存表,查看 E 的 MAC 地址是什么,然后告知数据链路层。

    • ARP 缓存表中没有缓存 IP 地址和 MAC 地址的映射关系

      ARP 会广播某一个 IP 的信息,收到这个广播的设备会回应一个包,表示我是不是这个 IP 地址。如果是,广播该 IP 地址的设备会记录对应设备的 MAC 地址

    image-20230110161611556

ARP 协议的报文信息是直接封装到数据链路层的数据帧中的。

最上边为数据链路层的数据帧格式,中间是 ARP 协议的报文信息,PAD 是填充的内容。

虽然 ARP 协议是直接封装在数据链路层的数据帧中的,但 ARP 协议仍属于网络层,主要是因为 ARP 协议使用到了 IP 地址,所以它属于网络层的内容,即 ARP 协议是数据链路层和网络层配合使用的一个协议。

RARP 协议

Reverse Address Resolution Protocol,逆地址解析协议

和 ARP 协议做相反的工作,它是将 48 位的 MAC 地址转换为 32 位的 IP 地址

image-20230110161917880

ICMP协议详解

  1. ICMP 属于 TCP/IP 协议族,用于在 IP 主机、路由器之间传递控制消息。
  2. 控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
  3. ICMP 协议与 ARP 协议不同,ICMP 靠 IP 协议来完成任务,所以 ICMP 报文中要封装 IP 头部。它与传输层协议(如 TCP 和 UDP)的目的不同,一般不用来在端系统之间传送数据,不被用户网络程序直接使用,除了想 Ping 和 Tracert 这样的诊断程序。
  4. ICMP 的主要作用是主机探测,路由维护,路由选择,流量控制
  5. ICMP 只能搭配 IPv4 使用,如果是 IPv6 的情况下,需要是用 ICMPv6
  6. ICMP 报文通常被 IP 层或更高层协议 (TCP 或 UDP) 使用。ICMP 报文是在 IP 数据报内部传输的。IP 协议是不可靠协议,不能保证 IP 数据报能够成功的到达目的主机,无法进行差错控制,当遇到 IP 数据无法访问目标、IP 路由器无法按当前的传输速率转发数据包等情况时,会自动发送 ICMP 消息。

1.4.3 传输层

传输层定义了主机应用程序之间端到端的连通性。

典型协议、标准和应用:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol)。

传输层信息:TCP 和 SCTP 可提供可靠的端对端服务。UDP 则会提供不可靠的数据报服务。

image-20230110165259529

长度:20~60B(20B固定大小)

  • Source Port(源端口): 发送方的端口号

  • Destination Port( 目的端口): 接收方的端口号

  • Sequence Number(序列号),由发送方随机产生。

  • Acknowledge Number(应答序列号),对上一份TCP报文的序列号进行回应。
    作用:
    a. 确认
    b. 重传

  • Headerlength(首部长度)

  • Resv.保留位

  • Flag (标志位),用于标识TCP报文的功能。

    a. URG:紧急指针(urgent pointer)有效。

    b. ACK:确认序号有效。ACK =1 ,字段有效;ACK = 0,字段无效。

    c. PSH:接收方应该尽快将这个报文交给应用层。

    d. RST:重置连接。

    e. SYN:发起一个新连接。

    f. FIN:释放一个连接。 FIN = 1 , 此报文段的发送方的数据已经发送完毕,并要求释放运输连接。

  • Window: 滑动窗口。用于流量控制。
    慢启动:TCP流量在发送过程中,会逐渐增大。
    滑窗减半机制:当网络拥塞时,TCP流量会减半。

  • Checksum (检验和)

  • Urgent Pointer(紧急数据指针)

  • Options(变长选项)

  • Padding(用户数据变长)

三次握手

TCP是可靠的传输层协议,它在传输数据前,会建立双向数据通信通道,当保证双向数据传输的通道没有问题时,才会发送数据,起到保护数据的作用。

注意:不要将确认序号Ack与标志位中的ACK搞混了。确认方Ack=发起方Seq+1,两端配对。

第一次握手:建立连接时,客户端发送syn包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

image-20230110183555057

四次挥手

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2*MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

image-20230110184225866

三次握手握三次,为什么断开要断四次?

TCP建立连接时之所以只需要"三次握手",是因为在第二次"握手"过程中,服务器端发送给客户端的TCP报文是以SYN与ACK作为标志位的。SYN是请求连接标志,表示服务器端同意建立连接;ACK是确认报文,表示告诉客户端,服务器端收到了它的请求报文。

SYN建立连接报文与ACK确认接收报文是在同一次"握手"当中传输的,所以"三次握手"不多也不少,正好让双方明确彼此信息互通。

数据传输方向是双向的,一个方向的数据通道关闭需要一次请求和一次确认,因此需要断两次,而我们有两个数据方向,因此需要断四次。

UDP协议

UDP协议是一种无连接,不可靠、面向数据报、速度比较快、可实现一对一,多对一的传输层协议。UDP协议适用于对实时性有要求的场合。因为UDP不保证可靠性,所以UDP也没有重传机制,也没有拥塞机制,它只是尽最大努力交付数据。

(1)UDP的优点:运行速度较快,比TCP安全

运行速度快,因为 UDP连接没有TCP的三次握手、确认应答、超时重发、流量控制、拥塞控制等机制,而且UDP是一个无状态的传输协议,所以它在传递数据时非常快。
较安全,因为没有TCP的那些机制,UDP较TCP被攻击者利用的漏洞就会少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击等。

(2)UDP的缺点:不可靠,不稳定

1.4.4 应用层

1. DNS(域名系统)

DNS 是互联网使用的命名系统,用来把人们使用的机器名字(域名)转换为 IP 地址。域名服务器分为四种类型:根域名服务器、顶级域名服务器、本地域名服务器、权限域名服务器

2. FTP(文件传输协议)

FTP 是使用得最广泛的文件传送协议。FTP 提供交互式的访问,常用于局域网的文件存储服务器。

3. Telnet(远程终端协议)

telnet 是一个简单的远程终端协议,结合端口使用,常用于服务探测。

4. HTTP(超文本传送协议)

HTTP 是面向事务的应用层协议,它是互联网能够可靠地交换文件的重要基础。http 使用面向连接的 TCP 作为运输层协议,保证了数据的可靠性。

5. SMTP(电子邮件协议)

SMTP 是简单邮件传送协议。SMTP规定了在两个相互通信的 SMTP 进程之间应如何交换信息。SMTP通信包括三个阶段,分别是:建立连接、邮件传送、连接释放。

6. POP3(邮件读取协议)

POP3,全称是 Post Office Protocol 3,该协议通常被用来接收电子邮件。

7. SNMP(简单网络管理协议)

SNMP 协议由三部分组成,包括:SNMP本身、管理信息结构 SMI 和管理信息 MIB。SNMP 定义了管理站和代理之间所交换的分组格式。SMI 定义了命名对象类型的通用规则,以及把对象和对象的值进行编码。MIB 在被管理的实体中创建了命名对象,并规定类型。

1.5 网络应用程序开发流程

1.5.1 TCP - 面向连接

电话系统服务模式的抽象:每一次完整的数据传输都要经过建立连接、使用连接、终止连接的过程。

本质上,连接是一个管道,收发数据不但顺序一致,而且内容相同保证数据传输的可靠性。

1.5.2 UDP- 面向无连接

邮件系统服务模式的抽象:每个分组都携带完整的目的地址,不能保证分组的先后顺序,不进行分组出错的恢复和重传,不保证数据传输的可靠性。

1.5.3 C/S架构示例(面向连接)

无论采用面向连接的还是无连接,两个进程通信过程中,大多采用C/S架构

client向server发出请求,server接收到后提供相应的服务;

在通信过程中往往都是client先发送请求,而server等待请求然后进行服务

标签:02,协议,IP,报文,TCP,2024,地址,Linux,服务器
From: https://www.cnblogs.com/hasaki-yasuo/p/18041011

相关文章

  • 面试题 02.07. 链表相交C
    利用链表的特性,如果相交的话,后面就不可能岔开!你可以想象把他们有同一个尾巴,然后从尾巴往前看。所以只要知道两个链表的长度,就可以在同一起跑线上一起比较了。/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;......
  • 2024.02.22
    1.原始jsp模板查看初始jsp创建模板:File---Setting---Editor---FileandCodeTemplates---Other---Jspfiles---JspFile.jsp,可在⑤处重新定义jsp模板,编写完成后,Apply,OK,下次在新建jsp文件时,即可建立所定义模板的jsp页面。 2.重新定义jsp页面模板    File---Sett......
  • 安装教程:linux离线安装Redis
    下载地址:https://download.redis.io/releases/redis-7.2.4.tar.gz下载redis压缩包压缩包上传到/usr/local/redis目录解压tar-zxvfredis-6.0.0.tar.gz-C/usr/local/redis切换到/usr/local/redis/redis-6.0.0目录cd/usr/local/redis/redis-6.0.0编译make安装到redis......
  • 2024.2.14
    HomeView.vue<template><el-containerstyle="min-height:100vh"><el-asidewidth="sideWidth+'px'"style="background-color:rgb(255,255,255)"><!--width="sideWidth+'px'&......
  • 2024.1.25
    想要使用IDEA去连接mysql等数据库需要先IDEA里先下载驱动,一般当你去配置的IDEA连接数据库这个过程,IDEA会提示你没有安装驱动,并问你需不需要自动下载这里如果你们遇到自动下载的途中,下载到一半进度条卡住了,或者直接下载失败,可以先到maven中导入相应的包,然后再回到上图重新下载驱......
  • Linux 常用维护命令
    1、检查cat/etc/passwd这个文件里面有没有异常用户名2、通过命令top查看是否有异常进程,按M键对进程进行排序3、通过命令netstat-lnpt,查看是否有异常端口号4、通过命令ll-a/proc/PID,查看异常进程执行文件所在位置5、通过命令kill-9PID,杀掉该进程6、通过命令find/usr/lo......
  • 【QBXT 2023 冬】NOIP 突破营 补题清单
    题单:第一部分第二部分题解有时间就写,一般会咕。P5691[NOI2001]方程的解数简单的折半搜索。直接搜索时间复杂度是\(O(m^6)-O(m^6\logp_i)\)的(快速幂),无法通过。考虑优化,首先我们对上面的式子做一个变形:\[\sum_{i=1}^{n}k_ix_i^{p_i}=0\]即\[\sum_{i=1}^{\lfloor\frac......
  • flask_02
    #1flask介绍 web框架---》小而精--》第三方插件--》完成更丰富的功能--》自由选择第三方插件#2wsgi协议:werkzeug:工具包uwsgi,wsgiref djagno,flask要遵循wsgi协议#3click定制命令 -定制命令--》把excel中得数据---》导入到mysql的某个表中......
  • ABC302 Ex 题解
    首先我们考虑\(v\)固定怎么做。实际上就是ARC111B。考虑建图,对每个\((a_i,b_i)\)建一条无向边,那么问题就变成了:对于每条边都要选择它以及其连接的一个点,最大化选出的点数。很明显可以对每个连通块分开考虑。记当前连通块的点数为\(V\),边数为\(E\)。那么有结论:该连通块对......
  • 『周记』2024第八周周末
    『周记』2024第八周周末  复盘周五到周日的flag:周五参加170HomeworkParty周六早上去健身房完成61B的lab5和hw2完成170的hw5完成188project3的前半部分补三门课对应的recording/notes订正所有作业和考试完成所有discussion并且对应solution整理计时完......