对计算机网络基础概念的复习与总结。

概述

计算机网络体系结构

计算机网络体系结构

OSI七层协议(包含五层协议)

  1. 应用层:为特定的应用程序提供服务,如HTTP,数据单位为报文
  2. 表示层:提供用于应用层数据的表示方式,如加解密,解压缩
  3. 会话层:负责建立、管理表示层实体之间的会话
  4. 传输层:提供的是进程间的通用数据传输服务。应用层协议繁多,定义通用的传输层协议可以便于应用层协议的扩展。包括两大协议:TCP(传输控制协议),提供面向连接、可靠的数据传输服务,提供完整性服务,数据单位为报文段;UDP(用户数据报协议),提供无连接,尽可能的数据传输服务,提供及时性服务,数据单位为数据报文。
  5. 网络层:提供主机之间的数据传输服务,把传输层的报文段或者用户数据报封装成分组(数据包)。
  6. 数据链路层:为链路中相邻节点提供连接服务,把网络层的分组(数据包)封装成帧。
  7. 物理层:考虑是如何在传输媒体传输比特流,屏蔽不同传输媒体和通信手段的差异。

数据在各层之间的传递过程

从自顶向下看的发送过程,除了数据链路层需要对网络层的分组封装首部和尾部以外,都只需要封装首部。接收过程就是反向的拆包,直到应用层得到所发送的数据。

TCP/IP体系结构

相当于把五层结构中的物理层和数据链路层合并为网络接口层,TCP/IP体系结构也不完全遵循OIS分层概念,应用层可能直接使用IP层和网络接口层

Socket接口

Socket不属于OSI七层中某一层,也不是一种协议,是一组编程接口(API),介于传输层和应用层之间。对TCP/UDP进行封装,对应用层提供统一的编程接口。

以太网

以太网(Ethernet)是为了实现局域网而设计的一种技术,包括物理层传输媒介和CSMA/CD协议等内容,属于数据链路层

交换机/路由器

二层交换机工作在数据链路层上,连接的设备同属于一个子网,使用MAC地址通过维护的交换表(端口与MAC地址的映射)进行转发(硬件处理,较快)

路由器工作在网络层,可以连接不同子网的设备,使用IP地址维护的通过路由表(目标IP,网关,接口等的映射)递归查找,寻找出最佳路由路径并转发(软件实现)

三层交换机是拥有部分路由器功能的交换机。如果目的IP是在同一个子网,则可以通过MAC地址直接在第二层转发,如果不在同一个子网,则通过默认网关将数据送至第三层路由模块,确定目的主机的MAC地址。

物理层

通信方式

  1. 单工通信
  2. 半双工通信:双向交替通信
  3. 全双工通信:双向同时通信

基带信号调制

调幅;调频;调相

信道复用技术

频分复用;时分复用;码分复用

码分复用(CDMA)

每个用户分配一个m bit的码片,并且每个码片正交。

用户要发送比特1时就发送该码片,发送0时就发送该码片的反码。这样接收端使用该码片做内积计算,结果为0是其他用户的数据,结果为1是该用户发送的1,为-1时用户发送的0。

但是这种方法需要的发送量是以前的m倍。

CDMA

数据链路层

数据封装

把网络层传下来的分组添加首部和尾部封装,因为首部没有帧信息,只靠字符来标记首尾部,所以当传送的数据包含首尾部字符时要在前面加转义字符(透明传输)。

差错检验

数据链路层一般使用循环冗余校验(CRC)。

规定一个r+1位的生成多项式,要传递的数据左移r位。用这个数除以生成多项式,做除法过程中的减法使用异或计算,不需要考虑借位。得到的r位余数即为校验位,放在数据右侧一起传递。接收方校验时使用接收到的数据除以生成多项式,如果结果不为0,则发生了差错。

局域网拓扑

LAN

点对点信道 - PPP协议

一对一通信方式。ISP和用户计算机进行通信时,数据链路层使用的就是PPP协议。

PPP

广播信道- CSMA/CD

一对多通信方式。在广播信道上,同一时间只能允许一台计算机发送数据。

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

  • 载波监听:每个站都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。
  • 多点接入:说明这是总线型网络,许多计算机以多点的方式连接到总线上。
  • 在发送中,如果监听到信道已有其他站正在发送数据,就表示发生了碰撞。

