再谈网络协议

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 再谈网络协议

从输入url到请求结束大致的网络流程


输入域名会通过DNS, HTTPDNS解析成真正的IP地址。


有了IP地址,浏览器就开始打包它的请求。对于普通的浏览请求,往往会使用 HTTP 协议;但是对于购物的请求,往往需要进行加密传输,因而会使用 HTTPS 协议。


经过应用层封装后,浏览器会将应用层的包交给下一层去完成,通过 socket 编程来实现。下一层是传输层。传输层有两种协议,一种是无连接的协议 UDP,一种是面向连接的协议 TCP。对于支付来讲,往往使用 TCP 协议。所谓的面向连接就是,TCP 会保证这个包能够到达目的地。如果不能到达,就会重新发送,直至到达。


TCP 协议里面会有两个端口,一个是浏览器监听的端口,一个是服务器监听的端口。操作系统往往通过端口来判断,它得到的包应该给哪个进程。


传输层封装完毕后,浏览器会将包交给操作系统的网络层。网络层的协议是 IP 协议。在 IP 协议里面会有源 IP 地址,即浏览器所在机器的 IP 地址和目标 IP 地址,也即访问的服务器的 IP 地址。


操作系统启动的时候,就会被 DHCP 协议配置 IP 地址,以及默认的网关的 IP 地址 192.168.1.1。


有了IP地址,他就会通过ARP协议找到对应的MAC地址,到达网关。ARP协议即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。它可以解决同一个局域网内主机或路由器的IP地址和MAC地址的映射问题。


到达网关后,数据包就可以通过路由协议,常用的有 OSPF 和 BGP。来决定发向哪里。

(ip层到达mac层和源主机的mac如何查询目的主机的mac的过程不是很明白???)


网络异常,图片无法展示
|


然后依次去掉该层的头部,向上传递。到达TCP层。在这一层里,对于收到的每个包,都会有一个回复的包说明收到了。如果过一段时间还是没到,发送端的 TCP 层会重新发送这个包,还是上面的过程,直到有一天收到平安到达的回复。


网络异常,图片无法展示
|


从上图可以看出,并没有处理buffer的process_http(buffer),因为在process_tcp(buffer)函数处理TCP头的时候,里面就包含了源端口号和目标端口号,而是在操作系统中,一个应用程序监听一个端口号,我们process_tcp(buffer)函数会根据TCP头中的目标端口号把剩下的buffer信息交给监听该端口的应用程序去处理。


物理层


通过一些设备,将多台主机连接在同一个局域网中。


集线器


通过广播方式。一台电脑发送数据包,那么数据包会会发送到该局域网下的每台主机。

它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。


交换机


他可以记住源主机的mac地址。在下次其他主机查询这个mac时,他会自动将数据包发送给这个mac地址。所以就不需要广播了。它具有学习的能力,即就是可以记录和更新mac地址。


数据链路层解决的问题


  • 数据包是发给谁的?谁应该接收? MAC地址解决谁发送,谁接受的问题;


MAC地址格式 :【目标MAC-源MAC-类型-数据- CRC】


因为有MAC地址 ,数据包在链路上广播,MAC的网卡才能发现这个包是给它的。


网络异常,图片无法展示
|


ARP 协议,也就是已知 IP 地址,求 MAC 地址的协议。


在一个局域网里面,当知道了 IP 地址,就可以通过ARP来查出MAC地址了。


为了避免每次都用 ARP 请求,机器本地也会进行 ARP 缓存。当然机器会不断地上线下线,IP 也可能会变,所以 ARP 的 MAC 地址缓存过一段时间就会过期。


  • 大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则? 1.采用信道划分协议。 2.采用随机接入协议。 3.采用轮流协议


  • 如果发送的时候出现了错误,怎么办? CRC循环冗余检测。通过 XOR 异或的算法,来计算整个包是否在发送的过程中出现了错误。


交换机和VLAN


交换机就是转发请求到其他局域网的,并且具有学习能力。会记得包从哪里来,然后广播后,就会知道包到哪里去。在下次在发送包时,就知道包的传递方向了。


随着网络环境越来越大,交换机数目肯定越来越多。当整个拓扑结构复杂了,这么多网线,绕过来绕过去,不可避免地会出现一些意料不到的情况。其中常见的问题就是环路问题。


