计算机网络
前情:由于本人目前的学习要求,重点分析了网络层、传输层、应用层,物理层和数据链路层都是点到为止
参看:
- 计算机网络-自顶向下(2015版)
- 学堂在线-计算机网络(华南理工大学-袁华)
- 中国大学MOOC-王道考研 计算机网络(2020)
- https://blog.csdn.net/hyp1977/article/details/52150182
- https://blog.csdn.net/flybirddizi/article/details/73065667
- https://blog.csdn.net/wendy_keeping/article/details/76098504
TCP/IP是一个协议族的统称,由http协议、ip协议、tcp协议、ftp协议等等,它的作用是使得计算机与计算机之间按照统一的规定进行数据交互。TCP/IP有五层:应用层(Application Layer)、传输层(Transport Layer)、网络层(Network Layer)、数据链路层(Datalink Layer)、物理层(Physical Layer)。
分层的基本原则:
- 各层之间互相独立,每层只实现一种相对独立的功能;
- 每层之间界面自然清晰,易于理解,相互交流尽可能少;
- 结构上可分隔开,每层都采用最合适的技术来实现;
- 保持下层对上层的独立性,上层单向使用下层提供的服务;
- 整个分层结构能够促进标准化工作。
1. 物理层
物理层提供透明的比特流传输,封装好的数据以0和1比特流的形式进行传递;物理层的传输,不关心比特流里面的信息是什么,而是只关心比特流的正常搬运。
物理层处理位流(bits)
2. 数据链路层
为网络层提供服务,保证数据传输的有效、可靠。数据链路层的三个基本问题:封装成帧、透明传输、差错检测。
数据链路层处理帧(frame),帧是链路层的传输单元。
-
以太网协议:规定一组电信号构成一个数据包,我们把数据包称为帧,每个帧由Head和Data两部分组成。帧的大小一般为64-1518个字节。Head存储一些说明数据(目的地址、源地址、类型、FCS循环冗余检测),Data则是数据包的具体内容。注意Head的长度固定为18个字节。
-
MAC地址:即链路层地址,每一台计算机的网卡接口有一个唯一的MAC地址,计算机之间传输信息就是通过MAC地址来寻找唯一的计算机进行数据传输的。MAC由6个字节(48位,2^48个可能的MAC地址)组成,在网卡生产的时候就被唯一标识了。
-
广播与ARP协议:
- 广播:同一个子网中,进行数据群发,计算机接收到数据包后取出其中的MAC对比是不是自己,是就接收,否则丢弃数据包。
- ARP:Address Resolution Protocol地址解析协议,获取到目标计算机的MAC地址。会涉及到IP协议,下面谈到。
3. 网络层
在茫茫人海中找到另一个计算机在哪。
网络由无数个子网构成,广播的时候,在同一个子网中的计算机能够收到信息。如果发送方与接收方在同一个子网下,就群发信息;如果不在同一个子网下,交给网关进行转发信息。
3.1 IP协议
3.1.1 介绍
- IP协议所定义的地址,称为IP地址。分为IPv4和IPv6,这里仅讨论前者。这个IP由32位(32比特)二进制数组成,一般分为4段十进制数表示(0.0.0.0~255.255.255.255)(因为8比特为一个字节,所以分为4个字节来表示)。每一台计算机都会有一个IP地址,IP地址分为网络部分和主机部分,并且两部分所占的二进制数是不固定的。
- 假如两台计算机的网络部分是一样的,就表示它们处于同一个子网中。如192.169.119.1/192.169.119.2(假如两个IP的网络部分是24位,主机部分是8位)。但是我们是无法直接判断网络部分占几位的,单从两台计算机的IP是无法判断它们是否处于同一个子网中的,为了解决这个问题就提出另一个概念:子网掩码。
- 子网掩码也是32位二进制数,它的网络部分全部为1,主机部分全部为0,用上面一个例子就可得到它们的子网掩码:11111111.11111111.11111111.00000000,即255.255.255.0。它用来判断不同的IP地址是否在同一个子网中,我们只需要把 IP 地址与它的子网掩码做 与(&) 运算,然后把各自的结果进行比较,如果比较的结果相同,则代表是同一个子网,否则不是同一个子网。例如192.169.119.1/192.169.119.2的子网掩码都是255.255.255.0,与运算后得到192.169.119.0,处于同一个子网中。
3.1.2 IPv4
在IP协议中,IP协议是面向非连接的,所谓的非连接就是在数据的传递过程中,不需要检测网络是否连通,所以IP协议是不可靠的数据报协议。IP协议主要用于在主机之间的寻址和选择数据包路由。下面是IP数据报的格式:
版本:占4位,规定了数据报的IP协议版本,通信双方的版本号相同才能通信,IPv4的版本号是4;
首部长度:占4位,因为长度为四比特,所以首部长度的最大值为1111,15,又因为首部长度代表的单位长度为32个字(也就是4个字节),所以首部长度的最小值就是0101,当然,也确实如此,大部分的ip头部中首部字节都是0101.也就是5*4=20个字节,如果是最大值15的话,ip首部的最大值就是60个字节,所以记好了,ipv4首部长度的最大值就是60,当然当中我们又能发现,IPv4的首段长度一定是4字节的整数倍,要是不是怎么办呢?别急,后面的填充字段会自动填充补齐到4字节的整数倍的;
区分服务:占8位,这个没有什么用处,也没有什么好讲的了,只要自动这玩意占八位,一个字节就可以了;
总长度:占16位,IP数据报中首部和数据的总和的长度,因为占16位,所以很好理解,总长度的最大值就是2的16次方减一,65535,这玩意也对应着还有一个很简单的概念,最大传输单元mtu,意味着一个IP数据报的最大长度就只能装下65535个字节,要是传输的长度超过这个怎么办,很简单,分片。
标识:占16位,标识这玩意很好理解,IP在存储器中维持一个计数器,每产生一个 数据报,计数器就加1,并将此值赋给标识字段。但这个标识并不是平常的序号,因为IP是 无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分 片时,这个标识字段的值就被复制到所有的数据报片的标识字段中,等到重组的时候,相同标识符的值的数据报就会被重新组装成一个数据报;
标志:占3位,一般有用的是前两位,最低位叫做MF,MF=1表示后面还有若干个数据报,MF=0表示这已经是最后一个数据报了;中间位叫做DF,DF表示不能进行分片,DF=0才可以进行分片操作;
片偏移:占13位,片偏移就是,在原来的数据报分片以后,该片在原分组中的相对位置,片偏移中的基本单位是8字节,所以,也就是说,只要是分片,每个分片的长度都是8字节的整数倍,最后一个分片不够八字节的一样是填充;
生存时间ttl:占8位,(time to live),表明数据报在网络中的寿命,这个值被设定成跳数,顾名思义,就是这个数据报可以经过多少个路由器的数量,每经过一个路由器,该值就减一,减到为零的时候就被抛弃,显而易见,这个跳数的最大值就是2的8次方减一,255;
协议:就是用来指明数据报携带了哪种协议,占8位;
首部效验和:占16位,这个字段用来效验数据报首段,下面给出简单的计算方法:
首先在发送端的时候,将效验和全部置为0,然后把数据报首段数据全部进行反码相加,得到的值为效验和,放入首段效验和里面,然后接收端将数据报首段数据和效验和一起全部反码相加,最后若是得到零,则保留,若是不为零,则说明数据报在传输的过程中发生了改变,则丢弃该数据报;
IP源地址:占32位,将IP地址看作是32位数值则需要将网络字节顺序转化位主机字节顺序。转化的方法是:将每4个字节首尾互换,将2、3字节互换;
目的地址:也占32位,转换方法和来源IP地址一样。
可变选项:增加头部的可变选项实际上就是增加了数据报的功能,可变选项在实际上是很少用到的。
3.2 ARP协议
通过IP协议找到目标计算机的MAC地址。ARP协议会发送一个数据包(包含发送方的IP和接收方的IP)。在同一个子网中就通过广播的形式发送,不同子网就把数据包发送给网关进行转发。其他计算机接收到这个数据包后,取出其中的IP地址与自身IP对比,一致就返回自身的MAC地址,否则丢弃这个数据包。从而实现获取目标计算机的MAC地址。(这个群发在数据包会告知计算机我现在是在发送数据还是在索取MAC地址)
3.3 DNS服务器
使用UDP协议,解析域名,返回域名的IP给到用户,如果输入域名www.baidu.com
,DNS服务器会解析这个域名,返回这个域名对应的IP给我们。可参见cmd中ping baidu.com
,可获得IP。
4. 传输层
传输层功能就是建立端口到端口的通信,相比网络层是建立主机到主机的通信。物理层、数据链路层、网络层都是点到点的传输。
通过物理层、数据链路层和网络层的帮助,成功实现了把数据有一个计算机传输到另一个计算机,接着由 端口(Port) 把数据发送到指定应用程序。对于有些传输协议已经设置了默认的端口,例如HTTP传输默认端口80,端口信息存放在数据包里。
传输层最常见的协议:TCP和UDP,TCP提供可靠传输(三次握手四次挥手),UDP提供的是不可靠传输(面向无连接的协议)。
4.1 UDP协议
User Datagram Protocol用户数据包报协议。无拥塞控制。传输数据段。
4.1.1 概述
TCP只在IP数据保服务上增加了很少功能,即多路复用(多个端口使用一个线程)、分用(接收到数据以后找到对应的应用程序线程)和差错检测功能。下面是UDP主要特点:
-
UDP是无需建立连接,减小开销和发送数据之前的延时;
-
UPD不提供数据传输的可靠保证;
-
UDP是面向报文的,适合一次性传输少量数据的网络应用;
-
UDP无拥塞控制,适合很多实时应用场景;
-
UPD的传输层上的一个轻量级协议,分组首部开销小;TCP首部20字节,UDP首部8字节。
-
提供高效的端到端(区别于IP数据分组传输)的数据段传输;
注意:
-
应用层给UDP多长的报文,UDP会直接发生一个完整的报文给网络层:
如果报文长度过大,网络层就很对其进行分片,接下来传递给链路层也有限制,降低了网络层的效率;
如果报文长度过小,网络层的IP数据协议报中的数据部分就很小,相当于IP首部小很多,也减低了网络层效率。
-
UDP适用于实时应用场景的原因是:实时应用场景要求延迟低,丢一点数据不影响。
4.1.2 UDP报文结构
UDP首部只有4个字段(8字节),每个字段由两个字节组成:
- 源端口号:可有可无,如果发送的数据需要接收回复就得添上;不需要回复可以置为全0;
- 目的端口号:一定要有(端口号有2字节,16位二进制数表示,0~2^16);
- UDP长度:指整个UDP数据报长度=首部字段+数据字段;
- UDP检验:检验整个UDP数据报是否有误,出错直接丢弃数据;
有一种情况:分用时,即网络层把数据给传输层后,传输层在找端口号所对应的应用进程时,如果找不到对应的应用进程,也会丢弃数据,返回给发送方ICMP“发送不可达”报文。
4.1.3 UDP检验和
学习IP协议配合理解才行。
UDP检验和提供了差错检验功能,用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发送了改变。
伪头部是就是IP,只在检验时出现:
其中封装UDP报文的IP数据报首部协议字段的17,封装TCP报文的IP数据报首部协议字段的6,下面是UDP检验发发:
UDP检验使用了IP地址,破坏了分层原则。UDP提供端点标识,端到端的数据传输;不提供差错控制和可靠传输,但简介高效。
4.2 TCP协议
Transmission Control Protocol传输控制协议。面向字节流。两个应用进程在互相发送数据之前,必须先互相握手;接收发送数据之前,也必须先挥手。即它们必须预先发送某些预备报文段,以建立确保数据传输的参数。
4.2.1 概述
- TCP是面向连接的传输层协议;
- 每一条TCP只能有两个端点,每一条TCP连接只能是点对点的;
- TCP提供可靠交付的服务,可靠有序,不丢不重;
- TCP全双工通信;(双方存在发送缓存和接收缓存)
- TCP面向字节流,TCP把应用程序给到的数据看成是一连串的无结构的字节流。
4.2.2 TCP报文段结构
六个控制位(控制比特)URG(urgency),ACK(ack),PSH(push),RST(reset),SYN(synchronization),FIN(final):
SYN=1 ACK=0表示连接请求,SYN=1 ACK=1表示连接接收。FIN=1还可以继续接收数据。
4.2.3 TCP的连接管理
TCP连接传输分为三个阶段:连接建立、数据传输、连接释放。
TCP连接的建立采用客户服务器方式客户服务器方式,主动发起连接建立的应用进程叫做客户,被动等待连接建立的应用进程叫服务器。
ACK是确认位,占一位(1bit);ack是确认号,占32位(32bit)
TCP的三次握手
假设A是客户端,B是服务器端:
- 第一次握手:A首先向B发出连接请求报文段,这个时候首部中的同步位SYN=1,同时选择一个初始的序号x(随机)。此时报文段不能携带数据。此时A进入到SYN_SENT(同步已发送)状态;
- 第二次握手:B受到连接请求报文,(服务器端)为该TCP连接分配缓存和变量,同意建立连接,向A发出确认报文。确认报文中,SYN=1,ACK=1,ack=x+1,seq=y,不能携带数据。此时B进入SYN_RCVD(同步收到)状态;
- 第三次握手:A收到B的确认后,(客户端)为该TCP连接分配缓存和变量,并给B发出确认。这时可以携带数据。SYN=1,ACK=y+1,seq=x+1,A进入到ESTABLISHED状态。
双方交换了初始序列号,用于跟踪后续交换的每一个字节,后续字节的编号就是以此初始序列号作为基础的,建立TCP连接的两方没有主从之分,可以互相收发数据,TCP数据段的传输是全双工的。上述第二次握手和第三次握手,服务器和客户端都分配了对应的缓存和变量,就可能会产生SYN洪泛攻击(伪造源IP)。
TCP的四次挥手
参与一条TCP连接的两个进程中的任何一个都能终止连接,连接结束,对应的资源释放。
- 现在A和B都处于ESTABLISHED状态,A的应用进程发出连接释放报文段,停止发送数据,主动关闭TCP连接。A进入FIN_WAIT1(终止等待1)状态。
FIN=1,seq=u
- 然后B确认,B进入CLOSE_WAIT(关闭等待)状态。此时TCP处于半关闭状态,A已经没有数据要发送了,B仍要发送数据,B仍然接收。
ACK=1,seq=v,ack=u+1
。(A不需要回复,A此时以及没有数据发送,只是在等待B发送数据) - A收到B的确认后,就进入FIN_WAIT2(终止等待2)状态,等待B发出连接释放报文。 如果B已经没有向A发送的数据,则B发送请求释放报文,B进入LAST_ACK(最后确认)阶段,等待A的确认。
FIN=1,ACK=1,seq=w,ack=u+1
- A在收到B的请求后,要发出确认,然后进入TIME_WAIT(时间等待)状态。此时,连接还未释放,必须等待时间等待计时器设定的时间的2MSL(最长报文段寿命)后,A才进入CLOSED状态。
ACK=1,seq=u+1,ack=w+1
4.2.4 TCP可靠传输
我们都知道网络层的IP协议是不提供可靠的传输,需要实现数据的可靠传输的时候,就得在传输层进行操作。而传输层的UDP、TCP协议中,TCP协议是可靠的,在传输层就可以依靠TCP协议来实现可靠传输;如果在传输层使用UDP的话,就需要在最上一层应用层实现可靠传输操作。
TCP的实现可靠传输的机制有四种:检验、序号、确认、重传。
1.检验
与UDP检验一样,在发送方和接收方增加一个伪头部,通过二进制和去反码,判断是否出错。
2.序号
TCP协议面向字节流,因此TCP以字节为单位进行传输,会给每个字节编上序号;实际发送的时候以报文段为单位,将一些字节合在一起组成报文段。
每一个字节都有自己的序号,其中序号字段指的是对应报文段第一个字节的序号。
3.确认
序号机制保证数能够有序的传输,基于序号机制,就衍生处理确认和重传机制
- 发送方给接收方发送123字节组成的第一个报文段,接收方收到后存储在TCP缓存中,然后选择合适的时间将缓存中的报文段提交给应用层;此时发送方TCP缓存中仍会存在123报文段,为了保证报文段丢失能够重传
- 接收方收到报文段后会返回一个确认报文段,可采用累积确认/稍带确认(接收方要发送数据给发送方携带确认信息)的方式;假如发送方发送一个只有确认功能的报文段,则报文段首部的确认号为4,表示已经收到123字节报文段,希望收到4字节开始的报文端;发送方收到确认报文段后,就会将123字节报文段从TCP缓存中移除;
- 此时假设发送方继续发送456报文段以及78报文段,如果456报文段中途丢失;这是接收方就会采用累计确认的方法:返回的确认报文段首部确认号仍为4,但78报文段还会正常接收
4.重传
确认机制和重传机制密切相关:如果报文段按序完整到达,接收方就会返回确认告诉发送方接下来要发送哪一个报文段;如果没有按序到达,接收方就会返回确认报文指示发送方应该重传哪一个报文段
TCP采用自适应算法,动态改变重传时间RTTs
- 发送一个报文段时,RTTs=第一个报文段的RTT,也就是第一个报文段从发送到收到确认的时间
- 发送第二个报文段时,RTTs根据第一个报文段的RTT和第二个报文段的RTT算出,作为现在的重传时间
- 发送第三个报文段时,RTTs根据第一、二、三报文段的RTT算出,作为新的的重传时间
由此可见,RTTs取决于发送的每个报文端的RTT,这样的自适应算法能够很好的照顾到每个报文段,使超时重传时间不过长也不过短。
超时重传要一直在超时重传时间内等,直到超过时间还未确认才会重传,这个等待的时间可能会很久,那么如何能够在超时事件发生前知道发送方有没有丢掉报文段?尽快重传呢?于是有了冗余ACK的方式
4.2.5 TCP流量控制
TCP使用滑动窗口机制实现流量控制
- 接收窗口
rwnd
- 拥塞窗口
cwnd
发送窗口取决于rwnd
和cwnd
的最小值。
4.2.6 TCP拥塞控制
两种因素引发拥塞:
- 接收方处理不过来,用窗口尺寸来量度(容易获得);
- 通信子网中出现拥塞,用拥塞窗口来量度(很难获取)。
拥塞控制就是防止过多的数据注入到网络中,这样使得网络中的路由器或者链路不至于过载。TCP拥塞控制方法主要包括:慢启动,拥塞避免,快重传和快恢复。
1.慢开始和拥塞避免
慢开始是指发送方先设置cwnd=1,一次发送一个报文段,随后每经过一个传输轮次,拥塞串口cwnd就加倍,其实增长并不慢,以指数形式增长。还要设定一个慢开始门限,当cwnd>门限值,改用拥塞避免算法。拥塞避免算法使cwnd按线性规律缓慢增长。当网络发生延时,门限值减半,拥塞窗口执行慢开始算法。
2.快重传和快恢复
之后又提出了快重传和快恢复。当接收方收到失序的报文段,按照快重传,需要尽快发送对未收到的报文段的重复确认。快恢复是指当拥塞串口达到门限值,不直接开启慢启动算法,而是快恢复,快恢复就是收到三个重复的确认(可看作是网络已经拥塞了),此时并不执行慢开始算法,而是执行快恢复,就是新的门限值是原来的一半,直接进入拥塞避免阶段。
4.3 TCP和UDP区别
- TCP是传输控制协议,提供的是面向连接的,可靠地字节流服务。实际数据传输之前服务器和客户端要进行三次握手,会话结束后结束连接,结束进行四次挥手。
- UDP是用户数据报协议,是无连接的。因为无连接,而且没有超时重发机制,所以UDP传输速度很快。主要用于视频传输(但其实现在各大视频商都是用HTTP协议,而HTTP是基于TCP),实时视频。
- TCP保证数据按序到达,提供流量控制和拥塞控制,在网络拥堵的时候会减慢发送字节数,而UDP不管网络是否拥堵。
- TCP是连接的,所以服务是一对一服务,而UDP可以1对1,也可以1对多(多播),也可以多对多。
性能 | TCP | UDP |
---|---|---|
可靠性 | √ | × |
传输延迟 | 不确定 | 网络延迟(适用于实时场景) |
拥塞延迟 | √ | × |
一对一 | 一对一 / 一对多 | |
重量级协议 | 轻量级协议 | |
全双工通信,可互发数据 | 单工通信 |
4.4 UDP、TCP数据段中数据区的最大传输长度
4.4.1 UDP
UDP允许传输的最大长度理论上2^16 - udp head - ip head
( 65507 字节 = 65535 - 20 - 8)但是实际上UDP数据报的数据区最大长度为1472字节。分析如下:
首先,我们知道,TCP/IP通常被认为是一个五层协议系统,包括物理层、数据链路层、网络层、传输层、应用层。
UDP属于运输层,下面我们由下至上一步一步来看: 以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的。这个1500字节被称为链路层的MTU(最大传输单元)。但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区。 并不包括链路层的首部和尾部的18个字节。 所以,事实上,这个1500字节就是网络层IP数据报的长度限制。 因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节。而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的。 又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节。这个1472字节就是我们可以使用的字节数。
超过1500字节怎么办?
这也就是说IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation)。把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组。这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报。因此,在普通的局域网环境下,我建议将UDP的数据控制在1472字节以下为好。
进行Internet编程时则不同,因为Internet上的路由器可能会将MTU设为不同的值。如果我们假定MTU为1500来发送数据的,而途经的某个网络的MTU值小于1500字节,那么系统将会使用一系列的机制来调整MTU值,使数据报能够顺利到达目的地,这样就会做许多不必要的操作。鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时. 最好将UDP的数据长度控件在548字节(576-8-20)以内.
4.4.2 TCP
TCP 包的大小就应该是 1500 - IP头(20) - TCP头(20) = 1460 (Bytes)
.
我们在用Socket编程时,UDP协议要求包小于64K。TCP没有限定,TCP包头中就没有“包长度”字段,而完全依靠IP层去处理分帧。这就是为什么TCP常常被称作一种“流协议”的原因,开发者在使用TCP服务的时候,不必去关心数据包的大小,只需讲SOCKET看作一条数据流的入口,往里面放数据就是了,TCP协议本身会进行拥塞/流量控制。
5. 应用层
5.1 概述
应用是没有上层用户,它直接服务于用户,从TCPIP协议栈出发,从IP向上或向下都具有无限扩展的可能。
TCP/IP协议栈
应用层为模型外的用户服务,提供丰富的应用;应用层分为两大类:
- 直接的网络应用。电子邮件、Web应用、文件传输等。
- 间接的网络应用。间接网络应用依靠 重定向器(redirector)实现网络功能。Word等。
应用层用于指定数据格式规则,收到数据后进行渲染,为用户服务。常见协议:FTP协议、HTTP协议、DNS等
5.2 域名系统DNS
Domain Name System,域名系统。基于域的命名方案,且采用了分布式数据库系统来实现。
5.2.1 域名
每一次的通信总是以为发放的封装开始,收方的解封装结束,封装的主要工作就是在每层加上寻址所需要的地址,比如在网络层加上IP地址,在数据链路层加上MAC地址。DNS系统用于把域名解析为IP地址(也称映射),访问对应的计算机资源。域名又分为根域名、顶级域名、二级域名、三级域名、四级域名
5.2.2 域名服务器DNS
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dNHCBL9p-1622643564191)(images/计算机网络/域名服务器.png)]
5.2.3 域名解析过程
域名解析过程分为迭代和递归:
递归:
用户主机向本地域名服务器发送一次查询请求,本地域名服务器如果查不到,本地域名服务器就请求根域名服务器,如果仍查不到,根域名域名服务器就请求顶级域名服务器,还是查不到的话,顶级域名服务器就请求权限域名服务器;返回的过程相反。
迭代:
用户主机向本地域名服务器发送一次查询请求,首先查询本地域名服务器,如果查不到,本地域名服务器就请求根域名服务器,如果仍查不到(根域名服务器会返回它应该去哪找个顶级域名服务器),本地域名服务器就请求顶级域名服务器,还是查不到的话,本地域名服务器就请求权限域名服务器(顶级域名服务器告诉);返回的过程相反。
一般使用的是递归加迭代的方式,即主机向本地域名服务器发起的请求的采用递归查询,本地域名服务器向根域名服务器发起的请求采用迭代查询:
如果每一次都经历一次查询,就会造成大量的资源消耗,所以域名服务器采用了高速缓存技术(所有域名服务器都有的技术),下一次有对应的请求直接返回对应的数据即可。当然主机当中也存在高速缓存。高速缓存技术的缺点:有可能是错误的延时的。
5.2.4 DNS消息承载
DNS消息一般采用UDP数据段来承载,但也有两种情况例外:
- UDP报文超过512byte时,会采用TCP连接分段发送数据应答;
- 主从域名服务器之间的数据同步更新使用TCP。(数据安全,master and slaver)
5.3 电子邮件系统
5.3.1 组成结构
- 用户代理(UA):本地程序,为用户通过图形界面。
- 邮件传输代理(MTA):又称为邮件传输服务器,把消息从源端送到目的端,系统守护进程。
5.3.2 体系结构
每个头字段由一行ascii码组成,包括字段名,冒号,数据。
针对ASCII码中无法表示的数据,如视频、音频等数据,采用MMIE(the Multipurpose Internet Mail Extendsions),多用途互联网邮件扩展解决。
5.3.3 SMTP
Simple Mail Transfer Protocol,简单邮件传输协议。源机和目的机的25端口建立TCP连接,邮件不能投递就返回发送方错误报告。
5.3.4 POP3和IMAP
如果收方和发方连个MTA一直在线,那么传输是非常的安全,但用户不能一直在线,现在有一个代理MTA一直在后台接收邮件,那么用户什么时候从代理MTA中获取自己的邮件?这就使用早期的POP3协议了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HkADO4Ay-1622643564201)(images/计算机网络/POP3协议.png)]当用户启动邮件阅读器的时候,POP3(110端口)就开始工作,用户呼叫ISP,之后经历授权(登陆)、事物(收邮件+删除标记)、更新(真正删除)。用户使用POP3协议时,在某地收邮件后该邮件就会被标记为删除,那么此邮件在其他设备接收是不可行的。
之后又推出了POP3的优化版IMAP协议,弥补了POP3的这一个缺陷,IMAP(143端口)把邮件永久保存在服务器上:
5.3.5 WebMail
5.4 万维网WWW
Web由资源、统一资源定位器、通信协议HTTP构成(协议不仅仅是HTTP)。其中统一资源定位符包括:协议、服务器域名或IP地址、资源文件三部分。
WWW的传输层使用TCP,浏览器解释资源的不同方式:插件或助手程序。TCP移交缓解了前端服务器的压力。
5.4.1 FTP协议
FTP,File Transfer Protocol,文件传输协议。是一种可靠的面向连接的服务。采用TCP在支持FTP的系统间传输文件,如传输二进制文件或ascii码文件。提到FTP就不得不提到TFTP协议。
TFTP,Trivial File Transfer Protocol,面向无连接的,不可靠的服务,采用UDP在支持TFTP的系统间传输文件,如路由器备份配置文件。
FTP采用两根TCP连接:
- 一条控制TCP的连接,工作在21端口;
- 一条是数据连接,工作在20端口,传输数据,
使用双tcp好处:简单,提供终止传输,端点续传等:
5.4.3 HTTP协议
Hyper Text Transfer Protocol,超文本传输协议。HTTP是一个基于TCP/IP通信协议来传递数据,客户端、web服务器都遵循HTTP协议。
1.HTTP协议简介
2.HTTP协议特点
3.HTTP报文结构
HTTP有两类报文:请求报文和响应报文:
HTTP的请求报文和响应报文由三个部分组成:
- 请求行/状态行:用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行,在响应报文中的开始行叫做状态行;
- 首部行:用于说明浏览器,服务器或报文主体的一些信息。
- 实体主体
HTTP请求的几种类型:
GET 请求读取由URL所标志的信息
HEAD 请求读取由URL所标志的信息的首部
POST 给服务器添加信息
PUT 在指明的URL下存储一个文档
CONNECT 用于代理服务器
4.HTTP连接方式
浏览器与Web服务器之间的协议是应用层协议,当前,我们主要遵循的协议为HTTP/1.1。HTTP协议是Web开发的基础,这是一个无状态的协议,客户机与服务器之间通过请求和相应完成一次会话(Session)。
5.HTTP1.1和HTTP1.0的区别
HTTP1.0每请求一个文档就要建立TCP连接,有几次握手的时间花销,如果一个主页上有很多链接的对象需要依次进行连接,每次连接下载都要消耗这些开销。
HTTP1.1采用持续连接。所谓持续连接就是服务器在发送响应后仍然在一段时间内保持这条连接。使得后序的请求和响应报文都在这条连接上进行。
转载:https://blog.csdn.net/yeahPeng11/article/details/117486184