zoukankan      html  css  js  c++  java
  • 计算机网络--基础知识整理

    主要知识体系梳理

    注:该知识体系整理自公众号:CodeSheep。

    1. TCP/IP协议体系的认知

    2. 链路层

    • 以太网帧的格式
    • MTU的概念

    3. 网络层

    • IP的首部格式
    • IP的分片
    • IP选路
    • ARP协议和RARP协议(ARP缓存原理)
    • ICMP协议(报文格式、分类:2查询5差错)

    4. 传输层

    • UDP特点和首部各个字段
    • TCP
      • 特点 + 首部字段 + 可靠机制
      • 连接控制 : 三次握手,四次挥手,同时打开,同时关闭,半关闭(why)
      • 流量控制机制:滑动窗口,慢启动,拥塞避免,快速重传,快速恢复
      • 超时重传机制

    5. 应用层

    • DNS协议
      • 名字空间
      • 指针查询(反向查找或逆向解析)基本原理
      • DNS缓存
    • FTP协议:
      • 控制流和数据流
      • 两种工作模式: PASV 和 PORT
      • 各种指令和响应码
      • 断点续传和匿名FTP的概念
    • HTTP协议:
      • 报文格式:请求报文,响应报文,请求头各种字段,响应头各种字段
      • HTTP状态码
    • HTTPS协议
      • 握手的详细过程
      • 摘要算法,数字签名,数字证书的原理和过程

    计算机网络--基础知识整理

    注:主要章节内容整理自韩立刚老师的计算机网络课程。教材《计算机网络 第5版 谢希仁》。

    物理层

    2.1 物理层的基本概念

    物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。

    物理层的主要任务描述为:确定传输媒体的接口的一些特性,即:

    • 机械特性:例如接口形状,大小,引线数目
    • 电气特性:例如规定电压范围(-5v到+5v)
    • 功能特性:例如规定-5v表示0,+5v表示1
    • 过程特性:也称作规程特性,规定建立连接时各个相关部门的工作步骤

    2.2 数据通信的基础知识

    模拟信号:代表消息的参数的取值是连续的

    数字信号:代表消息的参数的取值是离散的

    调制解调器:数字信号经过调制变为模拟信号,模拟信号经解调变为数字信号

    码元(code):在使用时间域的波形表示数字信号时,则代表不同离散数值的基本波形就称为码元。在数字通信中常用时间间隔相同的符号来表示一个二进制数字,这样的时间间隔内的信号称为二进制码元。而这个间隔被称为码元长度。1码元可以携带nbits的信息量。

    信道:一般表示向一个方向传送信息的媒体。

    单向通信(单工通信):只能有一个方向的通信而没有反方向的交互。

    双向交替通信(半双工通信):通信的双方都可以接收或者发送消息,但不能同时发送或者接收。

    双向同时通信(全双工通信):--

    基带信号(基本频带信号):来自信源的信号。比如我们说话的声音、计算机中代表文件的数据信号(高低电平信号)。传输距离较近。

    带通信号:把基带信号经过载波调制后,把信号的频率范围搬移到较高的频段,以便在信道中传输。传输距离较远。

    几种基本的调制方法:

    • 调幅(AM):载波的振幅随数字信号而变化。
    • 调频(FM):载波的频率随数字信号而变化
    • 调相(PM):载波的初始相位随数字信号而变化

    波特率(也称信息传送速率、码元速率、符号速率、或传码率):每秒钟传送码元的数目,码元速率的单位为“波特”,常用符号“Baud”表示,简写为“B”。若信号码元宽度为T秒,则码元速率

    比特率(数据传输速率):单位时间内可以传输的比特数,单位为bps。比特率=波特率*每个码元含的比特数。

    带宽:一般信道都有一个最高的信号频率(不是波特率)和最低的信号频率,只有在这两个频率之间的信号才能通过这个信道,这两个频率的差值就叫做这个信道的带宽,单位是Hz。

    容量:数据在信道中传输会有他们的速度——比特率,最高的比特率就叫做这个信道的容量,单位是bps。

    奈奎斯特定理(又叫采样定理,适用于模拟信号):规定了理想条件下,为了避免码间串扰,码元的传输速率的的上限。码元最高传输速率:  C=2W log2K b/s

    香农定理(模拟信号与数字信号):信道的极限(有噪声)传输速率:  C=W log2(1+S/N) b/s

    W:信道带宽(Hz)

    K:相数(例如0-1电平相数为2)

    S:信道传输信号的平均功率

    N:信道内部高斯噪声功率

    S/N:信噪比(无单位)

    log10S/N:信噪比(有单位db,分贝)

    eg(1):假设一个传四进制数据信号的无噪声数字信道,带宽为3000Hz,求其信道容量。

    答:C=2Wlog2K=2*3000*log24=12000 bit/s

    eg(2):有一个经调制解调器传输数据信号的电话网信道,该信道带宽为3000Hz,信道噪声为加性高斯白噪声,其信噪比为20db,求该信道的信道容量。

    答:10log10S/N=20, S/N=100, C=W log2(1+S/N)=3000*log2(1+100)  bit/s

    2.3 物理层下的传输媒体

    在导向传输媒体中,电磁波沿着固体媒体传播,有:

    • 双绞线(屏蔽双绞线STP、无屏蔽双绞线UTP),同轴电缆(50Ω(基带)同轴电缆(数字传输)、75Ω(宽带)同轴电缆(模拟传输)),光缆。
    • 网线(直通线):白橙、橙、白绿、蓝、白蓝、绿、白棕、棕。

    光纤在纤芯的传输方式是全反射。

    非导向传输媒体就是指自由空间,其中的电磁波传输方式被称为无线传输,有:

    • 短波通信(主要依靠地球电离层反射)
    • 微波(直线传播)(地面微波接力通信、卫星通信)

    集线器:在网络中起到信号放大和重发的作用,目的是扩大网络传输范围,不具备信号的定向传输能力。最大传输距离100m。集线器是一个大的冲突域。

    2.4 信道复用技术

    频分复用FDM(Frequency DiviSion Multiplexing)

    频分复用的所有用户在同样的时间里占用不同的带宽资源(频率带宽而非数据速率)

    时分复用TDM(Time Division Multiplexing)

    时分复用将时间划分为一段等长的时分复用帧,每一个用户在每一个TDM帧中占用固定序号的时隙。相当于所有用户在不同时间占用同样的频带宽度。

    波分复用WDM(Wavelength Division Multiplexing)

    波分复用就是光的频分复用。

    数据链路层

    3.1  基本概念

    802委员会将数据链路层拆分为两个子层:

    • 逻辑链路控制LLC(Logic Link Controll)子层
    • 媒体接入控制MAC(Medium Access Controll)子层

    由于TCP/IP体系经常使用的局域网是DIX Ethernet V2而不是802.3标准,因此现在LLC层作用已经不大了。

    数据链路层使用的信道主要有以下两种类型:

    • 点对点信道。这种信道使用一对一的点对点通信方式。
    • 广播信道。这种信道使用一对多的广播通信方式。

    链路(link):一条无源的点到点的物理线路段,中间没有任何其他的交换结点。

    数据链路(data link):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。

    最大传输单元(Maximum Transmission Unit,MTU):用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。 是包或帧的最大长度,一般以字节记。如果MTU过大,在碰到路由器时会被拒绝转发,因为它不能处理过大的包。如果太小,因为协议一定要在包(或帧)上加上包头,那实际传送的数据量就会过小,这样也划不来。大部分操作系统会提供给用户一个默认值,该值一般对用户是比较合适的(1500或1492)。

    数据链路层的三个基本问题

    (1) 封装成帧

    封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部的一个重要作用就是进行帧定界。 

     

    (2) 透明传输

    透明传输问题是帧传输过程中遇到的问题,当帧的数据部分出现控制字符时,接收端可能误以为这是一个开始或结束字符,从而出错。

    解决:

    字节填充(byte stuffing)或字符填充(character stuffing):接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个。

    发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是 1B)。

    (3) 差错控制

    在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。

    误码率 BER (Bit Error Rate):在一段时间内,传输错误的比特占所传输比特总数的比率。误码率与信噪比有很大的关系。

    在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。

    CRC:

    过程:在发送端,先把数据划分为组。假定每组 k 个比特。假设待传送的一组数据 M = 101001(现在 k = 6)。我们在 M 的后面再添加供差错检测用的 n 位冗余码一起发送。

    帧检验序列 FCS (Frame Check Sequence):在数据后面添加上的冗余码。

    计算:在 M 后面添加 n 个 0。得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位的除数 P,得出商是 Q 而余数是 R,那么在M后面添加R发送。

    检验:接收端接收到M+R,除以同样是事先选定好的长度为 (n + 1) 位的除数 P,若得出的结果尚为0,则判定此帧无差错,接受,否则判断此帧有差错,丢弃。

    缺陷:这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。只能做到无差错接受(accept)。要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。 

    示例:

    3.2 点对点协议PPP

    现在全世界使用得最多的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。

    PPP协议的组成:

    • 一个将 IP 数据报封装到串行链路的方法
    • 链路控制协议 LCP (Link Control Protocol)
    • 网络控制协议 NCP (Network Control Protocol)

    PPP协议帧的格式:

    PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。

    当 PPP 用在异步传输时,就使用一种特殊的字符填充法。    

    PPP 协议用在 SONET/SDH 链路时,是使用同步传输(一连串的比特连续传送)。这时 PPP 协议采用零比特填充方法来实现透明传输。

    零比特填充:

    在发送端,只要发现有 5 个连续 1,则立即填入一个 0。接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。

    PPP 协议之所以不使用序号和确认机制是出于以下的考虑:

    • 在数据链路层出现差错的概率不大时,使用比较简单的 PPP 协议较为合理。
    • 在因特网环境下,PPP 的信息字段放入的数据是 IP 数据报。数据链路层的可靠传输并不能够保证网络层的传输也是可靠的。
    • 帧检验序列 FCS 字段可保证无差错接受。  

    PPP协议的工作步骤:

    • 当用户拨号接入ISP时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
    • PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
    • 这些分组及其响应选择一些 PPP 参数,和进行网络层配置,NCP 给新接入的 PC机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
    • 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。

    3.3 使用广播信道的数据链路层

    局域网的拓扑:

    以太网标准:

    1. DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约。(TCP/IP常用)
    2. IEEE 的 802.3 标准

    DIX Ethernet V2 标准与 IEEE 的 802.3 标准只有很小的差别,因此可以将 802.3 局域网简称为“以太网”。严格说来,“以太网”应当是指符合 DIX Ethernet V2 标准的局域网 。

    以太网提供的服务:

    • 以太网提供的服务是不可靠的交付,即尽最大努力的交付

    网卡:网络接口板又称为通信适配器(adapter)或网络接口卡 NIC (Network Interface Card),或“网卡”,作用是:

    • 进行串行/并行转换。
    • 对数据进行缓存。
    • 在计算机的操作系统安装设备驱动程序。
    • 实现以太网协议。 

    计算机通过适配器和局域网进行通信:

    载波监听多点接入/碰撞检测  CSMA/CD

    “多点接入”表示许多计算机以多点接入的方式连接在一根总线上。

    “载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。

    “碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。

    传播时延对载波监听的影响:

    使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。

    争用期(碰撞窗口):

    最先发送数据帧的站,在发送数据帧后至多经过时间 2τ(两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。以太网的端到端往返时延2τ称为争用期。

    经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。

    以太网的帧规定的由来:

    以太网的争用期通常取51.2微秒(以太网网线最长规定为100m),对于10Mb/s的以太网,在争用期内可以发送512bit,即64字节。在该以太网发送数据时,若前64字节未发生冲突,则后续的数据也不会发生冲突,若发生冲突,就一定在发送的前64字节内。

    以太网规定最短有效帧长为64字节,凡是长度小于64字节的帧都是无效帧。

    集线器

    1. 集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行
    2. 使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是 CSMA/CD 协议,并共享逻辑上的总线
    3. 集线器很像一个多接口的转发器,工作在物理层

    MAC层

    在局域网中,硬件地址又称为物理地址,或 MAC 地址。

    48位MAC地址:IEEE 的注册管理机构 RA 负责向厂家分配地址字段的前三个字节(即高位 24 位)。地址字段中的后三个字节(即低位 24 位)由厂家自行指派,称为扩展标识符,必须保证生产出的适配器没有重复地址。

    适配器从网络上每收到一个 MAC 帧就首先用硬件检查 MAC 帧中的 MAC 地址。如果是发往本站的帧则收下,然后再进行其他的处理。否则就将此帧丢弃,不再进行其他的处理。

    “发往本站的帧”包括以下三种帧:

    • 单播(unicast)帧(一对一)
    • 广播(broadcast)帧(一对全体)
    • 多播(multicast)帧(一对多)

    最常用的 MAC 帧是以太网 V2 的格式:

    类型字段用来标志上一层使用的是什么协议,以便把收到的 MAC 帧的数据上交给上一层的这个协议。

    数据字段的正式名称是 MAC 客户数据字段,最小长度 64 字节-18 字节的首部和尾部 = 数据字段的最小长度。

    在帧的前面插入的 8 字节中的第一个字段共 7 个字节,是前同步码,用来迅速实现 MAC 帧的比特同步。第二个字段是帧开始定界符,表示后面的信息就是MAC 帧。

    在数据链路层扩展局域网

    使用网桥。网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发。网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口。

    网桥使各网段成为隔离开的碰撞域:

    例如,如果一个源地址与B同端(例如A),目的地址为B的帧,经过网桥时,网桥将拒绝将此帧转发到与B不同端的地址(例如C),从而将大的碰撞域隔离为各个小的碰撞域。

    网桥的接口逐渐增加,从而演化为直接与计算机相连的交换机。交换机不将每一个主机的请求广播,而是基于MAC地址进行源地址到目的地址的通信,从而避免了碰撞,实现全双工通信。

    网络层

    4.1  网络层提供的服务

    网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。

    网络层协议

    网络层如何转发数据包

    PC4 -> PC3示意图:

    网络设备所在层次

    • 集线器 -> 物理层
    • 交换机 -> 数据链路层
    • 路由器 -> 网络层

    4.2  IP

    IP数据报格式

    版本:占 4 位,指 IP 协议的版本,目前的 IP 协议版本号为 4 (即 IPv4)。

    首部长度:占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)因此 IP 的首部长度的最大值是 60 字节。

    区分服务:占 8 位,用来获得更好的服务在旧标准中叫做服务类型,但实际上一直未被使用过。1998 年这个字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段。

    总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。

    标识(identification):占 16 位,它是一个计数器,用来产生数据报的标识。

    标志(flag):占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF = 0 时才允许分片。

    片偏移:占12 位,指出较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。

    生存时间:占8 位,记为 TTL (Time To Live)数据报在网络中可通过的路由器数的最大值。

    协议:占8 位,字段指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程。

    首部检验和:占16 位,字段只检验数据报的首部不检验数据部分。

    分类IP地址

    每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。

    两级的 IP 地址可以记为:

    IP 地址 = { <网络号>, <主机号>}    

    当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。因此一个路由器至少应当有两个不同的 IP 地址。

    子网掩码

    为何要设计子网掩码:

    • 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。使用子网掩码(subnet mask)可以找出 IP 地址中的子网部分。 

    默认子网掩码:

    网络地址 = (IP 地址) AND (子网掩码)

    例子:已知互联网和路由器R1中的路由表。主机H1向H2发送分组。讨论R1收到H1向H2发送的分组后查找路由表的过程:

    • 主机H1先根据自己所在子网的掩码与H2的网络地址做与运算,如果所得结果与子网1网络地址地址一致,则说明H2位于同一个子网,直接发送分组即可;否则,H1将分组传送到路由器R1
    • R1根据路由表逐项对照,分别用所对应的子网掩码与H2地址做与运算,若得出一致(与目的网络地址相等),则找到H2所在子网,发送分组即可。255.255.255.128 AND 128.30.33.138 = 128.30.33.128匹配!这表明子网 2 就是收到的分组所要寻找的目的网络。

    4.3  ARP(Address Resolution Protocol)协议

    ARP通过将IP地址广播,附上目标·MAC地址是FF-FF-FF-FF-FF-FF,从而解析目标IP地址的MAC地址。

    不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。  

    ARP 高速缓存的作用

    为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。

    4.4  逆地址解析协议 RARP

    逆地址解析协议 RARP 使只知道自己硬件地址的主机能够知道其 IP 地址。这种主机往往是无盘工作站。 因此 RARP协议目前已很少使用。

    4.5  网际控制报文协议ICMP(Internet Control Messages Protocol)

    ICMP 报文格式:

    ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。

    ICMP 差错报告报文共有 5 种:

    1. 终点不可达
    2. 源点抑制(Source quench) 
    3. 时间超过
    4. 参数问题
    5. 改变路由(重定向)(Redirect) 

    ICMP 询问报文有 2 种:

    1. 回送请求和回答报文
    2. 时间戳请求和回答报文

    4.6  网际组播管理协议IGMP (Internet Group Management Protocol)

    多播可明显减少网络中资源的消耗,如图:

    多播使用组地址—— IP 使用 D 类地址支持多播。为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP。

    传输层

    5.1  协议与服务

    传输层协议和应用层协议之间的关系

    http = TCP+80

    https = TCP+443

    RDP = TCP+3369

    ftp = TCP+21

    共享文件夹 = TCP+445

    SMTP = TCP+25

    telnet = TCP+23

    SQL =TCP+1433

    DNS = UDP+53

    服务和应用层协议之间的关系

    • 服务使用TCP或者UDP的端口侦听客户端请求
    • 客户端使用IP地址定位服务器,使用目标端口定位服务

    5.2  UDP的主要特点

    1. UDP 是面向报文的,传送的数据单位是 UDP 报文或用户数据报。
    2. UDP 是无连接的,即发送数据之前不需要建立连接。
    3. UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制,很适合多媒体通信的要求。
    4. UDP 支持一对一、一对多、多对一和多对多的交互通信。
    5. UDP 的首部开销小,只有 8 个字节。

    UDP报文格式:

    用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。

    在计算校验和时,临时把伪首部和UDP数据报拼接起来,对整个UDP数据报求校验和。

    5.3  TCP

    TCP主要的特点:

    1. TCP 传送的数据单位协议是 TCP 报文段(segment)。
    2. TCP 是面向连接的运输层协议。
    3. 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
    4. TCP 提供可靠交付的服务
    5.  TCP 提供全双工通信
    6. 面向字节流

    Note: TCP 连接是一条虚连接而不是一条真正的物理连接。TCP 连接的端点叫做套接字(socket)或插口。套接字 socket = (IP地址: 端口号)

    TCP报文段的首部格式:

    源端口和目的端口字段:各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。 

    序号字段:占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

    确认号字段:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

    数据偏移(即首部长度):占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。 

    保留字段:占 6 位,保留为今后使用,但目前应置为 0。

    紧急 URG : 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

    确认 ACK : 只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。

    推送 PSH (PuSH) : 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。 

    复位 RST (ReSeT) : 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

    同步 SYN : 同步 SYN = 1 表示这是一个连接请求或连接接受报文。

    终止 FIN (FINis) : 用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

    窗口字段 : 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。

    检验和 : 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。

    紧急指针字段 : 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。 

    选项字段 : 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” MSS (Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。

    填充字段 : 这是为了使整个首部长度是 4 字节的整数倍。

    5.3.1  TCP可靠传输的实现

    停止等待协议

    使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reQuest)。

    停止等待协议的优点是简单,但缺点是信道利用率太低。

    连续ARQ协议

    滑动窗口以字节位单位。

    接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。

    累积确认有的优点是:容易实现,即使确认丢失也不必重传。缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。

    Go-back-N(回退 N):

    如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。

    这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。

    可见当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。

    5.3.2  TCP的流量控制

    通过收发双方的滑动窗口来进行流量控制。

    一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。

    流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。

    利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。

    例子:A向B发送数据,B告诉A,B的rwnd=400(字节)。

     5.3.3  TCP的拥塞控制

    慢开始和拥塞避免

    当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16。

    在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。

    发送端每收到一个确认 ,就把 cwnd 加 1。于是发送端可以接着发送 M1 和 M2 两个报文段。

    接收端共发回两个确认。发送端每收到一个对新报文段的确认,就把发送端的 cwnd 加 1。现在 cwnd 从 2 增大到 4,并可接着发送后面的 4 个报文段。 

    发送端每收到一个对新报文段的确认,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输轮次按指数规律增长。

    当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。

    假定拥塞窗口的数值增长到 24 时,网络出现超时,表明网络拥塞了。

    更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。

    当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。

    快重传和快恢复

    当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半。 由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

    发送窗口的实际上限值=MIN(rwnd, cwnd),即,发送方的发送窗口的上限值应该取,接收方窗口和拥塞窗口这两个变量中的较小的一个。

    5.3.4  TCP的运输连接管理

    传输连接有三个阶段:连接建立、数据传输、连接释放。

    三次握手建立TCP连接

    • A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
    • B 的 TCP 收到连接请求报文段后,如同意,则发回确认。B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号ack = x + 1,自己选择的序号 seq = y。
    • A 收到此报文段后向 B 给出确认,其 ACK = 1,确认号 ack = y + 1。A 的 TCP 通知上层应用进程,连接已经建立。  
    • B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。

    什么要进行第三次握手?

    为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误:

    一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。如果采用“三次握手”的话就不会出现这种情况,B端收到一个过时失效的报文段之后,向A端发出确认,此时A并没有要求建立连接,所以就不会向B端发送确认,这个时候B端也能够知道连接没有建立。

    四次挥手释放TCP连接

    • 现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP连接。A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待 B 的确认。
    • B 发出确认,确认号 ack = u + 1,而这个报文段自己的序号 seq = v。TCP 服务器进程通知高层应用进程。从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 若发送数据,A 仍要接收。
    • 若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。
    • A 收到连接释放报文段后,必须发出确认在确认报文段中 ACK = 1,确认号 ack = w + 1,自己的序号 seq = u + 1。TCP 连接必须经过时间 2MSL 后才真正释放掉。

    TCP连接必须经过时间2MSL(最长报文寿命,通常=2min)后才能真正释放掉,为什么?

    为了保证 A 发送的最后一个 ACK 报文段能够到达 B。防止客户端A确认包丢失,却已经关闭连接,而服务端B迟迟收不到确认包从而无法释放连接,造成资源的占用与浪费。

    应用层

    6.1  域名系统 DNS (Domain Name System)

    因特网域名空间

    因特网采用了层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。域名的结构由标号序列组成,各标号之间用点隔开:

                  … . 三级域名 . 二级域名 . 顶级域名

    各标号分别代表不同级别的域名。  

    域名的解析过程

    主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。

    本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。

    名字的高速缓存

    每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录。

    可大大减轻根域名服务器的负荷,使因特网上的 DNS 查询请求和回答报文的数量大为减少。

    为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器,并处理超过合理时间的项(例如,每个项目只存放两天)。

    当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。

    6.2  文件传送协议 FTP (File Transfer Protocol)

    FTP 使用客户服务器方式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。

    控制连接在整个会话期间一直保持打开,FTP 客户发出的传送请求通过控制连接发送给服务器端的控制进程,但控制连接不用来传送文件。

    实际用于传输文件的是“数据连接”。服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”,用来连接客户端和服务器端的数据传送进程。

    当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。

    接着,服务器进程用自己传送数据的熟知端口(20)与客户进程所提供的端口号码建立数据传送连接。

    6.3  HTTP (Hyper Text Transfer Protocol,超文本传输协议)

    HTTP 有两类报文:

    请求报文——从客户向服务器发送请求报文。

    响应报文——从服务器到客户的回答。

    由于 HTTP 是面向正文的(text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。

    请求报文结构:

    “方法”是面向对象技术中使用的专门名词。所谓“方法”就是对所请求的对象进行的操作,因此这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的。

    “URL”是所请求的资源的 URL。

    “版本”是 HTTP 的版本。

    响应报文:

    响应报文的开始行是状态行。状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语。

    状态码:

    1xx 表示通知信息的,如请求收到了或正在进行处理。

    2xx 表示成功,如接受或知道了。

    3xx 表示重定向,表示要完成请求还必须采取进一步的行动。

    4xx 表示客户的差错,如请求中有错误的语法或不能完成。

    5xx 表示服务器的差错,如服务器失效无法完成请求。

  • 相关阅读:
    1029: [JSOI2007]建筑抢修
    1028: [JSOI2007]麻将
    1050 棋盘染色 2
    1026: [SCOI2009]windy数
    1074: [SCOI2007]折纸origami
    839. Optimal Marks
    1024: [SCOI2009]生日快乐
    1025: [SCOI2009]游戏
    1023: [SHOI2008]cactus仙人掌图
    对前面的总结
  • 原文地址:https://www.cnblogs.com/icky1024/p/networks-basic.html
Copyright © 2011-2022 走看看