网络异常,图片无法展示
|


上面就会出现环路问题,交换机A,B会一直转发请求。


那么如何解决环路问题呢?


主要的思路就是将有环路的图变成没有环路的树,从而解决环路问题。


那么就需要STP:


  • Root Bridge,也就是根交换机。这个比较容易理解,可以比喻为“掌门”交换机,是某棵树的老大,是掌门,最大的大哥。


  • Designated Bridges,有的翻译为指定交换机。这个比较难理解,可以想像成一个“小弟”,对于树来说,就是一棵树的树枝。所谓“指定”的意思是,我拜谁做大哥,其他交换机通过这个交换机到达根交换机,也就相当于拜他做了大哥。这里注意是树枝,不是叶子,因为叶子往往是主机。


  • Bridge Protocol Data Units (BPDU) ,网桥协议数据单元。可以比喻为“相互比较实力”的协议。行走江湖,比的就是武功,拼的就是实力。当两个交换机碰见的时候,也就是相连的时候,就需要互相比一比内力了。BPDU 只有掌门能发,已经隶属于某个掌门的交换机只能传达掌门的指示。


  • Priority Vector,优先级向量。可以比喻为实力 (值越小越牛)。实力是啥?就是一组 ID 数目,[Root Bridge ID, Root Path Cost, Bridge ID, and Port ID]。为什么这样设计呢?这是因为要看怎么来比实力。先看 Root Bridge ID。拿出老大的 ID 看看,发现掌门一样,那就是师兄弟;再比 Root Path Cost,也即我距离我的老大的距离,也就是拿和掌门关系比,看同一个门派内谁和老大关系铁;最后比 Bridge ID,比我自己的 ID,拿自己的本事比。


如何解决广播问题和安全问题?


  • 物理隔离。每个部门设一个单独的会议室,对应到网络方面,就是每个部门有单独的交换机,配置单独的子网,这样部门之间的沟通就需要路由器了。这样的问题在于,有的部门人多,有的部门人少。人少的部门慢慢人会变多,人多的部门也可能人越变越少。如果每个部门有单独的交换机,口多了浪费,少了又不够用。


  • 虚拟隔离。就是用我们常说的 VLAN,或者叫虚拟局域网。使用 VLAN,一个交换机上会连属于多个局域网的机器。


网络异常,图片无法展示
|


那么如何知道那个机器属于哪个交换机呢?


我们只需要在原来的二层的头上加一个 TAG,里面有一个 VLAN ID,一共 12 位。如果我们买的交换机是支持 VLAN 的,当这个交换机把二层的头取下来的时候,就能够识别这个 VLAN ID。这样只有相同 VLAN 的包,才会互相转发,不同 VLAN 的包,是看不到的。这样广播问题和安全问题就都能够解决了。


两个交换机如何连接呢?


对于支持 VLAN 的交换机,有一种口叫作 Trunk 口。它可以转发属于任何 VLAN 的口。交换机之间可以通过这种口相互连接。


访问外网时候ip数据包的变化和寻路过程


两种情况:


网络异常,图片无法展示
|


网络异常,图片无法展示
|


总结:


  • 如果离开本局域网,就需要经过网关,网关是路由器的一个网口;


  • 路由器是一个三层设备,里面有如何寻找下一跳的规则;


  • 经过路由器之后 MAC 头要变,如果 IP 不变,相当于不换护照的欧洲旅游,如果 IP 变,相当于换护照的玄奘西行。


当要访问外网时候ip数据包的变化和寻路过程,有两种情况,ip经过统一的分配没有冲突,这样源ip,目的ip不用变,变得是目的mac(因为需要不断地寻路跳转到中间网关)这种网关也叫转发网关。第二种就是比较现实的情况,有ip冲突不同网段,那么就需要在公网上有一个通用认可的身份,这个身份可以转换成私有身份,关系普通护照和国内身份证。而nat就做这个身份的转换。通常公有ip运营商控制。


配置路由


由于网络世界很复杂,当一个数据包出网关后,它需要选择一个合适的道路,才可以到达目的地。


那么如何选择这条道路呢?即如何配置路由呢?


路由器就是一台网络设备,它有多张网卡。当一个入口的网络包送到路由器时,它会根据一个本地的转发信息库,来决定如何正确地转发流量。这个转发信息库通常被称为路由表


