《计算机网络》谢希仁 阅读笔记

2019-11-12 · 41 min read

第一章 概述

1.1 计算机网络在信息时代中的作用

1.2 互联网概述

1.3 互联网的组成

1.3.2 互联网的核心部分

路由器(router):是实现分组交换的关键构件,任务是转发收到的分组,这是网络核心部分最重要的功能

1 电路交换 2 分组交换主要特点

1.4 计算机网络在我国的发展

搜狐 网易 新浪 腾讯 阿里 百度

1.5 计算机网络的类别

1.5.2 几种不同类别的计算机网路 (1) 按照网络的作用范围进行分类

(2) 按照网络的使用者进行分类 公用网,专用网

(3) 用来把用户接入到互联网的网络 接入网AN(Access Network)

1.6 计算机网络的性能

1.6.1 计算机网络性能指标

  1. 速率

bit rate 比特率(bts/s、bps、b/s、4mbit/s)

2)带宽 bandwidth

  1. 吞吐量

throuput

4)时延(延迟、迟延) delay、latency 发送时延、传播时延、处理时延、排队时延

5)时延带宽积(=传播时延 * 带宽)

6)往返时间RTT Round trip-Time

  1. 利用率

信道利用率、网络利用率

1.6.2 计算机网络的非性能指标

1 费用 2 质量: 网络中所有构件的质量,可靠性,网络管理的简易性 3 标准化:网络软硬件的设计标准(国际标准,专用标准)影响升级换代维修和技术支持 4 可靠性 5 可扩展性可升级性 6 易于管理和维护

1.7 计算机网络体系结构

1.7.1 计算机网络体系结构的形成

ARPANET 1974年 美国IBM宣布SNA体系(System Network Architecture) 1977年 国际标准化组织ISO 推出 OSI/RM (Open Source Interconnection Reference Model开放互联基本参考模型) OSI/RM是个抽象概念 1984 形成基本参考模型的基本文件:ISO 7498 即七层协议的体系结构

20世纪90年代初期,虽然然OSI标准都已经基本成型,但由于基于TCP/IP的互联网已经抢先在全球大范围成功的运行了,所以OSI最终并没有成为标准

OSI失败的原因:

OSI

CCITT 国际电报电话资讯委员会(后来的许多标准都是ISO和CCITT联合制定的)

1.7.2 协议与划分层次

网络协议主要由三个要素组成: 1 语法,数据与控制信息的结构或格式 2 语义,即需要发出何种控制信息,完成何种动作以及做出何种响应 3 同步,即事件实现顺序的详细说明

由此可见,网络协议时计算机网络不可缺少的组成部分。

协议通常有两种形式: 一种便于开发者阅读和理解的文字描述 另一种是让计算机理解的程序代码

两种形式都必须能够对网络上的信息交换过程做出精确解释

ARPANET的研制经验表明,对于非常复杂的计算机网络协议,其结构应该是层次式的

分层设计带来的好处 1)各层之间是独立的 2)灵活性好 3)结构上可以分割开 4)易于实现和维护 5)能促进标准化工作

1.7.3 具有五层协议的体系结构

2021 01 18 13 59 11 七层:应用层 表示 会话层 运输层 网络层 数据链路层 物理层 TCP/IP四层(三层):应用层(TELNET FTP SMTP) 运输层(TCP UDP) 网络层(IP) 网络接口层

学习用五层(TCP/IP上三层+OSI下两层):应用层 传输层 网络层 数据链路层 物理层

1 应用层:

应用层协议:域名系统(DNS) 万维网y应用(HTTP) 电子邮件(SMTP) 等… 交互的数据单元: 报文(message)

2 运输层: 负责两台主机进程之间的通信通用的数据传输服务(即多种应用可以使用同一个运输层服务)

