目录
1 五层协议
2 物理层
3 数据链路层
4 网络层
5 运输层
6 应用层
7 TCP通信
8 一次Http请求过程
9 CDN参考资料
· 《计算机网络 第7版》
· JavaG
1 五层协议
OSI七层结构和TCP/IP四层结构,结合各自优点为五层协议。
2 物理层
2.1 任务
透明地传送比特流,尽可能屏蔽掉传输媒体和通信手段的差异。
2.2 信息交互方式
(1)单工(simplex ) : 只能有一个方向的通信而没有反方向的交互。
(2)半双工(half duplex ) :通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。
(3)全双工(full duplex) : 通信的双方可以同时发送和接收信息。
2.3 传输媒体
2.3.1 导引型传输媒体
双绞线,同轴电缆,光纤。
2.3.2 非导引型传输媒体
无线,红外,大气激光。
2.4 信道复用
(1)FDM 频分复用
所用用户在同样的时间占用不同的宽带资源(频率带宽不同)。
(2)TDM 时分复用
所有用户是在不同的时间占用同样的频带宽度。
(3)WDM 波分复用
光的频分复用
(4)CDM 码分复用
CDMA码分多址。各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。
2.5 宽带接入技术
用户到互联网的宽带接入方法:
(1)非对称数字用户线 ADSL
用数字技术对现有的模拟电话线进行改造,而不需要重新布线。ASDL 的快速版本是甚高速数字用户线 VDSL。
(2)光纤同轴混合网 HFC
是在目前覆盖范围很广的有线电视网的基础上开发的一种居民宽带接入网
(3) FTTx
光纤到x
3 数据链路层
3.1 任务
(1)在两个相邻结点间的链路上传送帧。
链路是从一个结点到相邻节点的一段物理链路,数据链路则在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)。
(2)帧
一个数据链路层的传输单元,由一个数据链路层首部和其携带的封包所组成协议数据单元。包括帧首部、IP数据报、帧尾部。
(3)三个基本问题
· 封装成帧:在一段数据的前后分别添加首部和尾部,这样就构成了一个帧
· 透明传输:无论什么样的比特组合的数据,都能按照原样没有差错地通过数据链路层。
通过转义字符让数据与帧边界的控制字符区分开。
· 差错检测:通过CRC(循环冗余检验)降低误码率(BER)。
3.2 点对点信道
(1)协议:点对点协议PPP
(2)帧格式
(3)特点
· 简单
· 只检测差错而不去纠正差错
· 不使用序号
· 也不进行流量控制
· 可同时支持多种网络层协议
3.3 广播信道
3.3.1 局域网的数据链路层
拆分为两个子层
(1)LLC(Logical Link Control)逻辑链路控制
与传输媒体无关,不管采用何种传输媒体和MAC子层的局域网,对LLC子层来说都是透明的。
(2)MAC(Medium Access Control)媒体接入控制
与接入到传输媒体有关的内容都放在MAC子层。
3.3.2 以太网
3.3.2.1 是一种基带总线局域网
3.3.2.2 协议CSMA/CD
(1)具有冲突检测的载波监听多点接入。
· 多点接入:总线型网络
· 载波监听:不管在发送前,还是在发送中,每个站都必须不停地检测信道。
· 碰撞检测:“边发送边监听”,适配器边发送数据边检测信道上的信号电压的变化情况。
(2)特点
发送前先监听,边发送边监听,一旦发现总线上出现了碰撞,就立即停止发送。然后按照退避算法等待一段随机时间后再次发送。
(3)半双工通信方式
3.3.3 局域网优点
(1)具有广播功能,从一个站点可方便地访问全网
(2)便于系统的扩展和逐渐演变
(3)提高了系统的可靠性,可用性和生存性。
3.4 适配器
(1)网卡,提供计算机与外接局域网通信。
(2)实现的功能包含了数据链路层和物理层。
(3)由于硬件地址已固化在网卡的ROM中,因此尝尝将硬件地址称为物理地址。因为在局域网的MAC帧中的源地址和目的地址都是硬件地址,因此硬件地址又称为MAC地址。
4 网络层
4.1 任务
(1)向上只提供简单灵活、无连接、尽量大交付的数据报服务
(2)为分组交换网上的不同主机提供通信,将运输层的数据分组或分包传送。
4.2 虚拟互联网络
4.2.1 概念
也就是逻辑网络,互联起来的各种物理网络的易构性本来就是客观存在的,但是利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。
4.2.2 中间设备
· 转发器--物理层
· 网桥-----数据链路层
· 路由器--网络层
· 网关-----网络层以上
4.2.3 数据交付方式
(1)直接交付
主机查找路由表,目的主机在本网络上,不仅过路由器转发。
(2)间接交付
通过路由器转发。
4.3 IP地址
由32位的标识符构成,xx.xx.xx.xx形式(点分十进制记法)。
4.3.1 格式
IP地址 定义为{<网络号>, <主机号>},网络号相同即为“在同一个网络”。
4.3.2 分类
(1)A类
· 1个字节表示网络号
· 第1位为0,即第1个字节范围为0~127
(2)B类
· 2个字节表示网络号
· 前两位为10,即第1个字节范围为128~191
(3)C类
· 3个字节表示网络号
· 前三位为110,即第1个字节范围为192~223
(4)D类
· 前四位为1110
· 用于多播
(5)E类
· 前四位为1111
· 保留为以后用
4.3.3 特点
(1)IP地址管理机构,只分配网络号,主机号由该网络号单位自行分配。
(2)路由器仅根据目的主机的网络号来转发分组,减轻压力
4.4 划分子网
4.4.1 格式
三级IP地址定义为:{<网路号>, <子网号>, <主机号>},从主机号中缩减n位。
4.4.2 子网掩码
· 网络号+子网号全为1。
· A、B、C类地址,在不划分子网时,有默认子网掩码,分别为255.0.0.0,255.255.0.0,255.255.255.0。
4.5 构造超网
CIDR 无分类域间路由选择
(1)IP地址定义为:{<网络前缀>, <主机号>}
网络前缀用来指明网络,主机号用来指明主机。
(2)斜线记法:在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。如128.14.35.7/20
(3)CIDR使用32位的地址掩码,由1和0组成,1的个数即为网络前缀的长度。
(4)CIDR地址块,称为路由聚合或构成超网。
(5)最长前缀匹配:从路由表的匹配结果中选择具有最长网络前缀的路由。
4.6 与IP配套的协议
(1)ARP 地址解析协议
解决同一个局域网上的主机或路由器的IP地址到MAC地址的映射问题。
(2)ICMP 网际控制报文协议
· 报告差错情况
· 提供有关异常情况
(3)IGMP 网际组管理协议
4.7 IPv6
要解决 IP 地址耗尽的问题,最根本的办法是采用具有更大地址空间的新版本 IP 协议-IPv6。 IPv6 所带来的变化有 :
(1)更大的地址空间(采用 128 位地址)
(2)灵活的首部格式
(3)改进的选项
(4)支持即插即用(自动配置),因此IPv6使用使用DHCP
DHCP:
· 动态主机配置协议,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
· 方式:
· 人工配置:由管理员对每台具体的计算机指定一个地址
· 自动配置:服务器为第一次连接网络的计算机分配一个永久地址,DHCP客户端第一次成功地从DHCP服务器端分配到一个IP地址之后,就永远使用这个地址
·动态配置:在一定的期限内将地址租给计算机,客户端第一次从DHCP服务器分配到IP地址后,并非永久地使用该地址,每次使用完后,DHCP客户端就得释放这个IP地址,并且租期结束后客户必须续租或者停用该地址,而对于路由器,经常使用的地址分配方式是动态配置。
(5)支持资源的预分配
(6)IPv6 的首部改为 8 字节对齐
4.8 VPN 虚拟专用网络
4.8.1 地址IP的分类
(1)本地地址:仅在本机构或本局域网内有效的IP
(2)全球地址:互联网的管理机构申请的全球唯一的IP地址
4.8.2 专用地址
(1)一个A类网络、16个连续的B类网络和256个连续的C类网络
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
(2)在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发
(3)连成的网络为专用网络或本地互联网,各个专用网可能具有相同的专用IP地址,故这些IP地址也可以叫可重用地址
4.8.3 VPN
(1)VPN在效果上和真正的专用网一样
(2)相隔较远的场所,通过IP隧道技术+加密数据实现VPN技术。
4.8.4 NAT网络地址转换
(1)作用:让专用网和互联网上的主机通信。
(2)NAT路由器至少要一个全球IP地址。
4.9 MPLS 多协议标记交换
(1)支持面向连接的服务质量
(2)支持流量工程,平衡网络负载
(3)有效的支持虚拟专用网 VPN。MPLS 在入口节点给每一个 IP 数据报打上固定长度的“标记”,然后根据标记在第二层(链路层)用硬件进行转发(在标记交换路由器中进行标记交换),因而转发速率大大加快。
4.10 注意点
互联网的核心是分组交换,采用存储转发技术,路由器起主要作用。
5 运输层
5.1 任务
(1)向两台主机中进程之间的通信提供通用的数据传输服务。
(2)运输层提供应用进程之间的逻辑通信,也就是说,运输层之间的通信并不是真正在两个运输层之间直接传输数据。运输层向应用层屏蔽了下面网络的细节(如网络拓补,所采用的路由选择协议等),它使应用进程之间看起来好像两个运输层实体之间有一条端到端的逻辑通信信道。
(3)网络层为主机提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信
(4)运输层的两个重要协议是用户数据报协议 UDP 和传输控制协议 TCP
5.2 端口
(1)端口(port):端口的目的是为了确认对方机器是那个进程在于自己进行交互,比如 MSN 和 QQ 的端口不同,如果没有端口就可能出现 QQ 进程和 MSN 交互错误。端口又称协议端口号。
(2)TCP/IP中用16位端口号标示一个端口,共有65535个端口。
(3)端口仅在本地计算机有效
(4)端口号分类
· 服务端使用端口号
· 系统端口号:
· 范围:0~1023
· 常见:HTTP 80,HTTPS 443
· 登记端口号:
· 范围:1024~49151
· 没有被熟知的端口号,使用这类端口号必须在IANA按照规定的手续登记,以防止重复
· 客户端使用端口号
· 范围: 49152~65535
· 仅在客户进程运行时才动态选择,在客户通信结束后,客户端口号就不存在,可以被其他进程使用
· 又叫“短暂端口号”
5.3 UDP
5.3.1 特点
(1) 无连接
(2) 尽最大努力交付
(3) 面向报文
(4) 无拥塞控制
(5) 支持一对一,一对多,多对一和多对多的交互通信
(6) 首部开销小(只有四个字段:源端口,目的端口,长度和检验和)
5.3.2 注意
虽然在UDP之间的通信要用到其端口号,但由于UDP的通信是无连接的,因此不需要使用套接字(TCP之间的通信必须要在两个套接字之间建立连接)。
5.4 TCP
5.4.1 特点
(1) 面向连接
(2) 每一条 TCP 连接只能是一对一的
(3) 提供可靠交付
(4) 提供全双工通信
(5) 面向字节流
5.4.2 可靠传输
5.4.2.1 停止等待协议
它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。下述常称为自动重传请求ARQ(Automatic Repeat reQuest)。
(1)无差错情况
发送一组报文暂停发送,等待确认报文,再继续发送。
(2)有差错情况
· 发送方在一段时间没有收到确认,就认为刚刚发送的分组丢失了,因而重传前面发送过的分组,这就是超时重传。
· 通过设置一个超时计时器来实现超时重传设计。
(3)确认丢失和确认迟到
· 接收方的确认信号丢失,发送方重新发送分组,即确认丢失。接收方丢弃这个重复的分组。
· 接收方的确认信号迟到了,发送方重新发送分组,即确认迟到。发送方收到重复的确认丢弃,接收方收到重复的分组也丢弃。
5.4.2.2 连续ARQ协议
为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输。流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停下来等待对方确认。这样可使信道上一直有数据不间断的在传送。
(1)滑动窗口
· 发送窗口里面的序号表示允许发送的序号
· 发送窗口后沿的后面部分表示已发送且已收到确认,而发送窗口前沿的前面部分表示不允许发送
· 发送窗口后沿的变化情况有两种可能,即不动(没有收到新的确认)和前移(收到了新的确认)
· 窗口中的分组,凡是已经发送过的数据,在未收到确认之前都必须暂时保留
· 发送方的窗口一定不大于接收方的窗口
(2)累积确认
接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,即到这个分组为止的所有分组都已正确收到了。
5.4.2.3 流量控制
(1)定义
让发送方的发送速率不要太快,要让接收方来得及接收。
(2)实现
通过滑动窗口机制,调整窗口大小控制速率。
5.4.2.4 拥塞控制
(1)定义
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。
判断网络拥塞的依据就是出现了超时。
(2)控制方式
TCP 发送方要维持一个拥塞窗口 cwnd 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
(3)采用的四种算法
· 慢开始:基于窗口变化,由小到大逐渐增大拥塞窗口数值。每经过一个传输轮次,拥塞窗口就加倍
· 拥塞避免:每经过一个传输轮次,拥塞窗口加1,线性缓慢增长特点。
· 快重传:
· 想让发送方尽早知道发生了个别报文段的丢失。
· 接收方立即确认,即使收到了失序的报文段,对已经收到的报文段重复确认
· 发送方一连收到3个重复的确认,立即进行重传
· 快恢复:在丢失个别报文时,不启动慢开始,执行快恢复。将拥塞窗口大小减半,然后执行拥塞避免算法。
参考:TCP的拥塞控制 - Jessica程序猿 - 博客园
(4)在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生
6 应用层
6.1 任务
通过应用进程间的交互来完成特定网络应用。
6.2 DNS
(1)作用
域名系统(DNS,Domain Name System)将人类可读的域名 (例如,www.baidu.com) 转换为机器可读的 IP 地址 (例如,220.181.38.148)。我们可以将其理解为专为互联网设计的电话薄。
(2)域名格式
采用层次树状结构的命名方法。
6.3 FTP
(1)概念
· FTP 是 File TransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于 Internet 上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的 FTP 应用程序,而所有这些应用程序都遵守同一种协议以传输文件。
· FTP提供交互式的访问,允许客户指明文件的类型和格式(如是否使用ASCII),并允许文件具有存取权限(如访问文的用户必须经过授权,输入口令等)。
· FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
· 在 FTP 的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。 "下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用 Internet 语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
· 端口号 21
(2)工作原理
· 使用可靠的TCP连接
· 采用两个进程,两个TCP连接
6.4 WWW
(1)概念
· WWW 是环球信息网的缩写,(亦作“Web”、“WWW”、“'W3'”,英文全称为“World Wide Web”),中文名字为“万维网”,"环球网"等,常简称为 Web。
· 是一个大规模的,联机式的信息储藏所
(2)URL格式:<协议>://<主机>:<端口>/<路径>
(3)使用HTTP访问网点
6.5 电子邮件系统
一个电子邮件系统有三个重要组成构件:用户代理、邮件服务器、邮件协议(包括邮件发送协议,如 SMTP,和邮件读取协议,如 POP3 和 IMAP)。
(1)用户代理UA
用户与电子邮件系统的接口,又称为电子邮件客户端软件。包括,撰写、显示、处理和通信这4个功能。
(2)邮件服务器
用于发送和接收邮件,同时向发件人报告邮件传送的结果。
(3)邮件协议
· SMTP 简单邮件传送协议,是邮件发送协议
· POP3 邮局协议第3版本,是邮件读取协议
· IMAP 网际报文存取协议,是邮件读取协议
7 TCP通信
7.1 三次握手-建立连接
(1)TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
(2)TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
(3)TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
(4)TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
(5)当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
· 为什么TCP客户端最后还要发送一次确认呢?
一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。
如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
· 序列号和确认号的作用
序列号即,Seq序号,占32位,是用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
确认号即,Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
7.2 四次挥手-释放连接
(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连接的时间要比客户端早一些。
· 为什么客户端最后还要等待2MSL?
MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。
第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。
第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。
· 为什么建立连接是三次握手,关闭连接确是四次挥手呢?
建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
8 一次Http请求过程
(1)浏览器查找域名对应的IP
浏览器缓存IP --> 系统缓存hosts文件 --> Local DNS Server(本地DNS服务器) --> Root DNS Server --> 跟域名服务器把gTLD主域名服务器地址(.com)发送给LDNS --> LDNS --> gTLD Server --> gTLD服务器把Name Server地址(.baidu)发送给LDNS --> LDNS --> Name Server --> 把IP地址发送给LDNS --> LDNS --> 客户端(缓存结果)
(2)浏览器发送HTTP请求,需要先建立TCP连接。
(3)服务器处理请求。若有负载均衡,先进行负载分配。还可能需要去分布式缓存,文件系统,数据库拉取交互数据
(4)服务器返回响应数据
(5)浏览器解析渲染页面。若有一些静态资源,会另外发起HTTP请求,请求CDN服务器。
9 CDN
(1)作用
· 内容分布式网络,流量分配网络
· CDN = 镜像 + Cache + 负载均衡
· 提高网站响应速度,以缓存静态资源ccs、Js等为主
(2)CDN解析
包含CDN域名解析,负载均衡、CDN Server、CDN节点、回源。
(3)负载均衡
包含链路负载均衡、集群负载均衡和操作系统负载均衡三种形式。
(4)CDN动态加速
· 选择离用户最近的CDN节点到源站链路给用户
· 构成CDN链路列表,绑定到DNS解析,并更新到CND Local DNS上