术语
ISP (Internet Service Provider)
RFC (Request For Comments)因特网标准
ISOC因特网协会
实体:任何可发送或接受信息的硬件或软件进程
对等实体:收发双方相同层次中的实体
协议: 控制两个对等实体进行逻辑通信的规则集合(三要素:语法-定义所交换信息的格式;语义-定义收发双方所要完成的操作;同步-定义收发双方的时许关系)
服务:在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务.
服务访问点:同一系统中相邻两层的实体交换信息的逻辑接口,用于区分不同的服务类型.(eg:数据链路层的点为帧的"类型"字段,网络层的点为IP数据报首部中的"协议字段",运输层的点为"端口号")
服务原语:上层使用下层所提供的服务,必须与下层交换的命令.
PDU-协议数据单元:对等层次之间传送的数据包
SDU-服务数据单元:同一系统内,层与层之间交换的数据报
三种交换方式
电路交换:电话交换机接通电话线的方式称为电路交换
- 通信之前首先要建立连接;连接建立好之后,就可以使用已建立好的连接进行数据传送;数据传送后,需释放连接,以归还之前建立连接所占用的通信线路资源。
- 一旦建立连接,中间的各结点交换机就是直通形式的,比特流可以直达终点;
报文交换:表示该消息的整块数据成为一个报文。报文交换中的交换结点也采用存储转发方式,但报文交换对报文的大小没有限制,这就要求交换结点需要较大的缓存空间。
- 可以随时发送报文,而不需要事先建立连接;整个报文先传送到相邻结点交换机,全部存储下来后进行查表转发,转发到下一个结点交换机。
- 整个报文需要在各结点交换机上进行存储转发,由于不限制报文大小,因此需要各结点交换机都具有较大的缓存空间。
分组交换:先把较长的报文划分成一个个更小的等长数据段,在每一个数据段前面。加上一些由必要的控制信息组成的首部后,就构成一个分组,也可简称为“包”,相应地,首部也可称为“包头”。
首部包含了分组的目的地址
分组从源主机到目的主机,可走不同的路径。
- 可以随时发送分组,而不需要事先建立连接。构成原始报文的一个个分组,依次在各结点交换机上存储转发。各结点交换机在发送分组的同时,还缓存接收到的分组。
- 构成原始报文的一个个分组,在各结点交换机上进行存储转发,相比报文交换,减少了转发时延,还可以避免过长的报文长时间占用链路,同时也有利于进行差错控制。
计算机网络的定义和分类
定义
计算机网络的精确定义并未统一
计算机网络的最简单的定义是:一些互相连接的、自治的计算机的集合
- 互连:是指计算机之间可以通过有线或无线的方式进行数据通信;
- 自治:是指独立的计算机,他有自己的硬件和软件,可以单独运行使用;
- 集合:是指至少需要两台计算机;
计算机网络的较好的定义是:计算机网络主要是由一些通用的,可编程的硬件(一定包含有中央处理机CPU)互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用
计算机网络所连接的硬件,并不限于一般的计算机,而是包括了智能手机等智能硬件。
计算机网络并非专门用来传送数据,而是能够支持很多种的应用(包括今后可能出现的各种应用)。
性能指标
速率(在大部分实际计算中估算)
带宽
吞吐量
表示单位时间内通过某个网络(或信道\接口)的数据量,受网络带宽或额定速率的限制
时延
发送时延:主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。
传播时延:电磁波在信道中传播一定的距离需要花费的时间。
处理时延:主机或路由器在收到分组时要花费一定时间进行处理
排队时延:分组在进过网络传输时,要经过许多路由器。但分组在进入路由器后要先在输入队列中排队等待处理。
这里将排队时延与处理时延合并成为处理时延.
网络时延应具体问题具体分析(当处理时延忽略不计时,发送时延 和 传播时延谁占主导,要具体情况具体分析)
时延带宽积
时延带宽积 = 传播时延 * 带宽
往返时间
RTT(Round-Trip Time) 双向交互一次所需时间
卫星链路耗时最长
利用率
利用率有信道利用率和网络利用率两种。
丢包率
分组丢失率,在一定时间范围内,传输过程中丢失分组的数量与总分组数量的比率.
计算机网络体系结构
OSI(开放系统互连参考模型)失败原因:专家们缺乏实际经验,没有商业驱动力,研发周期过长;实现复杂,运行效率低;层次划分不合理,有些功能在多个层次中出现.
书上的体系结构综合了这两个的优点
TCP/IP体系结构核心是IP协议和TCP协议
分层的必要性:由大化局部,易于研究与处理
层 | 解决问题 | 设备 | 常用协议 |
---|---|---|---|
应用层 | 解决通过应用进程的交互来实现特定网络应用的问题 | HTTP FTP SMTP DNS协议 | |
表示层 | 对上层数据或者信息进行变换,以保证一个主机应用层信息可以被另一个主机应用层所理解,包括数据加密、格式转换、压缩等—-OSI七层 | ||
会话层 | 负责建立、管理、终止进程之间的会话—-OSI七层 | ||
运输层 | 解决进程之间基于网络的通信问题(两台主机中进程之间的通信提供通用的数据传输服务。)-端口;出现误码\丢包 | TCP UDP协议 | |
网络层 | 解决分组在多个网络上传输(路由)的问题-标识各网络以及各主机(共同编址-IP地址);路由转发;路由选择 (负责为分组交换网上的不同主机提供通信服务) | 路由器 | ARP协议、OSPF/RIP路由寻址协议、DHCP协议、ICMP协议、IGMP组播协议、IP协议、CIDR协议、IP协议 |
数据链路层 | 解决分组在一个网络(或一段链路)上传输的问题-标识网络中各主机(主机编址-MAC地址;从一串比特流中区分地址与数据;协同主机争用总线) | 交换机、网桥 | GBN后退N帧协议、 SR选择重传协议、 以太网协议 |
物理层 | 解决使用何种信号来传输比特的问题-用什么介质\接口\信号(传输媒体不属于物理层,也不属于任何一层) | 中继器、集线器 |
“arp协议在TCP/IP模型中属于IP层(网络层),在OSI模型中属于链路层。
物理层
双绞线绞合的作用:(1)抵御部分来自外界的电磁波干扰,(2)减少相邻导线的电磁干扰
传输方式
编码与调制
曼彻斯特编码
(判断不会问,简单了解下,涉及到通信原理)
数据链路层
链路是从一个结点到相邻结点的一段物理线路,数据链路则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)
网络中的主机、路由器等都必须实现数据链路层
以帧为单元传输和处理数据
CSMA/CD 载波监听多点接入/碰撞检测(以太网的媒体接入控制协议)
局域网属于数据链路层
封装成帧
封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
首部和尾部的一个重要作用就是进行帧定界。
透明传输:数据链路层对上层交付的传输数据没有任何限制(这会出现协议数据单元包含标识字段,导致误判帧结束)
面向字符的物理链路 采取转义字符(长度1字节,十进制值27)添加在协议数据单元包含标识字段或转义字符前的操作避免该问题
面向比特的物理链路 使用比特填充的方式:每5个连续的1后面插入一个0
最大传输单元(帧数据部分上限)MTU(Maximum Transfer Unit)
差错检测
在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1。
误码率(Bit Error Rate): 在一段时间内,传输错误比特占所传输比特总数的比率
差错检测码(eg:FCS帧检测序列)
奇偶校验(数据链路层一般不会采用)
在待发送的数据后添加1位奇偶校验位,是整个数据(包括校验位)的'1'的个数为奇数(奇校验) 或 偶数(偶校验)
缺陷:奇数个误码,可以检测出;偶数个误码,则漏检
循环冗余校验CRC (Cyclic Redundancy Check) - 易于硬件实现,广泛应用于数据链路层
eg:
异或是不带进位的二进制加法
可靠传输
接收方主机收到有误码的帧后,是不会接受该帧的,会将它丢弃
如果数据链路层向其上层提供的是不可靠服务,那么丢弃就丢弃了,不会再有更多措施
如果数据链路层向其上层提供的是可靠服务,那就还需要其他措施,来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本(实现发送端发送什么,接收端就收到什么)
传输差错:比特差错(数据链路层) \ 分组丢失 \ 分组失序 \ 分组重复
实现机制(运用于各层)
- 停止等待协议 SW
- 回退N帧协议 GBN
- 选择重传协议 SR
点对点协议 ppp( point-to-point protocol)
点对点数据链路层协议特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议
提供不可靠传输服务
透明传输
- 面向字节的异步链路
- 面向比特的异步链路
工作状态
eg:宽带拨号
当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机
分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
媒体接入控制(介质访问控制)MAC
Medium Access Control使用一对多的广播通信方式,共享信道:若多个设备在共享信道上同时发送数据,则会造成彼此干扰,导致发送失败。 需协调多个发送接受站点对一个共享传输媒体的占用
静态划分-重点掌握码分复用以及计算
- 频分多址 FDMA (Frequency Division Multiplex Access)
- 时分多址 TDMA(Time Division Multiplex Access)
- 码分多址 CDMA(Code Division Multiplex Access)
- CSMA/CD 载波监听多点接入/碰撞检测
Carrier Sense Multiple Access / Collision Detection
在总线型局域网中使用
工作原理:
为什么要进行碰撞检测?
因为信号传播时延对载波监听产生了影响
CSMA/CD 协议的重要特性
- 使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。
- 每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
- 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。
- CSMA/CA 载波监听多点接入/碰撞避免
Carrier Sense Multiple Access / Collision Avoidance
在无线局域网中使用
无线局域网不使用 碰撞检测的原因:
工作原理:
源站为什么在检测到信道空闲后还要再等待一段时间DIFS?
- 考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送
目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
- SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式
信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用信道?
防止多个站点同时发送数据而产生碰撞
CSMA/CA协议的信道预约和虚拟载波监听
MAC地址\IP地址\ARP协议
MAC地址(物理地址)
- 使用点对点信道的数据链路层不需要使用地址
- 使用广播信道的数据链路层必须使用地址来区分各主机
以太网的MAC子层(属于数据链路层)所使用的地址,
是对网络上各接口的唯一标识(eg:路由器的多个网络接口),而不是网络上各设备的唯一标识.
MAC地址一般固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中, aka 硬件地址\物理地址
随机MAC地址(防止监控电子设备的MAC地址跟踪人物行动)
IP地址
属于网络层
Internet上主机和路由器所使用的地址,标识网络编号(不同网络)以及主机编号(同一网络中不同主机)
ARP协议
地址解析协议 只能在一段链路或一个网络上使用,不能跨网络使用,只能逐段链路使用
ARP高速缓存表(IP地址与MAC地址对应关系不是永久性的)
集线器与交换机的区别
以太网交换机实质上就是一个多接口的网桥,全双工,使得多对主机同时通信,无碰撞,不需要CSMA/CD协议
交换机:帧交换表,表中每条记录均有有效时间,原因:1交换机的接口改接了其他主机,2主机更换了网卡;
通过自学习算法建立该表.
生成树协议
广播域(broadcast domain):指这样一部分网络,其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收。
集线器是也可以看做多口中继器,每个端口都可以成为一个中继器,中继器是对减弱的信号进行放大和发送的设备.集线器的以太网在逻辑上仍是个总线网( 物理架构:双绞线的以太网采用星形拓扑),需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,收发帧不能同时进行.
多台主机同时给另一台主机发送单播帧:
集线器以太网:会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机
交换机以太网:会将它们缓存起来,然后逐个转发给目的主机,不会产生碰撞
广播帧,两者无区别.
虚拟局域网VLAN
巨大的广播域的弊端:
Virtual Local Area Network 将局域网内的设备划分成与物理位置无关的逻辑组(有共同的需求)的技术,避免巨大的广播域的出现.
在交换机上实现的,需要交换机能够实现以下功能
- 能够处理带有VLAN标记的帧——IEEE 802.1 Q帧
- 交换机的各端口可以支持不同的端口类型,不同端口类型的端口对帧的处理方式有所不同
端口类型:Access\Trunk\Hybrid(华为交换机私有)
各端口的缺省VLAN ID : 思科交换机(Native VLAN, 本征VLAN) ; 华为交换机(Port VLAN ID, 端口VLAN ID, 简称 PVID)
PVID:端口的虚拟局域网ID
VID:数据包的虚拟局域网ID
互连的Trunk端口的PVID值不相等,可能会出现转发错误的情况(到”重新贴标签”那一步)
网络层
aka. 网际层
面向连接的虚电路
类似于电路交换,但只是在网络层逻辑上建立连接(虚电路VC-Virtual Circuit),若采用可靠传输的网络协议,则分组(走同一条路线)将无差错、按序到达、不丢失、不重复地到达接收方。
与无连接的数据包服务
不需要在网络层建立连接,分组可走不同路径,所传送的分组可能误码、丢失、重复、失序。将复杂的网络处理功能置于因特网的边缘(用户主机及其内部的运输层),将相对简单、尽最大努力的分组交付功能置于因特网核心。
IPv4地址
IPv4地址是Internet 上的每一台主机(路由器)的每个接口分配一个在全世界范围内唯一的32位比特标识符。
点分十进制表示。除2取余,逆序输出(十进制转二进制)
分类编址的IPv4地址
左起第一个十进制数值,可以判断网络类别(小于127的为A类(1个字节),128~191的为B类(2个字节),192~223的为C类(3个字节)。
不可以指派给主机或路由器接口:
(1)A类网络号0和127
(2)主机号为”全0“, 网络地址
(3)主机号为”全1“ ,广播地址
一般不使用的IP地址
划分子网的IPv4地址
子网也要给网络地址与广播地址
默认子网掩码:在未划分子网的情况下使用的子网掩码,网络号所在的位数全‘1’;
无分类编址的IPv4地址
无分类域间路由选择CIDR(Classless Inter-Domain Rounting)
- 消除了ABC类地址、划分子网的概念
- 不需要区分网络地址、广播地址
变长的子网掩码(子网掩码长度根据子网所需地址[主机接口、路由接口、网络地址、广播地址]的数量而变化)
分配原则是:每个子块的起点位置不能随意选取,只能选取块大小的整数倍地址作为起点。大的子块先分配
IP数据报的发送和转发过程
路由器在网络层(VLAN在交换机上实现,数据链路层),隔离冲突域,又隔离广播域
网桥、交换机(多接口网桥) 在数据链路层,隔离冲突域,不隔离广播域
中继器和集线器(多接口中继器) 在物理层,不隔离冲突域,不隔离广播域
路由选择协议
”网关“便是”路由“
路由器是一种具有多个输入端口,和输出端口的专用计算机,其任务是转发分组。结构如下:
路由条目(路由表的表项)有直连网络、静态路由、动态路由(路由选择协议)
静态路由配置(人工配置)因配置错误、接口不存在或故障可能会产生路由环路
特殊的静态路由:
- 默认路由(目的网络为0.0.0.0, 地址掩码为0.0.0.0)
- 特定主机路由(目的网络为特定主机的IP地址,地址掩码为255.255.255.255)
- 黑洞路由(下一跳为null0)
常见的路由选择协议
RIP(内部网关协议)
只与相邻的路由器交换信息
OSPF(内部网关协议)
BGP(外部网关协议)
直接封装的报文所属协议:
IPv4数据报格式
- 一个 IP 数据报由首部和数据两部分组成。
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
注意首部长度、片偏移的单位量
ICMP(网际控制报文协议)
架构IP网络时需要特别注意两点:
- 确认网络是否正常工作
- 遇到异常时进行问题诊断
ICMP的主要功能包括:
确认IP包是否成功送达目标地址
通知在发送过程当中IP包被废弃的具体原因
改善网络设置等
ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议
VPN(虚拟专用网)与 NAT(网络地址转换)
VPN aka. IP隧道技术
专用地址(私有地址)只能用于本地地址,不能用于全球地址(私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信)
因特网中所有路由器对目的地址是私有地址的IP数据报一律不进行转发
本地地址与全球地址
本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
全球地址——全球唯一的 IP 地址,必须向互联网的管理机构申请。
问题:在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题。
使用私有地址的主机,如何才能与因特网上使用全球IP地址的主机进行通信?
这需要在专用网络连接到因特网的路由器上安装NAT软件,专有NAT软件的路由器叫做NAT路由器.它至少有一个有效的外部全球IP地址,这样,所有使用私有地址的主机在和外界通信时,都要在NAT路由器上将其私有地址转换为全球IP地址
利用端口(运输层)解决一对多映射
总结:
运输层
底层(物理层、数据链路层、网络层)共同解决主机之间的通信
端口:用于区分本计算机不同应用进程的标识符(区别于进程标识符PID-不同操作系统使用不同格式的PID)
任务:直接为通信两端主机中应用进程间的逻辑通信提供服务,“端到端”的通信就是进程之间的通信
发送方的复用和接收方的分用
多个进程(这里一个端口表示一个进程) 利用一个运输层协议(或者称为运输层接口)发送数据称为 复用
多个进程(这里一个端口表示一个进程) 利用一个运输层协议(或者称为运输层接口)接收时叫做 分用。
应用层常用协议所使用的运输层熟知端口号
访问网页的过程 06:01
UDP和TCP的对比
UDP 和 TCP 是TCP/IP体系结构运输层中的两个重要协议
当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(网际层只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。两个套接字(Socket)之间建立连接。TCP会把应用进程交付下来的数据块看作是一连串无结构的字节流,TCP并不知道这些待传送的字节流的含义并将他们编号,并存储在自己发送缓存中,TCP会根据发送策略,提取一定量的字节构建TCP报文并发送。 接收方从所接受到的TCP报文段中,取出数据载荷部分并存储在接收缓存中;一方面将接收缓存中的一些字节交付给应用进程。【接收方收到的字节流必须和发送方应用进程发出的字节流完全一样】
当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道,不需要套接字(Socket)。UDP对应用进程交下来的报文既不合并也不拆分,而是保留这些报文的边界。
- TCP 传送的数据单位协议是 TCP 报文段(segment)。
- UDP 传送的数据单位协议是 UDP 报文或用户数据报。
TCP的流量控制
ACK TCP报文首部中的标志位:1这是一个确认报文段
ack TCP报文首部中的确认号字段, eg:取值201,表示序号201之前的数据已全部正确接收
rwnd TCP报文首部中的窗口字段, eg:取值300,表示接收窗口大小为300
TCP的拥塞控制
拥塞:在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。
网络资源:链路容量(带宽)、交换结点中的缓存和处理机等
网络拥塞往往是由许多因素引起的。例如:
- 点缓存的容量太小;
- 链路的容量不足;
- 处理机处理的速率太慢;
- 拥塞本身会进一步加剧拥塞;
拥塞控制的一般原理
- 拥塞控制的前提:网络能够承受现有的网络负荷。
- 实践证明,拥塞控制是很难设计的,因为它是一个动态问题。
- 分组的丢失是网络发生拥塞的征兆而不是原因。
- 在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化、甚至发生死锁的原因。
开环控制:事先考虑周全,力争避免拥塞
闭环控制:在发生拥塞后,采取措施控制,消除拥塞
监测网络的拥塞
主要指标有:
- 由于缺少缓存空间而被丢弃的分组的百分数;
- 平均队列长度;
- 超时重传的分组数;
- 平均分组时延;
- 分组时延的标准差,等等。
上述这些指标的上升都标志着拥塞的增长。
下面4种算法假定以下条件:
数据是单方向传送,而另一个方向只传送确认
接收方总是有足够大的缓存空间,而发送方发送窗口的大小由网络的拥塞程度所决定。
以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位
真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值)
传输轮次:
- 发送方给接收方发送数据报文段后,接收方给发送方发发回相应的确认报文段
- 一个传输轮次所经历的时间其实就是往返时间,往返时间并非是恒定的数值
- 使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并受到了对已发送的最后一个报文段的确认
拥塞窗口(cwnd):它会随网络拥塞程度,以及所使用的拥塞控制算法动态变化
慢开始门限(ssthresh):防止拥塞窗口增长过大引起网络拥塞。
慢开始 cwnd = 2^(n-1)(n=1,n++)
慢开始是指一开始向网络注入的报文段少,并不是指cwnd的增长速度慢。
cwnd > ssthresh
时转为拥塞控制算法
拥塞避免 cwnd ++
如果在发送过程中出现部分报文段丢失,这必然会造成发送方对这些丢失报文段的超时重传.
判断网络可能出现拥塞,进行以下工作:
(1)慢开始门限更新为发生拥塞时cwnd的一半
(2)cwnd更新为1,并重新开始执行慢开始算法
快重传
个别报文段的丢失,实际上并未发生拥塞,而拥塞避免算法误以为出现了拥塞,并进行之后一系列工作。这样降低了传输效率。
让发送方尽快进行重传,而不是等超时重传计时器超时再重传。
发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传。
快恢复 ssthresh=cwnd/2;cwnd= ssthresh;cwnd++
快重传后,执行快恢复算法:
方案一(用的比较多) — 慢开始门限、cwnd更新为发生拥塞时cwnd的一半,并开始执行拥塞避免算法。
方案二 — ssthresh为发生拥塞时cwnd的一半, cwnd = ssthresh+3(网络种不是堆积了报文段而是减少了3个报文段)
eg:
TCP超时重传的选择
TCP报文的首部格式
TCP的可靠传输
TCP的连接
“三报文”握手
采用三报文握手,而不是二报文握手:主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。
一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个> 早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同> 意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。
所以并不多余,这是为了防止已失效的连接请求报文段突然又传送到了TCP服务器,因而导致错误
“四报文”挥手
TCP连接释放报文段首部中
终止位FIN和确认为ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认
序号seq字段的值设置为u,它等于TCP客户进程之前已传送过的数据的最后一个字节的序号加1
确认号ack字段的值设置为v,它等于TCP客户进程之前已收到的、数据的最后一个字节的序号加1
请注意:TCP规定终止位FIN等于1的报文段即使不携带数据,也要消耗掉一个序号
TCP服务器进程收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并进入关闭等待状态
普通的TCP确认报文段首部中
确认位ACK的值被设置为1,表明这是一个普通的TCP确认报文段
序号seq字段的值设置为v,它等于TCP服务器进程之前已传送过的数据的最后一个字节的序号加1,这也与之前收到的TCP连接释放报文段中的确认号匹配
确认号ack字段的值设置为u+1,这是对TCP连接释放报文段的确认
TCP服务器进程应该通知高层应用进程,TCP客户进程要断开与自己的TCP连接
此时,从TCP客户进程到TCP服务器进程这个方向的连接就释放了
这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了
但如果TCP服务器进程还有数据要发送,TCP客户进程仍要接收,也就是说从TCP服务器进程到TCP客户进程这个方向的连接并未关闭
TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段
若使用TCP服务器进程的应用进程已经没有数据要发送了,应用进程就通知其TCP服务器进程释放连接
由于TCP连接释放是由TCP客户进程主动发起的,因此TCP服务器进程对TCP连接的释放称为被动关闭连接
TCP服务器进程发送TCP连接释放报文段并进入最后确认状态
该报文段首部中
终止位FIN和确认位ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认
序号seq字段的值为w,这是因为在半关闭状态下,TCP服务器进程可能又发送
确认号ack字段的值为u+1,这是对之前收到的TCP连接释放报文段的重复确认
TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态
该报文段首部中
确认为ACK的值被设置为1,表明这是一个普通的TCP确认报文段
序号seq字段的值设置为u+1,这是因为TCP客户进程之前发送的TCP连接释放报文段虽然不携带数据,但要消耗掉一个序号
确认号ack字段的值设置为w+1,这是对所收到的TCP连接释放报文段的确认
TCP服务器进程收到该报文段后就进入关闭状态,而TCP客户进程还要进过2MSL后才能进入关闭状态
问题一:TCP为什么要四次挥手,能三次吗?
不能三次。
第二次挥手和第三次挥手不能合并在一起,这是因为第二次挥手后,服务器端可能还在传输数据,需要等待数据传输完毕后再进行第三次挥手。
问题二:TCP客户进程在发送完最后一个确认报文后,为什么不直接进入关闭状态?而是要进入时间等待状态?
因为时间等待状态以及处于该状态2MSL时长,可以确保TCP服务器进程可以收到最后一个TCP确认报文段而进入关闭状态另外,TCP客户进程在发送完最后一个TCP确认报文段后,在经过2MSL时长,就可以使本次连接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的TCP连接中,不会出现旧连接中的报文段。
TCP保活计时器的作用
TCP双方已经建立了连接,后来,TCP客户进程所在的主机突然出现了故障。
TCP服务器进程以后就不能再收到TCP客户进程发来的数据。因此,应当有措施使TCP服务器进程不要再白白等待下去。
应用层
解决通过应用进程的交互来实现特定网络应用的问题
C/S (客户/服务器方式-服务集中型)与 P2P(对等方式-服务分散型)
DHCP(动态主机配置协议)
DHCP 使用客户-服务器方式,采用请求/应答方式工作。
DHCP 基于 UDP 工作(DHCP报文在运输层会被封装成为UDP用户数据报),DHCP 服务器运行在 67 号端口, DHCP客户运行在 68 号端口。
互联网广泛使用的动态主机配置协议 DHCP (Dynamic Host Configuration Protocol) 提供了即插即用连网 (plug-and-play networking) 的机制。
这种机制允许一台计算机加入新的网络和获取 IP 地址,而不用手工配置。
DHCP客户端将广播发送DHCP发现报文(DHCP DISCOVER)
事务ID
DHCP客户端的MAC地址
封装该报文的IP数据报的源IP地址为0.0.0.0,这是因为主机目前还未分配到IP地址,因此使用该地址代替
目的IP地址为广播地址255.255.255.255,之所以广播发送,是因为主机现在并不知道网络中有哪几个DHCP服务器。它们的IP地址各是什么
DHCP服务器收到DHCP发现报文后,根据其中封装的DHCP客户端的MAC地址来查找自己的数据库,如果查到匹配信息,则使用这些配置信息来构建并发送DHCP提供报文,如果没有则采用默认配置信息来构建报文并发送
DHCP服务端将广播发送DHCP提供报文(DHCP OFFER)
事务ID:DHCP客户端会与之前DHCP发现报文的事务ID做对比,来判断该DHCP提供报文是否是自己的
配置信息:
- IP地址:DHCP服务器从自己的IP地址池中挑选待租用给主机的IP地址(使用ARP来确保所选IP地址未被网络中其他主机占用)
子网掩码
地址租期
默认网关
DNS服务器
源IP地址:发送DHCP提供报文的DHCP服务器的IP
目的地址:因为目的主机还没分配到IP,所以使用广播地址
DHCP客户从中选择一个,一般选择先到的,并向所选择的DHCP服务器发送DHCP请求报文
DHCP客户端将广播发送DHCP请求报文(DHCP REQUEST)
事务ID
DHCP客户端的MAC地址
接收的租约中的IP地址
提供此租约的DHCP服务器端的IP地址
源地址:0.0.0.0,因为此时DHCP客户才从多个DHCP服务器中挑选一个作为自己的DHCP服务器。它首先要征得该服务器的同意,之后才能正式使用向该DHCP服务器租用的IP地址
目的地址:广播地址,这样可以一次性向所有DHCP服务器发送DHCP请求报文,来告知它们是否请求它们作为自己的DHCP服务器。
DHCP确认报文
源地址:DHCP服务器1的IP地址
目的地址:广播地址
DHCP客户收到该报文后就可以使用租用的IP地址,在使用前还会进行ARP检测
DNS(域名系统)
域名只是一个逻辑概念,不代表计算机所在的物理位置
FTP(文件传输协议)
FTP服务器与客户端需要建立:控制连接与数据连接,均需要TCP连接。控制连接在整个会话期间保持打开状态,数据连接传输完毕后就关闭。
电子邮件
邮件系统构成:用户代理、邮件服务器、电子邮件所需协议
用户代理:用户与电子邮件系统的接口(电子邮件客户端软件)
邮件发送协议:SMTP
邮件读取协议:POP3, IMAP
简单邮件传送协议SMTP(Simple Mail Transfer Protocol)
POP3:邮局协议第三个版本,只能以下载并删除方式或下载并保留方式从邮件服务器下载到用户计算机。(不允许用户在邮件服务器是管理字节的邮件-分类、创建新文件夹等)
IMAP:因特网邮件访问协议,是一个联机协议(在自己的计算机上就可以操控邮件服务器中的邮箱)
SMTP TCP熟知端口号25;POP3 TCP熟知端口号110;IMAP TCP熟知端口号143;
PS:基于万维网的电子邮件
万维网
- 万维网 WWW (World Wide Web) 并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息储藏所,运行在因特网上的一个分布式应用
- 万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。
- 这种访问方式称为“链接”。
万维网的工作方式
- 万维网以客户 - 服务器方式工作。
- 浏览器就是在用户计算机上的万维网客户程序。万维网文档所驻留的计算机则运行服务器程序,因此这个计算机也称为万维网服务器。
- 客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。
- 在一个客户程序主窗口上显示出的万维网文档称为页面 (page)。
超文本传输协议HTTP(Hyper Transfer Protocol)
在万维网客户程序与万维网服务器程序之间进行交互所使用的协议
HTTP报文格式
HTTP请求报文格式
HTTP响应报文格式
使用Cookie在服务器上记录用户信息
万维网缓存与代理服务器
原始服务器通常会为每个响应的对象设定一个修改时间字段和一个有效日期字段,若过期并且代理服务器的文档和原始服务器的文档一致,原始服务器则给代理服务器发送不包含实体主体的响应,若过期并且代理服务器的文档和原始服务器的文档不一致,原始服务器则给代理服务器发送封装有该文档的响应报文。