由于一台主机可同时运行多个进程,因此运输层有复用分用的功能 两种协议:

  • TCP(Transmission Control Protocol) 传输控制协议(提供面向连接的、可靠的数据传输服务,传输单位是报文段segment

  • UDP(User Datagram Protocol) 用户数据报协议 (提供无连接的、尽最大努力(best-effort)的数据传输服务(不保证数据的可靠性)传输单位是用户数据报)

协议数据单元 asd阿萨德吉asdjiaj asdas撒ddasdasdasdasasdasd 3 网络层

  • 网际协议IP(IP协议)
  • 地址解析协议ARP
  • 网际控制报文协议ICMP
  • 网际组管理协议IGMP

网络层向上 负责为分组交换网上的不同主机提供通信服务。 网络层把运输层产生的报文段用户数据报封装成分组进行传送。

TCP/IP体系中分组也称IP数据报数据报

此外无论那一层的数据单元,都可以笼统的用分组表示

4 数据链路层 负责将网络层交来的IP数据报组装成帧(frame) 每一包括数据和必要的控制信息(同步信息、地址信息、差错信息等)

在接受数据时,控制信息使得数据接收端能够知道一个从哪个比特开始和到哪个比特结束。这样数据链路层在收到一个后就可以从中提取出数据部分,上交给网络层

控制信息还可以使得接收端检测收到的中有无差错,如发现有差错,数据链路层就简单的丢弃这个除了差错的,如需要改正数据帧中的差错,就要采用可靠传输协议来纠正出现的差错。

5 物理层

数据单位: 比特 发送方发0 1 接收方要接受0 1 物理层要考虑多大的电压表示0或1、电缆插头的引脚的数量、连接

简单传输流程:

1.7.4 实体、协议、服务和服务访问节点

1.7.5 TCP/IP的体系结构

第二章 物理层

2.1 物理层的基本概念

物理层协议:规程(procedure)

数据在通信线路上的传输方式一般是串行传输(这是出于经济上的考虑)

2.2 数据通信的基础知识

2.2.1 数据通信系统的模型 源系统 传输系统 目的系统

2.2.2 有关信道的j基本概念 单向通信 (单工通信) 双向交替通信 (半双工通信) 双向同时通信 (全双工通信)

基带信号 调制 1)常用的编码方式 不归零制 归零制 曼切斯特编码 差分曼切斯特编码 2)基本的带通调制方法 调幅 调频 调相

2.2.3 信道的极限容量

1)信道能通过的频率范围 2)信噪比 信息论的创始人香农(Shannon)推导出了著名的香农公式(计算信道的极限信息传输速率)

2.3 物理层下面的传输媒体

传输介质、传输媒介

分为:导引型传输媒体 和 非导引型传输媒体

2.3.1 导引型传输媒体 1 双绞线(把两根相互绝缘的铜导线并排放在一起,然后用规则的方法绞合起来就构成了双绞线 电话系统是用双绞线最多的地方)

2 同轴电缆(同轴电缆由内导体铜质芯线(单股实心线或多股绞合线)、绝缘层、网状编织的外导体屏蔽层以及保护塑料外层所组成) 由于外导体屏蔽层的作用,同轴电缆具有很好的抗干扰特性,被广泛用于传输较高速率的数据

3 光缆 光纤通信就是利用光导纤维传递光脉冲来进行通信,有光脉冲相当于1,无光脉冲相当于0. 由于可见光的频率非常高,约为 10^8Mhz的量级,因此一个光纤通信的传输带宽远远大于目前其他传输介质

光纤通常由非常透明的石英玻璃拉成细丝,主要由纤芯合包层构成双层通信圆柱体。

2.3.2 非导引型传输介质

无线传输介质 无线传输可用的频段很广。 人们已经利用了好几个波段进行通信。紫外线和更高的波段目前还不能用于通信。

地面微波接力通信 卫星通信

2.4 信道复用技术

复用(multiplexng)是通信技术中的基本概念。在计算机网络中的信道广泛的使用各种复用技术。

2.4.1 频分复用、时分复用和统计时分复用 最基本的复用是 频分复用 同样的时间占用不同的带宽资源

时分复用 所有用户再不同的时间占用同样的频带宽度