一张路由表中会有多条路由规则。每一条规则至少包含这三项信息。


  • 目的网络:这个包想去哪儿?


  • 出口设备:将包从哪个口扔出去?


  • 下一跳网关:下一个路由器的地址。


动态路由算法


  • 距离矢量路由算法。它是基于 Bellman-Ford 算法的。


这种算法的基本思路是,每个路由器都保存一个路由表,包含多行,每行对应网络中的一个路由器,每一行包含两部分信息,一个是要到目标路由器,从那条线出去,另一个是到目标路由器的距离


每个路由器都是知道全局信息的。每个路由器都知道自己和邻居之间的距离,每过几秒,每个路由器都将自己所知的到达所有的路由器的距离告知邻居,每个路由器也能从邻居那里得到相似的信息。


但是存在两个问题:


  1. 好消息传得快,坏消息传得慢。即如果一个路由器加入网络,那么他的邻居很快就会知道,然后把消息广播出去。但是如果一个路由器挂了,那么其他路由器是不知道他挂了。


  1. 每次发送的时候,要发送整个全局路由表


  • 链路状态路由算法。基于 Dijkstra 算法。 当一个路由器启动的时候,首先是发现邻居,向邻居 say hello,邻居都回复。然后计算和邻居的距离。然后将自己和邻居之间的链路状态包广播出去,发送到整个网络的每个路由器。这样每个路由器都能够收到它和邻居之间的关系的信息。因而,每个路由器都能在自己本地构建一个完整的图,然后针对这个图使用 Dijkstra 算法,找到两点之间的最短路径。


不像距离距离矢量路由协议那样,更新时发送整个路由表。链路状态路由协议只广播更新的或改变的网络拓扑,这使得更新信息更小,节省了带宽和 CPU 利用率。而且一旦一个路由器挂了,它的邻居都会广播这个消息,可以使得坏消息迅速收敛。


动态路由协议


  • 基于链路状态路由算法的 OSPF。由于主要用在数据中心内部,用于路由决策,因而称为内部网关协议(Interior Gateway Protocol,简称 IGP)。


  • 基于距离矢量路由算法的 BGP。外网的路由协议称为外网路由协议(Border Gateway Protocol,简称 BGP)。


传输层


UDP和TCP的区别


TCP面向连接,UDP面向无连接


在互通之前,面向连接的协议会先建立连接。所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。


下面的这些特点都是基于面向连接和面向无连接


TCP提供可靠交付,UDP不可靠


TCP 提供可靠交付。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。我们都知道 IP 包是没有任何可靠性保证的。但是 TCP 号称能做到那个连接维护的程序做的事情。而 UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。


TCP是面向字节流的,UDP是基于数据报的


TCP 是面向字节流的。发送的时候发的是一个流,没头没尾。IP 包可不是一个流,而是一个个的 IP 包。之所以变成了流,这也是 TCP 自己的状态维护做的事情。而 UDP 继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收。


TCP有拥塞控制,UDP没有


TCP 是可以有拥塞控制的。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点。UDP 就不会,应用让我发,我就发。


因而 TCP 其实是一个有状态服务,通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行。而 UDP 则是无状态服务。通俗地说是没脑子的,天真无邪的,发出去就发出去了。


UDP使用场景


  • 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。


  • 不需要一对一沟通,建立连接,而是可以广播的应用。


  • 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候。如果你实现的应用需要有自己的连接策略,可靠保证,时延要求,使用 UDP,然后再应用层实现这些是再好不过了。


TCP


先来介绍一下包头结构吧。


网络异常,图片无法展示
|


  • 端口号,表示数据应该发给哪个应用程序。


  • 序号。为了防止数据的乱序问题。


  • 确认序号。为了解决不丢包的问题。


  • 状态位。SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN 是结束连接等。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。


  • 窗口大小。TCP 要做流量控制,通信双方各声明一个窗口,标识自己当前能够的处理能力。TCP协议要解决的问题


  • 顺序问题 ,稳重不乱。


  • 丢包问题,承诺靠谱。


  • 连接维护,有始有终。


  • 流量控制,把握分寸。


  • 拥塞控制,知进知退。TCP 的拥塞控制主要来避免两种现象,包丢失和超时重传。


TCP的三次握手


