zoukankan      html  css  js  c++  java
  • 《TCP/IP网络协议基础》笔记

    同步自https://gitee.com/Corvey/note

    简介

    • 网络协议栈架构
    • TCP/IP被分为4层:
      1. 应用层:应用程序通过这一层访问网络,常见 FTP、HTTP、DNS 和 TELNET 协议;
      2. 传输层:TCP 协议和 UDP 协议;
      3. 网络层:IP 协议,ARP、RARP 协议,ICMP 协议等;
      4. 链路层:是 TCP/IP 协议的基层,负责数据帧的发送和接收。
    • 封装:当应用程序发送数据的时候,数据在协议层次当中从顶向下通过每一层,每一层都会对数据增加一些首部或尾部信息,这样的信息称之为协议数据单元(Protocol Data Unit,缩写为PDU),在分层协议系统里,在指定的协议层上传送的数据单元,包含了该层的协议控制信息和用户信息。
    • 分用:当主机收到一个数据帧时,数据就从协议层底向上升,通过每一层时,检查并去掉对应层次的报文首部或尾部,与封装过程正好相反。

    链路层

    • 网络层协议的数据单元是 IP 数据报 ,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为 帧(frame)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:
      • 将数据封装为帧(frame),帧是数据链路层的传送单位;
      • 控制帧的传输,包括处理传输差错,调节发送速率与接收方相匹配;
      • 在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
    • 数据帧的结构
    • 控制帧的传输
      • 差错控制,通信系统必须具备发现差错的能力,并采取措施纠正之,使差错控制在所能允许的尽可能小的范围内,这就是差错控制过程,也是数据链路层的主要功能之一。
        • 反馈重发,接收方通过对差错编码(奇偶校验码或 CRC 码)的检查,可以判定一帧在传输过程中是否发生了差错。一旦发现差错,一般可以采用反馈重发的方法来纠正。这就要求接受方收完一帧后,向发送方反馈一个接收是否正确的信息,使发送方据此做出是否需要重新发送的决定。发送方仅当收到接收方已正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需要重发直至正确为止。
        • 计时器,如果某一帧发送出现问题,一直不能发送成功,为了避免传输过程停滞不前,通常引入 计时器 (Timer) 来限定接收方发回反馈消息的时间间隔。当发送方发送一帧的同时也启动计时器,若在限定时间间隔内未能收到接收方的反馈信息,即计时器超时(Timeout),则可认为传出的帧以出错或丢失,就要重新发送。
        • 序号,由于同一帧数据可能被重复发送多次,就可能引起接收方多次收到同一帧并将其递交给网络层的情况。为了防止这种情况,可以采用对发送的帧编号的方法,即赋予每帧一个序号,从而使接收方能从该序号来区分是新发送来的帧还是重发的帧,以此来确定要不要将接收到的帧递交给网络层。
      • 流量控制,由于收发双方各自使用的设备工作速率和缓冲存储空间的差异,可能出现发送方的发送能力大于接收方接收能力的现象,此时若不对发送方的发送速率做适当的限制,前面来不及接收的帧将被后面不断发送来的帧“淹没”,从而造成帧的丢失而出错。由此可见,流量控制实际上是对发送方数据流量的控制,使其发送速率不超过接收方的速率。所以需要一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后再继续发送。这就是流量控制。

    以太网(待补充)

    PPP协议

    • PPP(点到点协议)是为在同等单元之间传输数据设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据。设计目的主要是用来通过 拨号或专线 方式建立 点对点 连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。
    • 点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP/IP 协议集中它是一种用来同步调制连接的数据链路层协议。

    网络层

    IP网际协议

    • IP协议位于网络层,它是TCP/IP协议族中最为核心的协议,所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。IP协议提供的是不可靠、无连接的数据报传送服务。
      • 不可靠(unreliable):IP 协议不能保证数据报能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP 协议会丢弃该数据报。传输的可靠性全由上层协议来提供。
      • 无连接(connectionless):IP 协议对每个数据报的处理是相互独立的。这也说明, IP 数据报可以不按发送顺序接收。如果发送方向接收方发送了两个连续的数据报(先是 A,然后是 B),每个数据报可以选择不同的路线,因此 B 可能在 A 到达之前先到达。
    • IP地址主机号全0为网络段,全1为广播地址
    • 子网划分
      • 占用主机号的前几个位,用于表示子网号。
      • IP = 网络号 + 子网号 + 主机号
      • 子网掩码中的 1 标识了 IP 地址中相应的网络号和子网号,0 标识了主机号
    • IP路由选择
      • IP 层在内存中有一个路由表(输入命令 route -n 可以查看路由表),当收到一份数据报并进行发送时,都要对该表进行搜索:
        1. 搜索路由表,如果能找到和目的 IP 地址完全一致的主机,则将 IP 数据报发向该主机;
        2. 搜索路由表,如果匹配主机失败,则匹配同子网的路由器(这需要子网掩码的协助)。如果找到路由器,则将 IP 该数据报发向该路由器;
        3. 搜索路由表,如果匹配同子网路由器失败,则匹配同网络号路由器,如果找到路由器,则将该 IP 数据报发向该路由器;
        4. 如果以上都失败了,就搜索默认路由,如果默认路由存在,则发报;
        5. 如果都失败了,就丢掉这个包;
        6. 接收到数据报的路由器再按照它自己的路由表继续转发,直到数据报被转发到目的主机;
        7. 如果在转发过程中,IP 数据报的 TTL(生命周期)已经被减为 0,则该 IP 数据报就被抛弃。

    ARP(Address Resolution Protocol)地址解析协议

    • 功能:当主机通过数据链路发送数据的时候, IP 数据报 会先被封装为一个 数据帧 ,而 MAC 地址 会被添加到数据帧的 报头 (链路层介绍时已讲过)。ARP 便是在这个过程中通过目标主机的 IP 地址,查询目标主机的 MAC 地址。
    • 在你的电脑和路由器中都有一个 ARP 缓存表 ,其中保存的是近期(20 分钟)与自己有过通信的主机的 IP 地址与 MAC 地址的对应关系。ARP 缓存表使用过程:
      • 当主机要发送一个 IP 数据报的时候,会首先查询一下自己的 ARP 缓存表;
      • 如果在 ARP 缓存表中找到对应的 MAC 地址,则将 IP 数据报封装为数据帧,把 MAC 地址放在帧首部,发送数据帧;
      • 如果查询的 IP-MAC 值对不存在,那么主机就向网络中广播发送一个 ARP 请求数据帧,ARP 请求中包含待查询 IP 地址;
      • 网络内所有收到 ARP 请求的主机查询自己的 IP 地址,如果发现自己符合条件,就回复一个 ARP 应答数据帧,其中包含自己的 MAC 地址;
      • 收到 ARP 应答后,主机将其 IP - MAC 对应信息存入自己的 ARP 缓存,然后再据此封装 IP 数据报,再发送数据帧。
    • 如果 ARP 请求是从一个网络上的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该 ARP 请求,这个过程称作代理 ARP(Proxy ARP)。当连接这两个网络的路由器收到该 ARP 请求时,它会发现自己有通向目的主机的路径,随后它会将自己(路由器)的 MAC 地址回复给源主机。源主机会认为路由器的 MAC 地址就是目的主机的 MAC 地址,而对于随后发来的数据帧,路由器会转发到它后面真实 MAC 地址的目的主机。

    RARP(Reverse Address Resolution Protocol)逆向地址解析协议

    • RARP 与 ARP 是相反的关系,用于将 MAC 地址转换为 IP 地址。对应于 ARP,RARP 请求以广播方式传送,而 RARP 应答一般是单播传送的。

    ICMP(Internet Control Message Protocol)控制报文协议

    • 通信过程中的发生各种问题时,ICMP 将问题反馈,通过这些信息,管理者可以对所发生的问题作出诊断,然后采取适当的措施去解决它。
    • ICMP 报文由 8 位错误类型、8 位条件代码和 16 位校验和组成,被封装在一个 IP 数据报中:
    • 有一些出现差错而不产生 ICMP 报文的情况:
      1. ICMP 差错报文
      2. 目的地址是广播或多播地址
      3. 作为链路层广播的数据报
      4. 不是 IP 分片的第一片
      5. 源地址不是单个主机的数据报(源不能为零地址、环回地址、广播多播地址)

    传输层

    UDP协议

    • UDP主要特点:
      1. UDP 是无连接的,发送数据之前不需要建立连接(而 TCP 需要),减少了开销和时延。
      2. UDP尽最大努力交付,不保证交付可靠性。
      3. UDP 是面向报文的,对于从网络层交付下来的 IP 数据报,只做很简单的封装(8 字节 UDP 报头),首部开销小。
      4. UDP 没有拥塞控制,出现网络拥塞时发送方也不会降低发送速率。这种特性对某些实时应用是很重要的,比如 IP 电话,视频会议等,它们允许拥塞时丢失一些数据,因为如果不抛弃这些数据,极可能造成时延的累积。
      5. UDP 支持一对一、一对多、多对一和多对多的交互通信。
    • UDP 数据报可分为两部分:UDP 报头和数据部分。其中数据部分是应用层交付下来的数据。UDP 报头总共 8 字节,而这 8 字节又分为 4 个字段:

    TCP协议

    • TCP协议具有以下特点:
      1. TCP 提供 可靠的 数据传输服务,TCP 是 面向连接的 。应用程序在使用 TCP 通信之前,先要建立连接,这是一个类似“打电话”的过程,通信结束后还要“挂电话”。
      2. TCP 连接是 点对点 的,一条 TCP 连接只能连接两个端点。
      3. TCP 提供可靠传输,无差错、不丢失、不重复、按顺序。
      4. TCP 提供 全双工 通信,允许通信双方任何时候都能发送数据,因为 TCP 连接的两端都设有发送缓存和接收缓存。
      5. TCP 面向 字节流 。TCP 并不知道所传输的数据的含义,仅把数据看作一连串的字节序列,它也不保证接收方收到的数据块和发送方发出的数据块具有大小对应关系。
    • TCP报文段结构
    • 控制位:共有 6 个控制位,说明本报文的性质,意义如下:
      • URG 紧急:当 URG=1 时,它告诉系统此报文中有紧急数据,应优先传送(比如紧急关闭),这要与紧急指针字段配合使用。
      • ACK 确认:仅当 ACK=1 时确认号字段才有效。建立 TCP 连接后,所有报文段都必须把 ACK 字段置为 1。
      • PSH 推送:若 TCP 连接的一端希望另一端立即响应,PSH 字段便可以“催促”对方,不再等到缓存区填满才发送。
      • RST复位:若 TCP 连接出现严重差错,RST 置为 1,断开 TCP 连接,再重新建立连接。
      • SYN 同步:用于建立和释放连接,稍后会详细介绍。
      • FIN 终止:用于释放连接,当 FIN=1,表明发送方已经发送完毕,要求释放 TCP 连接。
    • 三次握手

    • 四次挥手

    • 连续 ARQ 协议:
      • 发送方可以连续发送多个报文段(连续发送的数据长度叫做窗口),而不必每发完一段就停下来等待确认。* 接收者收到多个连续的报文段后,只回复确认最后一个报文段,表示在这之前的数据都已收到。

    应用层协议

    DNS协议 (Domain Name Service 域名服务):提供域名和IP地址的对应关系

    • 域名解析的的优先顺序是:先在 DNS 缓存查询,若没有找到记录,再查询 hosts 文件,若还是没找到记录,再向 DNS 服务器发出 DNS 查询报文。

    FTP协议(File Transfer Protocol 文件传输协议)

    *主要功能是减少或消除在不同操作系统下处理文件的不兼容性,以达到便捷高效的文件传输效果。

    • FTP 只提供文件传输的基本服务,它采用 客户端—服务器 的方式,一个 FTP 服务器可同时为多个客户端提供服务。
    • 在进行文件传输时,FTP 的客户端和服务器之间会建立两个 TCP 连接:21 号端口建立控制连接,20 号端口建立数据连接。
    • FTP 的传输有两种方式:ASCII 传输模式和二进制数据传输模式。

    HTTP协议 (HyperText Transfer Protocol 超文本传输协议)

    • 基于TCP,使用端口80或8080;每当你在浏览器里输入一个网址或点击一个链接时,浏览器就通过 HTTP 协议将网页信息从服务器提取再显示出来,这是现在使用频率最大的应用层协议。
    • 请求报文的方法字段是对所请求对象进行的操作,而响应报文的状态码是一个 3 位数字,分为 5 类 33 种:
      * 1xx 表示通知信息,如收到或正在处理。
      * 2xx 表示成功接收。
      * 3xx 表示重定向。
      * 4xx 表示客户的差错,如 404 表示网页未找到。
      * 5xx表示服务器的差错,如常见的 502 Bad Gateway。

    Telnet协议

    • Telnet协议是 Internet 远程登陆服务的标准协议和主要方式,它基于 TCP 协议,使用端口 23。终端使用者在本地电脑上使用 telnet 程序,用它连接到服务器,终端使用者可以在 telnet 程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。
    • 使用 Telnet 协议进行远程登录时必须满足以下条件:
      • 在本地计算机上必须装有包含 Telnet 协议的客户程序;
      • 必须知道远程主机的 IP 地址或域名;
      • 必须知道登录标识与口令。
    • Telnet 远程登录服务分为以下4个过程:
      1. 本地与远程主机建立连接。该过程实际上是建立一个 TCP 连接,用户必须知道远程主机的 IP 地址或域名;
      2. 将本地终端上输入的用户名和口令及以后输入的任何命令或字符以 NVT ( Net Virtual Terminal ) 格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个 IP 数据包;
      3. 将远程主机输出的 NVT 格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;
      4. 最后,本地终端对远程主机进行撤消连接。该过程是撤销一个 TCP 连接。

    TFTP协议(Trivial File Transfer Protocol)

    • TFTP是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,它基于 UDP 协议,使用端口 69 。此协议设计的时候是进行小文件传输的,与 FTP 相比少了许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证。
    • TFTP也有着它自身的优点:
      • TFTP 可用于 UDP 环境;比如当需要将程序或者文件同时向许多机器下载时就往往需要使用到 TFTP 协议。
      • TFTP 代码所占的内存较小,这对于小型计算机或者某些特殊用途的设备来说是很重要的,TFTP 具有更多的灵活性,也减少了开销。

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议

    • 它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,它使用 TCP 协议,使用端口 25。
    • SMTP 存在两个端:
      • 在发信人的邮件服务器上执行的客户端
      • 在收信人的邮件服务器上执行的服务器端。
    • SMTP 的客户端和服务器端同时运行在每个邮件服务器上。当一个邮件服务器在向其他邮件服务器发送邮件消息时,它是作为SMTP客户在运行。
    • SMTP 的连接和发送过程:
      1. 建立 TCP 连接。
      2. 客户端向服务器发送 HELO 命令以标识发件人自己的身份,然后客户端发送MAIL命令。
      3. 服务器端以 OK 作为响应,表示准备接收。
      4. 客户端发送 RCPT 命令。
      5. 服务器端表示是否愿意为收件人接收邮件。
      6. 协商结束,发送邮件,用命令 DATA 发送输入内容。
      7. 结束此次发送,用QUIT命令退出。

    POP3(Post Office Protocol Version 3 )即邮局协议版本3

    • POP3是 TCP/IP 协议族中的一员 ,主要用于支持使用客户端远程管理在服务器上的电子邮件,使用 TCP 协议,使用端口 110 。POP3 邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的 POP3 协议。
    • POP3 工作过程:
      1. 用户运行用户代理(如Foxmail, Outlook Express)。
      2. 用户代理(以下简称客户端)与邮件服务器(以下简称服务器端)的110端口建立TCP连 接。
      3. 客户端向服务器端发出各种命令,来请求各种服务(如查询邮箱信息,下载某封邮件等)。
      4. 服务端解析用户的命令,做出相应动作并返回给客户端一个响应。
      5. 3和4交替进行,直到接收完所有邮件转到步骤6,或两者的连接被意外中断而直接退出。
      6. 用户代理解析从服务器端获得的邮件,以适当地形式(如可读)的形式呈现给用户。
    • POP3 和 SMTP 协同工作
  • 相关阅读:
    Java 使用 EasyExcel 实现简单的读写操作
    Java上传文件到阿里云对象存储器OSS
    Springboot 项目解决跨域的问题
    Java 使用 Kafka 发布信息与消费消息
    安装PHPldapAdmin出现You don't have permission to access /phpldapadmin/ on this server.问题
    LDAP安装、LDAP数据迁移、LDAP卸载指南及PHPldapAdmin管理软件安装
    LDAP数据备份与数据恢复
    docker 启动所有镜像
    详解GET 和 POST请求的本质区别
    如何使用 markdown
  • 原文地址:https://www.cnblogs.com/corvey/p/8478882.html
Copyright © 2011-2022 走看看