这两种复用方法的优点是技术比较成熟,但缺点是不够灵活。时分复用更有利于数字信号的传播。

在进行通信时,复用器总是和分用器成对的使用

统计时分复用是一种改进的时分复用,能明显提高信道的利用率,又称为异步时分复用

2.4.2 波分复用 波分复用WDM就是光的频分复用

2.4.3 码分复用 CDM

2.5 数字传输系统

2.6 宽带接入技术

2.6.1 ADSL技术 非对称数字用户线ADSL(Asymmetric Digital Subscriber Line) 技术是用数字j技术对现有的模拟电话用户线进行改造

0-4khz的低频段留给传统电话使用,而把没有被利用的高频

ADSL调制解调器 离散多音调(Discrete Multi-Tone)调制技术 频分复用

2.6.2 光纤同轴混合网(HFC网)

是在覆盖面很广的有线电视网的基础上开发的居民宽带接入网

HFC网把原有的有线电视网中的同轴电缆主干部分换成光纤。 光纤从头端连接到光纤节点,然后通过同轴电缆传送到每个用户家庭

使用电缆调制解调器(Cabole modem)

电缆调制解调器只需安装在用户端, 电缆调制解调器比ADSL使用的调制解调器复杂的多,因为它必须解决g共享信道中存在冲突的问题

2.6.3 FTTx技术

Fiber To The x

FTTH 光纤到户 FTTC 到路边 Curb FTTZ 到小区 Zone FTTB 到大楼 Building FTTF 到楼层 Floor FTTO 到办公室 Office FTTD 到左面 Desk

第三章 数据链路层

  • 网络拓扑
  • 通信信道(点对点通信 广播通信 )

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

  1. 点对点通信
  2. 广播通信

PPP 协议 点对点通信

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

局域网的数据链路层 以太网 CSMA/CD:多点接入,载波监听,碰撞检测 曼切斯特编码

以太网的MAC层: Mac层的硬件地址 MAC帧

虚拟局域网

第四章 网络层

(1) 虚拟互联网络的概念 (2) IP地址与物理地址的关系 (3) 传统分类的IP地址(包括子网掩码)和无分类域间路由选择CIDR (4) 路由选择协议的工作原理

4.1 网络层提供的两种服务

  • 面向连接
  • 面向无连接

互联网的设计思路: 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。(datagram 数据报 Or 分组)

网络层不提供服务质量的承诺 (所传送的数据报(分组)可能出错、丢失、重复、失序。也不保证数据报交付的时限 运输层负责差错处理、流量控制等 )

这样设计好处:网络造价大大降低,运行方式灵活。

4.2 网际协议IP

又称为Kahn-Cerf协议(两个研发者姓氏组合2005图灵奖)

IPv4,IPv6: IP协议第四版 第六版本。(版本1-3和5都未曾使用过) 与IP协议配套的还有三个协议:

  • 地址解析协议ARP
  • 网际控制报文协议ICMP
  • 网际组管理协议IGMP

4.2.1 虚拟互联网络

如果要在全世界把数以万计的网络都连接起来,并且能够互相通信,那么这样的任务一定非常复杂。

不同的寻址方案 
不同的最大分组长度
不同的网络接入机制
不同的超时控制
不同的差错恢复方法
不同的状态报告方法
不同的路由选择技术
不同的用户接入控制
不同的服务(面向连接和无连接服务)
不同的管理与控制方式

没有一种单一的网络能够适应所有用户的需求 将网络连接起来的中间设备: (1) 物理层使用的中间设备转发器(repeater) (2) 数据链路层使用的中间设备网桥或叫桥接器(bridge) (3) 网络层使用的中间设备叫做路由器(router) (4) 网络层以上使用的中间设备网关(gateway)(用网关连接两个不兼容的系统需要在高层进行协议的转换)

由于历史的原因,很多关于TCP/IP的文献会把网络层使用的路由器称为网关

虚拟互联网络指逻辑互联的网络,意思是互联起来的各种计算机的物理网络的异构性是客观存在的,但是利用IP协议就可以使这些性能各异的网络在网络层上看起来好像一个统一的网络