第一次握手客户端A将标志位SYN置为1,随机产生一个值为seq=J(J的取值范围为=1234567)的数据包到服务器,客户端A进入SYN_SENT状态,等待服务端B确认;


第二次握手服务端B收到数据包后由标志位SYN=1知道客户端A请求建立连接,服务端B将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端A以确认连接请求,服务端B进入SYN_RCVD状态。


第三次握手客户端A收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务端B,服务端B检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端A和服务端B进入ESTABLISHED状态,完成三次握手,随后客户端A与服务端B之间可以开始传输数据了。


网络异常,图片无法展示
|


三次握手除了双方建立连接外,主要还是为了沟通一件事情,就是 TCP 包的序号的问题。双方需要协商发起的包的序号起始从哪个号开始的。


TCP的四次挥手


第一次挥手:  Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。


第二次挥手:  Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与- SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。


第三次挥手:  Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。


第四次挥手:  Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。


网络异常,图片无法展示
|


挥手为什么需要四次?


这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。


为什么客户端发送ACK之后不直接关闭,而是要等一阵子才关闭?


客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。如果不等待,客户端直接跑路,当服务端还有很多数据包要给客户端发,且还在路上的时候,若客户端的端口此时刚好被新的应用占用,那么就接收到了无用数据包,造成数据包混乱。


为什么TIME_WAIT状态需要经过2MSL(最大报文生存时间)才能返回到CLOSE状态?


理论上,四个报文都发送完毕,就可以直接进入CLOSE状态了,但是可能网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。 1 个 MSL 确保四次挥手中主动关闭方最后的 ACK 报文最终能达到对端。 1 个 MSL 确保对端没有收到 ACK 重传的 FIN 报文可以到达。


TCP如何实现一个靠谱的协议?


为了保证顺序性,每一个包都有一个 ID。在建立连接的时候,会商定起始的 ID 是什么,然后按照 ID 一个个发送。为了保证不丢包,对于发送的包都要进行应答,但是这个应答也不是一个一个来的,而是会应答某个之前的 ID,表示都收到了,这种模式称为累计确认或者累计应答(cumulative acknowledgment)。


发送端和接收端都需缓存这些发送的包。用来记录表。


发送端分为四个部分:


网络异常,图片无法展示
|


接收端分为三个部分


网络异常,图片无法展示
|


对于丢失的包,双发如何解决呢? 如果到达规定的时间,服务器还未发送确认的包,那么客户端就会重新发送这个包。


那么这个规定时间如何设置呢?


估计往返时间,需要 TCP 通过采样 RTT 的时间,然后进行加权平均,算出一个值,而且这个值还是要不断变化的,因为网络状况不断地变化。除了采样 RTT,还要采样 RTT 的波动范围,计算出一个估计的超时时间。由于重传时间是不断变化的,我们称为自适应重传算法(Adaptive Retransmission Algorithm)。


如果同一个包多次丢失,那么重传的时间间隔如何设置呢?


TCP 的策略是超时间隔加倍。每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁反复发送。


但是服务器也可以主动告知客户端,我丢了这个包,你立刻给我发过来,这就是快速重传机制(当接收端发现丢了一个中间包的时候,发送三次前一个包的 ACK,于是发送端就会快速地重传,不必等待超时再重传)。他不需要等待超时时间间隔以后发送,而是受到服务器的要求后,立即发送。


DNS协议


上网的人分布在全世界各地,如果大家都去同一个地方访问某一台服务器,时延将会非常大。DNS 服务器,一定要设置成高可用、高并发和分布式的。


  • 根 DNS 服务器 :返回顶级域 DNS 服务器的 IP 地址


  • 顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址


  • 权威 DNS 服务器 :返回相应主机的 IP 地址


DNS解析流程


为了提高 DNS 的解析性能,很多网络都会就近部署 DNS 缓存服务器。


DNS是树状的分布式查询系统。


  • 首先查找浏览器中时候缓存的有该域名对应的ip地址。


  • 再在本地的hosts文件中查找


  • 再去本地DNS服务器(即你家的网络服务商isp)


以上过程都没有缓存,那么它将请求根DNS服务器。


  • 查询根DNS服务器,根据一级域名返回对应的顶级域名服务器的ip地址


  • 查询顶级域名服务器,根据二级域名返回对应的权威域名服务器的ip地址


  • 根据返回的权威服务器ip地址,然后去请求,即可查询到该域名对应的ip地址。


  • 然后将其缓存在本地DNS服务器中,再将其返回给客户端。