CSMA/CD

记端到端的传播时延为 $\tau$,最先发送的站点最多经过 2 $\tau$ 就可以知道是否发生了碰撞,称 2 $\tau$ 为 争用期 。只有经过争用期之后还没有检测到碰撞,才能肯定这次发送不会发生碰撞。

当发生碰撞时,站点要停止发送,等待一段时间再发送。这个时间采用 截断二进制指数退避算法 来确定,从离散的整数集合 {0, 1, .., (2k-1)} 中随机取出一个数,记作 r,然后取 r 倍的争用期作为重传等待时间。

扩展局域网

  1. 在物理层扩展

使用集线器进行扩展。集线器的作用是对接收到的信号进行扩大,以扩大网络的传输距离。

  1. 在链路层进行扩展

使用交换机扩展,交换机的每个接口都直接与一个主机或另一个交换机连接,并且一般都以全双工的方式工作。

交换机交换表存储的是MAC地址到接口的映射。发送数据帧时,如果目的主机不在交换表中,则源主机发送广播帧,目的主机接收到广播帧把自己存入交换表并回复广播帧。

  1. 虚拟局域网

虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。

MAC层

MAC地址是6字节(48位)的地址,用于唯一标识网络适配器。

MAC

  • 类型:上层使用的协议
  • 数据:长度太小则需要填充
  • FCS:帧检验序列,使用的是CRC检验方法
  • 前同步码:为了计算FCS临时加入的,计算结束之后会丢弃

网络层

网际协议IP概述

网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。使用IP协议,可以把异构的屋里网络连接起来,使得再网络层看起来好像是一个统一的网路。