4.2.2 分类的IP地址

  • 分类的ip地址: 最基本的编址方法 1981
  • 子网的划分: 对最基本的编址方法的改进 1985
  • 构成超网: 无分类编址方法 1993

网络号 主机号 A B C类地址都是单播地址

4.2.3 IP地址与硬件地址

IP地址与硬件地址的区别?

ip地址是网络层和以上各层使用的地址,是一种逻辑地址(即IP地址是用软件实现的)
物理地址是数据链路层和物理层使用的地址

使用ip地址的ip数据报一旦交给了数据链路层,就被封装成了MAC帧了。 MAC帧在传输时使用的源地址和目的地址都是硬件地址,都写在MAC帧的首部中。 接收方根据MAC首部硬件地址决定收下或丢弃。只有在剥去首部和尾部把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部和尾部找到源IP 和目的IP地址

  • 在ip层抽象的互联网上只能看到IP数据报
  • 虽然在IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择
  • 局域网的链路层,只能看见MAC帧
  • IP层抽象的互联网屏蔽了下层复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或路由器之间的通信

ip协议未解决的问题?

  • 主机和路由器怎么知道在MAC帧的首部填入什么样的硬件地址 - ARP协议
  • 路由器中的路由表是怎样得出的

4.2.4 地址解析协议ARP

ARP解决的问题:已经知道了一个机器的ip地址,找出ip对应的硬件地址。 旧的协议:RARP逆地址解析协议

ARP协议: 每一台主机都设有一个ARP高速缓存 ARP在主机ARP高速缓存中存放一个IP地址到硬件地址的映射表,并且这个映射表还经常更新(一个网络上新主机加入和撤走,新增或超时删除)

ARP使用流程: 主机A要向主机B发送IP数据报 > 主机A查询自己的ARP高速缓存中是否存在主机B的IP地址 > 存在即查询主机B对应的硬件地址,写入MAC帧发送

不存在主机B的ip地址 > 主机A自动运行ARP找出主机B的硬件地址(在本局域网上广播一个ARP分组请求,局域网内所有主机收到此请求,主机B的IP与请求中所查询的IP一致,就收下这个请求,并向主机A发送ARP请求响应)> 主机A将主机B硬件地址写入ARP > 写入mac帧发送

ARP解决的是同一局域网的主机或路由器的ip地址和硬件地址映射问题(如果所找的主机和源主机不在同一个局域网上,主机A就会发送到主机B所在的局域网路由器上,再由路由器进行ARP,有的情况下需要多次ARP)

4.2.5 ip数据报的格式

一个IP数据报由首部和数据两个部分组成。 首部的前一部分是固定长度,共20字节,是所有ip数据报必须具有的。 在首部的固定部分后面是一些可选字段,其长度是可变的。 1、固定部分字段

版本      IPv4/IPv6  4位
首部长度             4位
区分服务             8位
总长度               16位
标识                 16位
标志                 3位
片偏移               13位
生存时间             8位
协议
首部检验和
源地址      32位
目的地址    32位

2、可变部分字段

4.2.6 IP层转发分组的流程

从一个路由器转发到下一个路由器 在路由表中,对每一条路由最主要的是以下两个信息:1、目的网络地址。2、下一跳地址

4.3 划分子网和构造超网

4.3.1 划分子网

1 从两级ip地址到三级ip地址 两级ip(网络号 IP地址 + 主机号 MAC地址) 三级ip(网络号 IP地址 + 子网号 子网掩码 + 主机号 MAC地址) arpnet 的ip设计很不合理: 1)、ip地址的空间利用率很低 2)、给每一个物理网络分配一个网络号会使得路由表变得太大而使得网络性能变坏 3)、两级地址不够灵活(有时候情况紧急,一个单位需要在新的地点马上开通一个网络。但是申请到ip地址之前,新增加的网络不能链接到互联网上工作)

划分子网的思路:

  • 一个网络内部可以将其划分为若干个子网(subnet)