并且这个过程也可以做负载均衡。根据服务器的压力,我们来决定返回那个服务器的ip地址。因为一个域名可以被映射出多个ip地址。


还有一个迭代解析的过程


本地DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。


CDN


网络异常,图片无法展示
|


CDN 系统的缓存,也是一层一层的,能不访问后端真正的源,就不打扰它。


一些思考题


当网络包到达一个城关的时候,可以通过路由表得到下一个城关的 IP 地址,直接通过 IP 地址找就可以了,为什么还要通过本地的 MAC 地址呢?


  1. mac地址是唯一的,为什么可以修改?想想身份证,身份证号是唯一的,不能改变的,但是可以造价。mac地址全球唯一,它是固化在网卡里的。网卡毕竟是个硬件,需要软件支持,既操作系统识别。重点来了,操作系统识别出来的mac地址是可以更改的,它只不过是一个字符串。我们常说的修改mac指的是修改电脑中记录的既注册表中的记录。


  1. 有了mac地址为什么还要有ip地址。举个例子,身份证号是你的唯一标识,不会重复,一落户就有(网卡一出厂就有mac)。现在我要和你通信(写信给你),地址用你的姓名+身份证,信能送到你手上吗?明显不能!身份证号前六位能定位你出生的县。mac地址前几位也可以定位生产厂家。但是你出生后会离开这个县(哪怕在这个县,也不能具体找到你)。所以一般写个人信息就要有出生地和现居地址了。


但是为什么还需要mac地址呢?我感觉应该是为了快速准确的找到对应的ip地址的主机位置。


因为数据包在内网中主要依靠mac地址投递。ip 地址必须在有三层设备时才有用 ,而很多内网只有交换机,工作在2层的交换机是不能识别ip地址的。


数据包上ip 地址的作用是在外网或internet 上投递用的,内网就不行了,必须要用mac。网络协议的分层和网络实体的分级管理是对应的。


私有IP地址和共有IP地址


不同的私有ip地址段中ip地址是可以重复的。


公有 IP 地址有个组织统一分配,你需要去买。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
7月前
|
网络协议 Java 网络安全
【计算机网络】—— Socket通信编程与传输协议分析
【计算机网络】—— Socket通信编程与传输协议分析
54【网络工程】Socket通信过程
【网络工程】Socket通信过程
53 0
|
7月前
|
网络协议 安全
【底层服务/编程功底系列】「网络通信体系」带你攻克网络技术之TCP协议的三次握手和四次链接的技术盲区
【底层服务/编程功底系列】「网络通信体系」带你攻克网络技术之TCP协议的三次握手和四次链接的技术盲区
63 0
|
监控 网络协议 Java
揭示网络通信的秘密:协议与套接字编程之旅
揭示网络通信的秘密:协议与套接字编程之旅
|
域名解析 消息中间件 网络协议
计算机网络复习(二) 应用层 下
计算机网络复习(二) 应用层
71 0
|
缓存 网络协议 搜索推荐
计算机网络复习(二) 应用层 上
计算机网络复习(二) 应用层
101 0
|
域名解析 网络协议 算法
Linux网络原理与编程(4)——第十四节 传输层协议
客户端认为连接已经建立成功了,所以就正常发数据。但是这个时候服务器并未建立连接,在收到数据之后,会向客户端发送一个含有RST的报文(reset),即希望客户端重新建立连接。
262 0
Linux网络原理与编程(4)——第十四节 传输层协议
|
安全 算法 网络协议
【计算机网络】再谈应用层——电子邮件相关
电子邮件信息格式 RFC 5322(最基本的格式,the Internet Message Format) 形式: to Cc(抄送) Bcc(盲抄送,对方无法得知该消息还抄送给了谁)
141 0
|
网络协议 数据库
【计算机网络】再谈应用层(一)DNS
前言 之前也曾经在专栏中写过关于应用层的内容,但那时是初学,仅仅是囫囵吞枣地过一遍,再加上是以“自顶向下”的思路,由于很多细节涉及到了更底层的知识,所以没能理解透。 现在又“自底向上”系统学了一遍
196 0