OSI,TCP/IP,五层协议的体系结构,以及各层协议
IP (网络之间互联的协议) 你知道IP数据报的格式吗? IP地址分为哪几类?简单说一下各个分类 ARP(地址解析协议) ARP是地址解析协议,简单解释一下工作原理。
TCP(传输控制协议) TCP协议如何保障传输的可靠性 TCP了解吗,说一下滑动窗口 TCP的拥塞控制怎么实现的 讲讲TCP握手的三次流程 讲讲TCP的四次挥手过程 TCP四次挥手的原因 为什么建立连接协议是三次握手,而关闭连接是四次挥手? UDP(用户数据报协议) TCP和UDP的区别和联系 TCP和UDP分别对应的常见端口以及应用层协议
HTTP(超文本传输协议) HTTP协议包括哪些请求? 简述HTTP中GET和POST区别 常见的HTTP状态码 HTTPS(超文本传输安全协议) HTTP和HTTPS的区别 DNS 域名解析过程 DNS域名系统,简单描述工作原理
对称加密和非对称加密 数字签名
OSI,TCP/IP,五层协议的体系结构,以及各层协议 OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用程序 TCP/IP分层(4层):网络接口层、网际层、运输层、应用层 五层协议(5层):物理层、数据链路层、网络成、传输层、应用层 每一层的作用: 物理层: 通过媒介传输比特,确定机械及电气规范(比特Bit) 数据链路层: 将比特组装成帧和点到点的传递(帧Frame) 网络层: 负责数据包从源到宿的传递和网际互联(包Packet) 传输层: 提供端到端的可靠报文传递和错误恢复(段Segment) 会话层: 建立、管理和终止会话(会话协议数据单元SPDU) 表示层: 对数据进行翻译、加密和压缩(表示协议数据单元PPDU) 应用层: 允许访问OSI环境的手段(应用层协议数据单元APDU) 每一层的协议如下: 物理层:RJ45、CLOCK、IEEE802.3(中继器,集线器,网关) 数据链路层:PPP、FR、HDLC、VLAN、MAC(网桥、交换机) 网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器) 传输层:TCP、UDP、SPX 会话层:NFS、SQL、NETBIOS、RPC 表示层:JPEG、MPEG、ASSII 应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
IP地址 是分配给用户上网使用的网际协议的设备数字标签。常见的IP地址分为IPv4和IPv6。 你知道IP数据报的格式吗
版本:有4(IPv4)和6(IPv6)两个值首部长度:占4位,因此最大值15。值为1表示1个32位的长度,也就是4个字节。因为首部长度固定长度为20字节,因此该值最小为5,。如果可选字段的长度不是4字节的整数倍,就用尾部的填充部分来填充。区分服务:用来获得更好的服务,一般情况下不使用。总长度:包括首部长度和数据部分长度。生存时间:TTL,防止数据报兜圈子, 当TTL为0时就丢弃这个数据报。协议:指出携带的数据应该给那个协议进行处理,例如ICMP、TCP、UDP首部检验和:因为数据报每经过一个路由器,都需要重新计算检验和,因此检验和不包含数据部分可以减轻计算的工作量。标识:在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。片偏移:和标识符一起,用于发生分片的情况。片偏移的单位为8字节。 IP地址分为哪几类?简单说一下各个分类 由两部分组成,网络号和主机号,其中不同分类具有不用的网络号和主机号,并且长度固定。 IP地址::={<网络号>,<主机号>} IP地址分为5类:A类、B类、C类、D类和E类,如下图所示: IP地址的指派范围 一般不使用的特殊IP地址: ARP(地址解析协议) ARP是地址解析协议,简单语言解释一下工作原理ARP实现由IP地址得到MAC地址
1:首先,每个主机都会在自己的ARP缓冲区建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。 2:当源主机要发送数据报时,有限检查ARP列表中是否有对应IP地址的目标主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目标主机的IP地址。 3:当本网络中的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包;如果是,则首先从数据包中回去源主机的IP和MAC地址写入ARP列表中,如果已存在,则覆盖,然后将自己的MAC地址写入ARP相应包中,告诉源主机自己是它想找的MAC地址。 4:源主机收到ARP响应包之后,讲目标主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。 广播发送ARP请求,单播发送ARP响应。
TCP(传输控制协议) TCP是一种面向连接的、可靠的、基于字节流的传输层通讯协议。 TCP协议如何保证传输的可靠性
数据包校验:目的是检测数据在传输过程中的任何变化,若数据包出错,则丢弃报文段且不给出响应,这时TCP发送数据端超时后会重发数据;对失序数据包重排序:既然TCP报文段多为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排列,然后再交给应用层;丢弃重复数据:对于重复数据,能够丢弃重复数据;应答机制:当TCP收到发自TCP连接的另一端数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;超时重传:当TCP发出一个段后,他将启动一个定时器,等待目的端的确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;流量控制:TCP连接的每一方都有固定大小的缓冲区域。TCP的接收端只允许另一端发送接收端缓冲区能够接纳的数据,这样可以防止较快主机导致较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动串口协议。TCP了解吗,说一下滑动窗口 窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过TCP报文中的窗口字段告诉发送方自己窗口的大小,发送方根据这个值和其他信息设置自己的窗口大小。
发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送串口左部的字节已经发送并且收到确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。 TCP的拥塞控制是怎么实现的 计算机网网络中的带宽、交换节点中的缓存以及处理机等都是网络资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞。拥塞控制就是防止过多的数据注入网络中,这样可以使用网络的路由器或链路不至于过载。 注意,拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点点对点的通信量控制。拥塞控制的方法主要有一下四种:A、慢启动 B、拥塞避免 C、快重传 D、快恢复 慢启动与拥塞避免 慢启动: 一开始先探测一下网络的拥塞程度,也就是从小到大逐渐增加拥塞窗口的大小,窗口大小指数增长。 拥塞避免: 让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞狂口cwnd加1,拥塞窗口线性增长。 快重传与快恢复 快重传: 快重传要求接收方在收到一个失序的报文段之后就立即发出重复确认(为的是是发送方及早直到有报文段没有用到达对方)而不是等自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到单个重复确认就应到立即重传对方尚未收到的报文段,而不必等设置的重传计时器时间到期。 快恢复: 快重传配合使用快恢复算法,当发送方连续收到三个重复的确认时,就执行“乘法减小”算法,把ssthresh门限减半,但接下来不执行慢开始算法:因为如果网络出现拥塞的话就不会收到三个重复确认,所以发送方现在可以认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。 TCP拥塞控制的流程图 讲讲TCP握手的三次顺序 SYN:同步SYN,在连接建立使用来同步序号。SYN置1表示一个连接请求或连接接受请求。 ACK:确认,仅当ACK=1时确认号字段才有效。TCP规定,在连接建立后所有的报文段都必须把ACK置1。 seq:序号 ack:确认号
最初两端的TCP进程都处于CLOSE状态。上图中A主动打开连接,B被动打开连接。B打开连接后就处于LISTEN,等待客户机的连接请求。A向B发送请求报文,SYN=1,ACK=0,选择一个初始序号seq=x。B收到连接请求报文,如果同意建立连接,则向A发送连接确认报文,SYN=1,ACK=1,确认号ack=x+1,同事也选择一个初始的序号seq=y。A收到B的连接确认报文后,还要向B发出确认,确认号ack=y+1,序号为seq=x+1.B收到A的确认后,连接建立。 讲讲TCP的四次挥手过程数据传输结束后,通信的双发都可释放连接。 此处为A的应用进程先向其TCP发出连接释放报文段,但A结束TCP连接的时间要比B晚一些。
FIN:终止FINs,用来释放一个连接。当FIN=1时,表示此报文段的发送方的数据已经发送完毕,并要求释放运输连接。
一下不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论ACK,因为ACK在连接建立后都为1。
A发送连接释放报文,FIN=1。B收到之后发送确认,此时TCP属于半关闭状态,B能向A发送数据单A不能向B发送数据。当B不需要连接时,发送连接释放报文,FIN=1。A收到后发出确认,进入TIME-WAIT状态,等待2MSL(最大报文存活时间)后释放连接。B收到A的确认之后释放连接。 TCP四次挥手的原因 CLOSE-WAIT 客户端发送了FIN连接释放请求之后,服务器收到了这个报文,就进入了CLOSE-WAIT状态。这个状态是为了让服务器发送还未床送完毕的数据,传送完毕之后,服务器会发送FIN连接释放报文。 TIME-WAIT 客户端接收到服务器端的FIN报文之后进入此状态,此时并不是直接君如CLOSE状态,还需要等待一个时间计时器设置时间2MSL。为什么A在TMIE-WAIT状态必须等2MSL的时间呢?
这么做有两个理由:
为了保证A发送的最后一个ACK报文能够送达B A发送的这个ACK报文可能丢失,如果B没有收到A发送的确认报文,那么B就会重新发送FIN=1的释放请求报文,A等待一段时间就是为了处理这个报文。防止“已经失效的连接请求报文”出现在本连接中 A在发送完最后一个ACK报文段后,再经过2MSL,就可以使得本链接的时间内所产生的的所有报文段都从网络中小时。这样下一个新的连接中就不会出现这种就得连接请求报文。 为什么建立连接是三次握手,而关闭连接是四次挥手呢? 这是因为服务端的LISTEN状态下SOCKET当收到SYN报文连接请求后,他可以把ACK和SYN放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知后,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上关闭SOCKET,也就是你可能还需要发送一些数据给对方之后,在发送FIN报文给对方来表示你同意现在可以关闭连接了,所以他这里的ACK报文和FIN报文多数情况下都是分开发送的。 为什么要三次握手呢?主要是为了信息对等和防止出现请求超时导致脏连接1。 第一是为了保证两台机器信息对等,确保两台机器都没有什么问题: 只有三次握手之后才能够保证两台服务器都完全没有问题,各自具备发报和收报能力。 第二是防止出现请求超时导致脏连接,看下面这张图: 为什么会出现脏连接?因为TTL 网络报文的生存时间往往都会超 TCP 请求超时时间,如果两次握手就可以创建连接 ,传输数据并释放连接后,第一个超时的连接请求才到达 B 机器的话,B 机器会以为是 A 创建新连接的请求,然后确认同意创建连接。因为 A 机器的状态不是 SYN_SENT ,所以直接丢弃了 B 的确认数据 ,以致最后只是 B 机器单方面创建连接完毕。三次握手就可以解决这个问题,因为需要 A 服务器确认了才真正的建立了连接。
UPD(用户数据协议) 在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)
TCP和UDP的区别和联系
TCP面向连接,传输数据之前需要建立会话。UDP是无连接的。TCP提供可靠传输,保证数据不丢包、不重复且按顺序到达;UDP置精良努力交付,不保证可靠交付。TCP提供拥塞控制;UDP不提供。TCP面向字节流;UDP面向报文。TCP只支持点到点的通信;UDP支持一对一、一对多、多对多的交互通信。TCP首部开销大有20字节;UDP首部开销小8字节。UDP首部格式 TCP首部格式 TCP和UDP分别对应的常见的端口以及应用层协议 TCP对应的应用程序协议 FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。 Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。 SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。 POP3:它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。 HTTP:从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的应用层协议 DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。 SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。 TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口69上使用UDP服务。
HTTP(超文本传输协议) HTTP协议定义了浏览器(即互联网客户进程)怎样向万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的应用层协议,它是万维网能够可靠的交付文件的重要基础。
HTTP构建在TCP/IP协议之上,默认端口号80HTTP是无连接状态的HTTP协议包括哪些请求? HTTP协议中共定义了八种方法或者叫“动作”来表明Resquest-URL指定的资源的不同操作方式,具体介绍如下:
GET:向特定的资源发出请求。POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建或已有资源的修改。OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送‘*’的请求来测试服务器的功能性。HEAD:向服务器索要与GET请求相一致的响应,只不过响应体不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。PUT:向指定资源位置上传其最新内容。DELETE:请求服务器删除Request-URL所标识的资源。TRACE:回显服务器收到的请求,主要用于测试或诊断。CONNECT:HTTP/1.1协议中预留给能够连接改为管道方式的代理服务器。 虽然HTTP的请求方式有8中,但我们在实际应用中常用的也就get和post,其它请求方式也都可以通过这两种方式间接实现。简述HTTP中GET和POST的区别 GET与POST是我们常用的两种HTTP Method,二者之间的区别主要包括如下五个方面:
(1). 从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源;
(2). 从REST服务角度上说,GET是幂等的,即读取同一个资源,总是得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变;
(3). 从请求参数形式上看,GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。
(4). 就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。
(5). 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。
常见的HTTP状态码 状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 1xx:指示信息–表示请求已接收,继续处理 2xx:成功–表示请求已被成功接收、理解、接受 3xx:重定向–要完成请求必须进行更进一步的操作 4xx:客户端错误–请求有语法错误或请求无法实现 5xx:服务器端错误–服务器未能实现合法的请求
常见状态代码、状态描述、说明: 200 OK //客户端请求成功 400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden //服务器收到请求,但是拒绝提供服务 404 Not Found //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
HTTPS(超文本传输安全协议) 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
Http和Https的区别 Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL()上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。二者之间存在如下不同:
端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443; 资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源; 开销:Https通信需要证书,而证书一般需要向认证机构购买; Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。
DNS DNS是一中用于TCP/IP应用程序的分布式数据库,它提供域名到IP地址的转换。
域名的解析过程 详见:https://blog.csdn.net/Lammonpeter/article/details/81358387
DNS域名系统,简单描述其工作原理。 当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53 。该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。
客户机向其本地域名服务器发出DNS请求报文本地域名服务器收到请求后,查询本地缓存,假设没有该记录,则以DNS客户的身份向根域名服务器发出解析请求根域名服务器收到请求后,判断该域名所属域,将对应的顶级域名服务器的IP地址返回给本地域名服务器本地域名服务器向顶级域名服务器发出解析请求报文顶级域名服务器收到请求后,将所对应的授权域名服务器的IP地址返回给本地域名服务器本地域名服务器向授权域名服务器发起解析请求报文授权域名服务器收到请求后,将查询结果返回给本地域名服务器本地域名服务器将查询结果保存到本地缓存,同时返回给客户机对称加密与非对称加密 对称密钥加密,又称私钥加密,即信息的发送方和接收方用同一个密钥去加密和解密数据。
它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难且较为不安全。进行一对一的双向保密通信。常见的对称加密算法:DES,AES等。 非对称密钥加密,又称公钥加密,它需要使用一对密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。从功能角度而言非对称加密比对称加密功能强大且较为安全,但加密和解密速度却比对称密钥加密慢得多。 多对一的单向保密通信。 最常用的非对称加密算法:RSA
数字签名 数字签名必须保证实现以下三点功能:
报文鉴别。即接受者能够核实发送者对报文的签名。报文的完整性。即接受者确信所收到的数据和发送者发送的完全一样而没有被篡改过。不可否认。发送者事后不能抵赖对报文的签名。 该图只是进行了数字签名并没有对报文进行加密。 数字签名过程:A用私钥SKA对明文X进行D运算签名成为密文DSKA,B用A的公钥PKA对密文DSKA进行E运算还原出明文X。那么这个过程是如何满足报文鉴别、报文的完整性、不可否认三个特点的呢?
只有A拥有私钥SKA,只有他能生成密文DSKA,所以只要B用A的公钥能成功还原出可读的明文X就说明密文DSKA一定是A发来的。这里体现出报文的鉴别的特点。同理如果中途密文DSKA被篡改,那么篡改者没有A的私钥SKA来对篡改过后的报文进行加密,那么B对被篡改过的报文进行解密时就会得到不可读的明文,就知道收到的报文被修改过了。这里体现了报文的完整性的特点。若A抵赖曾发过该报文给B,B可把X和密文DSKA出示给进行公证的第三者,第三者很容易用PKA去证实A确实发送了X给B。这里体现了不可否认的特点。 具有保密性的数字签名图解:cookie和session区别? Cookie和Session都是客户端与服务器之间保持状态的解决方案,具体来说,cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。 应用场景 日常登录一个网站,今天输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。 session的一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息,这里就用到了session。 Session 与 Cookie 的对比 实现机制:Session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID;
大小限制:Cookie有大小限制并且浏览器对每个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;
安全性:Cookie存在安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击,而Session由于保存在服务器端,相对更加安全;
服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
存放位置:cookie数据存放在客户的浏览器上,session数据放在服务器上。
在浏览器中输入www.baidu.com后执行的全部过程 客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。
牛客网由于访问客户量的增长,原来的服务器不足以维持请求,经常发生宕机的突发情况,因此为了解决这个问题,CEO决定新增加几台服务器,那么问题是这些接入WEB服务器第一次被访问到时,不同协议的发生顺序是下面中的(ARP -> DNS -> HTTP)。
当你给WEB服务器接上网线的时候,它会自动发送一条ARP信息,使得接入网关能找的到它;网关上会形成一条MAC地址到IP地址的映射记录。如用户在浏览器中输入域名,如本地DNS缓存中没有,必然会进行一次DNS查询,以确定该域名的IP地址。获得DNS对应的IP地址以后,使用HTTP协议访问web服务器(不考虑TCP三次握手建立连接的阶段)。
https://www.cnblogs.com/jamaler/p/12164921.html ↩︎