划分子网属于一个单位内部的事情。本单位以外的网络看不见这个网络是由多少个子网组成,对外表现仍然是一个网络
  • 划分的方法:从网络的主机号借用若干位作为子网号(subnet-id),主机号相应减少同样的位数。
IP地址 ::= { <网络号> , <子网号> , <主机号> }
  • 单位外部发送的IP数据报需要先发送到本单位的路由器,再由路由器通过网络号和子网号找到目的子网,再将IP数据报发送到此主机

2 子网掩码 从ip数据报的首部中无法看出源主机的网络是否进行了子网的划分(因为32位的ip地址及数据包都没有包含子网划分的信息,所以得另想办法,这个办法就是使用子网掩码) 极力推荐在子网掩码中使用连续的1,以免发生可能的差错

A类网络 1.0.0.1~126.255.255.254 16777214个 子网掩码 255.0.0.0
B类网络 128.0.0.1~191.255.255.254 65534个 子网掩码 255.255.0.0      
C类网络 192.0.0.1~223.255.255.254 254个 子网掩码 255.255.255.0

使用子网时分组的转发

目的网络地址 子网掩码 下一跳地址

4.3.3 无分类编址CIDR(构造超网)

1、网络前缀

  • B类地址在1992年就已经分配了近一半,眼看就快全部分配完毕
  • 互联网主干网上的路由表项目数据急剧增长
  • ipv4整个空间地址最终将全部耗尽(2011年2月3日,IANA宣布ipv4地址已经耗尽了)

无分类编址CIDR用来解决前两个问题 发展历史: 变长子网掩码VLSM > 无分类域间路由选择CIDR 无分类编址CIDR的特点:

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

斜线记号法:ip地址加上/,后面的数字表示前缀所占的位数

# 例如128.4.35.7/20
# 表示前20位是网络前缀 后12位是主机号
  • 消除了传统的A类、B类和C类地址及划分子网的概念,可以更有效的分配ipv4地址的空间
  • CIDR把网络前缀都相同的连续ip地址组成一个CIDR地址块(只要知道CIDR地址块中的任何地址,就可知道这个块的起始地址、最大地址和地址数)

2、最大前缀匹配

4.4 网际控制报文协议ICMP

4.5 互联网的路由选择协议

4.6 IPv6

第五章 运输层

  • 运输层为相互通信的应用进程提供逻辑通信
  • 端口和套接字的意义
  • 无连接的UDP
  • 面向连接的TCP
  • 在不可靠的网络上实现可靠传输的原理停止等待协议ARQ协议
  • TCP的滑动窗口、流量控制、拥塞控制和连接管理

5.1 运输层协议概述

网络层为主机提供逻辑通信,而运输层为应用进程提供端到端的逻辑通信 差错检测

  • TCP和UDP

基于ip地址统一传输实现复用 端口,应用程序端口,实现分用 0-65535

  • 服务端使用端口号 系统端口 熟知端口 0-1023
  • 客户端使用端口号

5.9 TCP的运输连接管理

5.9.1 TCP的连接建立(TCP3次握手 three way handshaks)

其实是在一次握手中交换了三个报文,更准确的翻译是“三报文握手”(RFC973 three way/three message handshaks) TCP建立连接的过程叫做握手,握手需要在客户端和服务器之间交换三个TCP报文段

TCP

  • 最初两端的TCP进程都处于CLOSED(关闭)状态。

在本例子中,A主动打开连接,B被动打开连接。

  • 服务器B启动,B的TCP服务器进程会先创建传输控制块 TCB,准备接受客户端的连接请求,然后服务器进程就处于LISTEN 收听状态,等待客户的连接请求,如有则做出响应。
  • (第一次)客户端A的TCP进程,在准备建立TCP连接之前,先会创建传输控制模块 TCB。建立连接,向B发出连接请求报文段。
    • 此时报文首部的同步位SYN=1, 同时选择一个初始序号seq=x
    • 报文:SYN=1 seq=x
    • A的TCP进程进入SYN-SENT 同步已发送状态