与IP配套使用的还有三个协议:

  1. 地址解析协议 ARP(Address Resolution Protocol)
  2. 网际控制报文协议 ICMP(Internet Control Message Protocol)
  3. 网际组管理协议 IGMP(Internet Group Management Protocol

ICMP-IGMP

IP数据报格式

IP

  • 版本:4(IPv4)和6(IPv6)
  • 首部长度:占4位,最大值为15。值为1表示的是一个32位字,4字节的长度。首部固定长度为20字节,因此首部长度最小为5,尾部长度不足时需要填充。
  • 区分服务:未使用,为了获得更好的服务,用于设置优先权,短延迟位,高吞吐位等。
  • 总长度:包括首部长度和数据长度。
  • 标识:相同数据包的不同分片有一样的标识。
  • 标志:占三位,只使用了低两位。低一位MF表示是否还有分片,如果为1则该数据报不是最后一个分片,低二位DF为1则表示数据报不可分片。
  • 片偏移:表示该分片中数据的偏移量,单位是8字节。
  • 生存时间TTL:指路由器跳数,每经过一个路由器处理就会减1,当TTL为0时就会丢弃该数据报,防止无休止的传输下去。
  • 上层协议:ICMP,TCP,UDP等
  • 首部校验和:发送端校验和字段先置为0,把头部以16位为单元进行划分,尾部位数不足的补0。之后将各个单元进行反码求和(高位进位补到低位),结果的反码存入校验和字段。接收端同样进行这个操作,如果结果不全是1,则说明数据不正确。
  • 可选字段:用于对数据报传输过程的控制和网络测试。

最大传输单元

IP数据报在互联网上传输时,可能要经过多个物理网络才能从源端传输到目的端。不同的网络由于链路层和介质的物理特性不同,因此在进行数据传输时,对数据帧的最大长度都有一个限制,这个限制值即最大传输单元MTU(Maximum Transmission Unit)。

同一个网络上的两台主机之间通信时,该网络的MTU值是确定的,不存在分片问题。分片问题一般只存在于具有不同MTU值的互联网中。由于现在互联网主要使用路由器进行网络连接,因此分片工作通常由路由器负责。

IP地址编址方式

分类

IP-ADRRESS

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

当时分类的初衷是为了使路由表较小,增加网络转发速度,现在的实际意义已经不大。

子网划分

通过把主机号拿出一部分作为子网号,使二级地址变为三级地址,相当于减少主机数,分配到不同子网,对于外层网络是无法知道。

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

子网划分需要配置子网掩码,32位子网掩码中网络号,子网号部分为1,主机号部分为0。

CIDR无分类

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

CIDR可以记为在IP地址后加上“/”和网络前缀号的位数,CIDR掩码依然可以用上述的子网掩码表述。

通过CIDR可以用一个网络表示原来多个网络,并且路由表也只需要一个路由,减少路由表项,这种方式为路由聚合。

IP地址和MAC地址

网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。

ARP协议(Address Resolution Protocol),或称地址解析协议,提供IP地址与MAC地址的映射,通过IP查询MAC,以便网络层访问数据链路层。如果ARP缓存表中没有要查询的映射,则通过广播的方式获取。该协议比较难界定是在网络层还是数据链路层。

路由选择协议

互联网可以划分为许多较小的自洽系统弄AS。

可以把路由选择协议划分为两大类:

  1. 内部网关协议IGP:在AS内部使用,如RIP何OSPF。
  2. 外部网关协议EGP:在AS之间使用,如BGP。

RIP

RIP是一种分布式的基于距离向量的路由选择协议,距离即路由器跳数,最大为15。按固定时间间隔向相邻路由器交换路由表。

距离向量算法:

  1. 当前路由器C收到相邻路由器P的路由表PT,首先把PT中的吓一跳都改为P,并把距离加1。C的路由表为CT。
  2. for(x : PT)
    • 如果CT中没有x.netid,则添加x到CT中。
    • 如果CT中有x.netid,并且下一跳为P,则把该项更新为x。
    • 如果CT中有x.netid,下一跳不为P,x的距离小于CT中该项的距离,则把该项更新为x。
  3. 如果3分钟还没有收到相邻的路由器的路由表,则认为其不可达,设置距离为16。

网络出现故障时,要经过较长的时间才能将此消息传送到所有路由器。

OSPF

OSPF是一种分布式的基于链路状态的路由选择协议。使用Dijkstra最短路径有限算法。有如下特点:

  1. 向自洽系统总所有路由器发送信息。
  2. 发送的信息是与相邻路由器的链路状态,包括费用,距离等度量,不只是跳数。
  3. 只有当链路状态发生改变时,路由器才会发送信息。

所有路由器都有全网的拓扑结构图,相比于RIP,OSPF更新过程收敛更快。

Dijkstra算法

求解赋权有向图或无向图的单源最短路径问题,使用了贪心的思想。

Dijstra

  1. 使用辅助向量D,向量分量D[i]中起点到顶点i的权值,如果不相邻则为$\infty$。 \(D=[0, \infty, 10, \infty, 30, 100]\)
  2. 找到D中除了v1以外的最小值10,v3的最短路径即确定。 \(D=[0, \infty, 10, \infty, 30, 100]\)
  3. 查看v3的出度,看是否会影响其他顶点的最短路径,发现v1->v3->v4是要短于v1->v4,所以更新D,该过程称为“松弛”。 \(D=[0, \infty, 10, 60, 30, 100]\)
  4. 重复2,3步,找到D中剩下顶点中的最小值即可确定该顶点的最短路径,再通过该顶点的出度更新D,最后结果为: \(D=[0, \infty, 10, 50, 30, 60]\)

BGP

各个AS配置BGP发言人,通过在两个相邻BGP发言人之间建立TCP连接来交换路由信息。

网际控制报文协议ICMP

ICMP的目的是为了提高IP数据报交付成功的机会。ICMP是IP层的协议,ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。

ICMP差错报告报文:

  • 终点不可达
  • 源点抑制
  • 时间超过
  • 参数问题
  • 改变路由

ICMP询问报文:

  • 回送请求和回答报文
  • 时间戳请求和回答报文

网际组管理协议IGMP

它是TCP/IP协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员。

当一台主机加入到一个新的组时,它发送一个IGMP消息到组地址以宣告它的成员身份,多播路由器和交换机就可以从中学习到组的成员。利用从IGMP中获取到的信息,路由器和交换机在每个接口上维护一个多播组成员的列表。

分组网间探测PING

PING主要用来测试两台主机之间的连通性。

源主机发送ICMP回送请求消息给目的主机,目的主机返回ICMP回送应答消息给源主机。

网络地址转换NAT

使用NAT来将内网使用的私有IP转换为公网IP。

现在一般使用端口多路复用,也就使用端口达到一个公网地址对应多个私有地址。

运输层

网络层只是把分组发送到目的主机,但是真正通信的并不是主机,而是进程,运输层提供了进程间的逻辑通信。

UDP和TCP特点

  • UDP:是无连接的,尽最大可能交付,传递速度快,面向报文(数据报模式)。但是因为没有TCP的可靠机制,在网络状态不好的时候容易造成丢包或。
  • TCP:是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(流模式)。但是速度较慢,占用系统资源高,易被利用使用DDOS攻击等。
  • 使用场景:1.TCP:对网络通讯质量有要求的时候。如需要数据准确无误可靠地传递时,如HTTP,FTP等传输文件的协议,POP,SMTP等邮件协议;2.UDP:对通讯质量要求不高,但是对延迟要求较高,要求网络通讯速度尽可能的快,如视频,语音。

UDP首部格式

UDP

UDP首部只有8字节,12字节的伪首部只为了计算检验和临时添加,检验和的算法与IP首部是相同,添加伪首部的目的是同时校验IP首部的IP地址,保证数据可以正常送达。TCP也同样有伪首部的机制。

TCP首部格式

TCP

  • 序号:TCP面向字节流,传送的每一个字节都按顺序编号,该字段即为这个报文段第一个字节的序号。
  • 确认号:期望收到的下一个报文段的序号,为已经收到的数据字节序号加1。
  • 数据偏移(首部长度):数据部分距报文起始处的偏移量。
  • 6位标志:URG紧急指针有效性;ACK确认号有效性;PSH接收端应用层应立即从缓冲区读走数据;RST要求对方重新建立连接;SYN请求建立一个连接;FIN本端已经发送完毕,准备关闭连接。
  • 窗口大小:用于TCP流量控制,告知对方自己缓冲区可以容纳多少字节。
  • 紧急指针:一个正的偏移量,它和序号段的值相加表示最后一个紧急数据的下一个字节序号。

TCP三次握手

TCP三次握手

  1. 首先B处于LISTEN状态,等待客户的连接请求。
  2. 第一次握手:A向B发送连接请求报文段,SYN=1,ACK=0,随机选择一个初始的序号x。A进入SYS-SENT状态。
  3. 第二次握手:B接收到A的请求报文,则向A发送连接确认报文,SYN=1,ACK=1,确认号为x+1,再随机选择自己的初始序号y。B进入SYN-RCVD状态。
  4. 第三次握手:A收到B的确认报文后,再向B发出确认,确认号为y+1,序号为x+1,之后B收到报文确认后,A和B都进入ESTABLISHED状态,完成三次握手,双方可以开始传输数据了。

三次握手原因:防止失效的连接请求到达服务器,让服务器错误地打开连接。

TCP四次挥手

TCP四次挥手

ACK在建立连接后都是1,序号和确认号的规则也比较简单,初始序号均为随机选择,确认号为接收到的序号加1。

  1. 第一次挥手:A发送连接关闭报文,FIN=1,A进入FIN-WAIT-1状态。
  2. 第二次挥手:B收到A的连接关闭报文后,此时TCP处于半关闭状态,B能向A发送数据,但是A不能向B发送数据。
  3. 第三次挥手:当B已经发送完数据,不再需要连接,向A发送连接关闭报文,FIN=1,进入LAST-ACK状态。
  4. 第四次握手:A收到FIN后,进入TIME-WAIT状态,等待2MSL后关闭连接。并向B发送ACK,B收到后关闭连接。

四次挥手的原因:A发送FIN报文,B收到这个报文后没有立刻回复FIN,而是进入CLOSE-WAIT,可以让B发送剩下的数据,发送完毕后再发送FIN报文关闭连接。

TIME-WAIT状态存在的原因:1.如果B没有成功收到ACK,会重传FIN,所以A等待2MSL(Maximum segment liftime,IP数据报能够在因特网中存活的最长时间),确保B已经收到了A的ACK。2.等待2MSL确保本次连接中所产生的报文段都消失,防止下一次连接中出现旧的连接请求却认为为新的请求。

TCP滑动窗口

TCP滑动窗口

窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。

发送端的数据分为:

  1. Sent and Acknowledged:这些数据表示已经发送成功并已经被确认的数据,这些数据其实的位置是在窗口之外了。如果窗口左侧含有这类数据,则会进行窗口滑动,直到这些数据到窗口外。
  2. Send But Not Yet Acknowledged:这部分数据称为发送但没有被确认,数据被发送出去,没有收到接收端的ACK,认为并没有完成发送,这个属于窗口内的数据。
  3. Not Sent,Recipient Ready to Receive:这部分是尽快发送的数据,这部分数据已经被加载到缓存中,也就是窗口中了,等待发送。
  4. Not Sent,Recipient Not Ready to Receive: 这些数据属于未发送,同时接收端也不允许发送的,因为这些数据已经超出了发送端所接收的范围。

接收端的数据分为:

  1. Received and ACK Not Send to Process:这部分数据属于接收了数据并确认但是还没有被上层的应用程序接收,也是被缓存在窗口内。当这些数据有部分交付到上层程序后,就会进行窗口滑动,直到这部分数据到窗口外。
  2. Received Not ACK: 已经接收,但是还没有回复ACK,这些包可能没有按序到达,但是会暂时在缓存中,接收端只会对窗口中最后一个按序到达的字节进行确认
  3. Not Received:还没有被接收的数据。

TCP可靠传输

TCP使用超时重传来实现可靠传输。TCP通过滑动窗口协议(连续ARQ协议实现),除了滑动窗口协议还存在其他协议。

停止等待ARQ协议

ARQ(Automatic Repeat reQuest)是自动重传请求,也就是当请求失败时会自动重传,直到请求被正确接收位置。

停止等待协议是发送方接收方窗口都为1,发送方发送完数据后会等待接收端确认回复ACK,这个过程会停止发送新的数据包,如果超时还没有收到确认,就会重发。

退后N帧协议

发送方发送完一个帧后,不同停下来等待,如果前面的帧超时会把该帧和后续的所有数据帧重传,所以会重传正确的数据帧。

选择重传协议

在发送过程中,如果一个数据帧计时器超时,就认为该帧丢失或者被破坏,接收端只把出错的的帧丢弃,其后面的数据帧保存在缓存中,并向发送端回复NAK。发送端接收到NAK时,只发送出错的帧。

TCP流量控制

TCP使用滑动窗口来进行流量控制,这是为了控制发送方发送速率,保证接收方来得及接收。

接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。

TCP拥塞控制

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。

TCP拥塞控制

TCP 主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。发送方需要维护有一个叫做拥塞窗口(cwnd)的状态变量。

慢开始与拥塞避免

刚开始执行慢启动,cwnd=1,一次只能发送一个报文,当确认后使cwnd加倍,cwnd=2,4,8,16…

但是cwnd这样指数级的增长,会使发送方的发送速度增长过快。设置一个慢开始阈值ssthresh,当cwnd>=ssthresh时,进入拥塞避免,每次cwnd只增加1。

当出现超时时,则令ssthresh=cwnd/2,然后重新执行慢开始。

快重传与快恢复

接收端只会对最后一个按序达到的字节进行确认,所以如果发送端收到三个重复确认,那么可以确认下一个报文段丢失。此时执行快重传,立刻重传下一个报文。因为之后的报文接收端可能已经收到并缓存,所以只重传下一个报文。

这种情况只是丢失个别包,不是网络拥塞,所以执行快恢复,令ssthresh=cwnd/2,cwnd=ssthresh,直接进入拥塞避免。

TCP粘包

在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。

对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。所以UDP不会出现粘包问题。

什么时候需要考虑粘包问题?
  1. 短连接中每次发送数据,就与对方建立连接,然后双方发送完一段数据后,就关闭连接,这样就不会出现粘包问题。
  2. 如果发送数据无结构,如文件传输,这样发送方只管发送,接收方只管接收存储就ok,也不用考虑粘包
  3. 但是像长连接中,建立连接后,一段时间发送不同的结构数据,接收方可能会接收到不同结构数据相连接的结构,这就需要双方组织好包结构,一般会在头上加一个数据长度的包,以确保接收。
粘包的原因

简单得说,在流传输中出现,UDP不会出现粘包,因为它有消息边界,而TCP:

  1. 发送端需要等缓冲区满才发送出去,造成粘包
  2. 接收方不及时接收缓冲区的包,造成多个包接收
粘包的解决

针对这个问题,一般有3种解决方案:

  1. 发送固定长度的消息
  2. 把消息的尺寸与消息一块发送
  3. 使用特殊标记来区分消息间隔

应用层

DNS

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。

层次结构

DNS

一个域名由多个层次构成,从上层到下层分别为顶级域名、二级域名、三级域名以及四级域名。所有域名可以画成一颗域名树。

域名服务器可以分为以下四类:

  1. 根域名服务器:解析顶级域名;
  2. 顶级域名服务器:解析二级域名;
  3. 权限域名服务器:解析区内的域名;
  4. 本地域名服务器:也称为默认域名服务器。可以在其中配置高速缓存。

解析过程

主机向本地域名服务器解析的过程采用递归,而本地域名服务器向其它域名服务器解析可以使用递归和迭代两种方式。

迭代的方式下,本地域名服务器向一个域名服务器解析请求解析之后,结果返回到本地域名服务器,然后本地域名服务器继续向其它域名服务器请求解析;而递归的方式下,结果不是直接返回的,而是继续向前请求解析,最后的结果才会返回。

电子邮件协议

mail

一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件发送协议和读取协议。其中发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。

文件传输协议FTP

FTP 在运输层使用 TCP,并且需要建立两个并行的 TCP 连接:控制连接和数据连接。控制连接在整个会话期间一直保持打开,而数据连接在数据传送完毕之后就关闭。控制连接使用端口号 21,数据连接使用端口号 20。

动态主机配置协议DHCP

DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要去手动配置 IP 地址等信息。DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。

DHCP 工作过程如下:

  1. 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。
  2. DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。
  3. 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
  4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。

点对点传输P2P

把某个文件分发的所有对等集合称为一个洪流。文件的数据单元称为文件块,它的大小是固定的。一个新的对等方加入某个洪流,一开始并没有文件块,但是能够从其它对等方中逐渐地下载到一些文件块,与此同时,它也为别的对等方上传一些文件块。

P2P 是一个分布式系统,任何时候都有对等方加入或者退出。使用分布式散列表 DHT,可以查找洪流中的资源和 IP 地址映射。

Web页面请求过程

按下回车,产生中断

解析URL

  • 得到使用的协议和主机名,可能还有端口号。
  • 当协议和主机名不合法的时候,浏览器大部分会将这段文字传递给搜索引擎进行搜索。
  • 当主机名中包含非ASCII的Unicode字符,浏览器会对主机名进行Punycode编码,因为DNS服务器只支持ASCII码。

DNS查询

目的:得到域名所对应的IP,用于进行连接。

  • 检查域名是否在浏览器缓存中
  • 检查本机Hosts中是否有配置该域名
  • 检查域名是否在本地DNS缓存中
  • 向本地DNS服务器进行DNS查询请求,本地服务器通常为本地路由器或者ISP的缓存DNS服务器
  • 通过ARP过程对DNS服务器或者是默认网关(一般都为路由器)进行ARP查询
  • 递归查询得到结果

ARP过程

  • 首先查询ARP缓存表
  • 如果ARP缓存表没有,则发送ARP广播,得到目的主机的MAC地址

建立TCP连接

  • 浏览器得到了目标服务器的IP地址,以及URL中的端口号(HTTP默认80,HTTPS默认443),它会调用系统库函数socket,请求TCP套接字。
  • 这个请求逐层向下的被封装为TCP报文段、IP包、MAC帧,并在网络中以比特流传递。
  • 建立TCP连接会经历三次握手过程。
  • 关闭连接会经历四次挥手过程。

HTTP请求处理

  • 建立连接后,浏览器生成HTTP GET报文,并请求HTTP服务器。
  • HTTP服务器读取HTTP GET报文,生成HTTP响应报文,并将WEB页面内容放入报文主体中,返回到主机。
  • 浏览器收到HTTP响应报文后,抽取WEB页面内容,进行渲染。

浏览器渲染

  • 解析HTML构建一个DOM Tree。
  • 解析CSS构建CSSOM Tree。
  • 执行Javascript,通过DOM API和CSSOM API来操作DOM Tree和CSSOM Tree。
  • 解析完成后,浏览器根据DOM Tree和CSSOM Tree来构造Rendering Tree。
  • 布局:计算各个Element的位置。
  • 绘制。
Updated on Chengjian Zhou

odroid搭建Android实验环境过程

Published on September 18, 2018

Java并发编程知识总结

Published on August 26, 2018