传输控制模块 TCB(Transmission Control Block)存储了每一个连接中的重要信息,如:TCP连接表,指向发送和接受缓存的指针,指向重传队列的指针,当前的发送和接收序号等等

  • (第二次)服务器B收到连接请求报文后,若同意建立连接,则向A发出确认。
    • 在报文中把SYN位和ACK位都置1,确认号是ack=x+1,同时也选择一个初始序号seq = y
    • 报文:SYN=1 ACK=1 seq=y ack=x+1
    • 此时服务器B的TCP进程进入SYN-RCVD 同步收到状态

TCP标准规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗一个掉序号seq

  • (第三次)客户端A收到B的确认(第二次握手)后,还要向服务器B给出确认。
    • 确认报文段的ACK置1,确认号ack = y + 1,而自己的序号seq = x + 1
    • 报文:ACK=1 seq=x+1 ack=y+1
    • 此时,TCP的连接已经建立,A进入ESTABLISHED状态

TCP标准规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号。不携带数据的话,下一个报文段的序号仍是seq=x+1

  • B收到A的确认后也进入ESTABLISHED状态

第二次握手的报文可以拆成两个报文段,先发送一个确认报文段ACK=1 ack=x+1,再发送一个同步报文段SYN=1 seq=y,这样的过程就变成了四次握手,但效果是一样的

为什么A最后还要发送一次确认呢?(为什么是三次握手呢?) 为了防止A发出的已失效的连接请求报文突然又传送到了B而产生错误:

  • 正常情况:
    • A发出连接请求,但是因请求报文丢失而未收到确认,于是A再重传一次连接请求。
    • 重传的请求收到了确认,建立起了连接
    • 数据传输完成,释放了连接。A一共发了两个连接请求,第一个丢失,第二个到达B,正常,未产生“已失效的连接请求报文”。
  • 异常情况:
    • A发出的第一个连接请求并没有丢失,而是在因为某些原因滞留了,而延迟到达。
    • 这本是一个失效的连接请求,但B收到此请求后会误以为是A发出的一个新的连接请求,于是向A发出确认报文,同意建立连接。
    • 若此时不采用第三次确认再建立连接的话,只要B发出确认,新的连接就建立了。但由于这并不是A的有效连接请求,所以A不会理睬B的确认,也不会向B发送数据,B却以为新的运输连接已经建立了,并一直等待A发来的数据,B的许多资源就白白浪费了。
    • 三次握手可以防止上述问题,在上述情况下,A不会向B的确认发出确认。B没有收到确认就知道A没有要求建立连接。

5.9.2 TCP的连接释放(TCP4次挥手)

TCP连接释放的过程更复杂 TCP

  • 数据传输结束后,通信双方AB都可以释放连接,释放之前都处于ESTASLISHED状态,以A释放连接为例:
  • (第一次)A的应用进程向TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。
    • A把连接释放报文段首部的终止控制位FIN置1,序号seq=u,u等于A前面已传送过的数据的最后一个字节的序号加1。
    • 报文: FIN=1 seq=u
    • 此时A进入FIN-WAIT-1状态

TCP标准规定,FIN报文段(即SYN=1的报文段)即使不携带数据,也要消耗一个掉序号seq

  • (第二次)B收到连接释放报文后即发出确认,

    • 确认号是ack=u+1,报文段自己的序号取seq=v,v等于B前面已传送过的数据的最后一个字节的序号加1
    • 报文: ACK=1 seq=v ack=u+1
    • 此时B进入CLOSE-WAIT状态,TCP进程通知应用进程,A到B方向的连接就释放掉了。
    • A收到B发出的确认后(第二次挥手),就进入FIN-WAIT-2状态,等待B发出的连接释放报文段
  • 此时的TCP连接处于半关闭 half-close状态,即A已经没有数据要发送了,但B若发送数据,A仍要接收。

  • (第三次)若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。

    • 此时B的连接释放报文须使FIN=1,假设半关闭状态又发送了一些数据报,现在的序号为seq=w,且须重复上次的确认号ack=u+1
    • 报文:FIN=1 ACK=1 seq=w ack=u+1
    • 此时B进入LAST-ACK 最后最后确认状态,等待A的确认
  • (第四次)A在收到B的连接释放报文段后,必须对此发出确认

    • 在确认报文段中把ACK置1,确认号ack=w+1,而自己的序号是seq=u+1
    • 报文: ACK=1 seq=u+1 ack=w+1
    • A进入TIME-WAIT 时间等待状态。注意,此时TCP连接还没有释放掉。必须经过时间等待计时器 TIME-WAIT-TIMER设置的时间2MSL后,A才进入到CLOSE状态
    • 而B收到A的确认就进入了CLOSE状态

时间MSL叫做最长报文段寿命 Maximun Segment Life,RFC 793建议设置为2分钟。TCP允许不同的实现可根据不同的具体情况使用更小的MSL值

  • A进入CLOSE状态,撤销相应的传输控制块TCB后,就结束了这次的TCP

为什么A在TIME-WAIT状态必须等待2MSL的时间?

  • 1 为了保证A发送的最后一个ACK报文段能够到达B
    • 这个确认报文段(第四次挥手)可能丢失,而LAST-ACK状态的B若收不到这个确认就会超时重传(第三次挥手)FIN+ACK,接着A重传(第四次挥手)一次确认,重置2MSL计时器。最后A和B都正常CLOSE
    • 若A在(第四次挥手)确认报文后不等待就进入CLOSE,但确认报文丢失时,就收不到B的重传(第三次挥手)FIN+ACK,这样B就无法正常进入CLOSE状态。
  • 2 防止“已失效的连接请求报文”出现在本连接中
    • A在发送完最后一个确认(第四次挥手)后,再经过2MSL,就可以使本次TCP连接中所产生的所有报文段都从网络中消失。下一次的新TCP就不会出现“已失效的连接请求报文”

除了时间等待计时器外,TCP还有个保活计时器 keepalive timer。设想这种情况: 客户端与服务器建立了TCP连接,但后来客户端突然出现故障,显然服务器以后就不能再收到客户端的数据,因此需要有个机制使得服务器不要再白白等下去浪费资源,这个机制就是保活计时器。服务器每收到一次客户端数据就重置保活计时器,时间的设置通常是两小时。若两小时没有收到客户数据,服务器就发送一个探测报文,每隔75s发送一次,连续10个仍无响应就认为客户端出现故障,关闭这个TCP连接。

第六章 应用层

概要:

  • DNS域名系统-从域名解析出ip
  • HTTP协议和万维网
  • SMTP、POP3、IMAP邮件协议
  • DHCP动态主机(ip)配置协议
  • SNMP、SMI、MIB网络管理
  • 系统调用和应用程序接口
  • P2P文件系统

6.1 域名系统DNS

什么是域名? 用户与互联网上的主机进行通信时,必须要知道对方的ip。 然而IP很长、难记,所以在应用层为了方便要使用域名作为ip的一个名字。

早期整个网络只有数百台计算机,只用一个hosts文件即可列出所有的主机名和ip。 理论上整个网络只需要一个域名服务器,所有的域名解析都通过该服务器即可,但实际上并不可取。 因为如果这台服务器挂掉,那其他所有主机都无法正常访问。

所以互联网的DNS域名服务器系统被设计成分布式的,一个挂了还有其他域名服务器可用。

DNS解析过程?

应用程序访问域名 > 需要解析域名为ip >  应用程序调用"解析程序 resolver" > 组成DNS请求报文,通过UDP发送到本地域名服务器 > 

本地域名服务器查询到域名对应ip > 响应报文返回ip
本地域名服务器未查询到域名对应ip > 向其他域名服务器发起查询请求 > 直到查到返回响应IP 

Profile picture

Blogs by Leo Yang who lives and works in Chengdu writing interesting things. You should follow me on Github 😁