概述
数据通信中(浏览网页),数据包的传输过程?
●用户A浏览网页产生点击网页链接操作或输入网址,按回车键。
●浏览器识别到用户的点击操作,读取URL(协议名://域名:端口号/文件位置及名字),提取域名,向本地DNS服务器请求查找该域名对应的IP地址(UDP,端口53)。
构建一个DNS包:
①客户端数据封装:
●应用层:DNS头部|DATE
●传输层:UDP头部|DNS数据流
(源端口:随机端口|目的端口:53)
UDP协议分为首部字段和数据字段,其中首部字段只占用8个字节,分别是个占用两个字节的源端口、目的端口、长度和检验和。
●网络层:IP首部|UDP数据段
(源IP:主机IP|目的IP:本地DNS服务器IP)
IP地址的获取:静态配置、DHCP
①DHCP Discover
DHCP Discover报文封装:
①应用层:DHCP 头部|DHCP 数据
②传输层:UDP 头部|应用层数据
(源端口:68|目的端口:67)
③网络层:IP头部|传输层数据
(源IP:0.0.0.0|目的IP:255.255.255.255)
④数据链路层:以太网数据帧封装|网络层数据
(源MAC:主机MAC|目的MAC:FF:FF:FF:FF:FF:FF)
DHCP数据传输过程:
①二层交换机:加上VLAN Tag,学习、查找、转发
②三层交换机:DHCP中继
解封装过程:数据链路层,目的MAC:FF:FF:FF:FF:FF:FF
网络层,目的IP:255.255.255.255
SVI接口——
传输层:目的端口:67,根据目标端口发现这是一个DHCP报文,未开启DHCP服务,不往上层拆封。配置了DHCP 中继,进行中继处理。
封装过程:
传输层:源端口:67|目的端口:67|未拆封的应用层数据
网络层:源IP:网关IP|目的IP:配置的DHCP服务器IP|传输层数据
数据链路层:源MAC:出接口MAC|目的MAC:下一跳MAC| 网络层数据
③路由转发:查找、转发
④DHCP 服务器:
②DHCP Offer
③DHCP Request
DHCP服务器收到客户端的DHCP Request后,会ping一下要分配的IP地址,有回应,则返回客户端一个DHCP NAK
④DHCP ACK
客户端收到DHCP服务器的DHCP ACK后,会发送一个应答型免费ARP,收到回应,则给服务器返回一个DHCP Decline
●数据链路层:数据链路层数据封装头部|IP数据包
(源MAC:主机MAC|目的MAC:网关MAC)
网关MAC未知:ARP解析过程
首先PC查找自己的ARP缓存表,找不到,触发ARP请求,
ARP封装:数据链路层:源MAC:自己主机MAC|目的MAC:FF:FF:FF:FF:FF:FF|ARP数据(包含自己主机IP地址、MAC 地址,请求主机的IP地址)
二层交换机:物理层:
数据链路层:——>VLAN Tag——>学习源MAC、查找MAC表、转发帧
三层交换机:数据链路层:目的MAC是FF:FF:FF:FF:FF:FF
网络层:目的IP是自己的IP,将主机的MAC—IP映射加入ARP表中返回一个ARP响应
无故ARP:
代理ARP:
●物理层:数据帧转换为比特流传输
②数据传输过程:
●二层交换机:
数据链路层:学习、查找、转发
二层交换机工作过程:
①交换机收到一个数据帧后,首先检查该数据帧的源MAC地址,如果MAC表中有该MAC地址—交换机端口映射条目,刷新该条目。有该MAC条目,但是该条目映射的端口与接收端口不一样,更新该映射条目。没有该MAC条目,学习添加该MAC地址—端口映射。
②交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。
③如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)。广播帧和组播帧向所有的端口转发。
●三层交换机:二层交换机:数据链路层:目的MAC是自己的接口MAC
SVI接口
路由器:网络层:目的IP:客户端的本地域名服务器IP,查找路由表
封装:数据链路层:源MAC:出接口MAC|目的MAC:下一跳MAC
●分部路由器:数据链路层:目的MAC是自己的MAC
网络层:目的IP是客户端本地DNS服务器IP,查找路由表
封装:数据链路层:PPPOE协议——PPPOE封装|网络层数据
PPPOE拨号上网过程:
PPPOE发现阶段:
1.1 PADI(PPPoE Active Discovery Initiation)
主机广播发起分组,分组的目的地址为以太网的广播地址 0xffffffffffff,CODE(代码)字段值为0×09(PADI Code),SESSION-ID(会话ID)字段值为0x0000。PADI分组必须至少包含一个服务名称类型的标签(Service Name Tag,字段值为0x0101),向接入集中器提出所要求提供的服务。
1.2 PADO(PPPoE Active Discovery Offer)
接入集中器收到在服务范围内的PADI分组,发送PPPoE有效发现提供包分组,以响应请求。其中CODE字段值为0×07(PADO Code),SESSION-ID字段值仍为0x0000。PADO分组必须包含一个接入集中器名称类型的标签(Access Concentrator Name Tag,字段值为0x0102),以及一个或多个服务名称类型标签,表明可向主机提供的服务种类。PADO和PADI的Host-Uniq Tag值相同。
1.3 PADR(PPPoE Active Discovery Request)
主机在可能收到的多个PADO分组中选择一个合适的PADO分组,然后向所选择的接入集中器发送PPPoE有效发现请求分组。其中CODE字段为0x19(PADR Code),SESSION_ID字段值仍为0x0000。PADR分组必须包含一个服务名称类型标签,确定向接入集线器(或交换机)请求的服务种类。当主机在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。
1.4 PADS(PPPoE Active Discovery Session-confirmation)
接入集中器收到PADR分组后准备开始PPP会话,它发送一个PPPoE有效发现会话确认PADS分组。其中CODE字段值为0×65(PADS Code),SESSION-ID字段值为接入集中器所产生的一个惟一的PPPoE会话标识号码。PADS分组也必须包含一个接入集中器名称类型的标签以确认向主机提供的服务。当主机收到PADS 分组确认后,双方就进入PPP会话阶段。PADS和PADR的Host-Uniq Tag值相同。
PPPOE会话阶段:
① LCP协商阶段(LCP:Link Control Protocol)
协商双方互相发送一个LCP Config-Request报文,确认收到的Config-Request报文中的协商选项,根据这些选项的支持与接受情况,做出适当的回应。若两端都回应了Config-ACK,则标志LCP链路建立成功,否则会继续发送Request报文,直到对端回应了ACK报文为止。
②认证阶段(PPP Authentication:PAP/CHAP)
会话双方通过LCP协商好的认证方法进行认证,如果认证通过了,才可以进行下面的网络层的协商。认证过程在链路协商结束后就进行。
I、PAP(Password Authentication Protocol,口令认证协议)认证
PAP为两次握手协议,它通过用户名及口令来对用户进行验证。PAP验证过程如下:
当两端链路可相互传输数据时,被验证方发送本端的用户名及口令到验证方,验证方根据本端的用户表(或Radius服务器)查看是否有此用户,口令是否正确。如正确则会给对端发送Authenticate-ACK报文,通告对端已被允许进入下一阶段协商;否则发送NAK报文,通告对端验证失败。此时,并不会直接将链路关闭。只有当验证不过次数达到一定值(缺省为10)时,才会关闭链路。
PAP的特点是在网络上以明文的方式传递用户名及口令,如在传输过程中被截获,便有可能对网络安全造成极大的威胁。因此,它适用于对网络安全要求相对较低的环境。
II、 CHAP(Challenge Handshake Authentication Protocol,质询握手认证协议)认证
CHAP为三次握手协议。只在网络上传输用户名,并不传输用户口令,因此它的安全性要比PAP高。CHAP的验证过程为:
首先由验证方(Server)向被验证方(Client)发送一些随机产生的报文,并同时将本端的主机名附带上一起发送给被验证方。被验证方接到对端对本端的验证请求(Challenge)时,便根据此报文中验证方的主机名和本端的用户表查找用户口令字,如找到用户表中与验证方主机名相同的用户,便利用报文ID、此用户的密钥用Md5算法生成应答(Response),随后将应答和自己的主机名送回。验证方接到此应答后,用报文ID、本方保留的口令字(密钥)和随机报文用Md5算法得出结果,与被验证方应答比较,根据比较结果返回相应的结果(ACK or NAK)
(1)接受认证端发送Challenge
(2)申请认证端发验证请求报文
(3)接受认证端回应认证接受报文
经过以上三次报文交互后,CHAP认证完成。
③NCP协商阶段(NCP:Network Control Protocol)
④会话维持(Session Keep-alive)
⑤会话结束(Session Termination)
●总部路由器:数据链路层:PPPOE协议
网络层:ACL、动态PAT
动态PAT转换过程:主机IP+源端口号——转换的公网IP+转换的随机端口号(?)
●本地DNS服务器:数据链路层:
网络层:目的IP是自己的IP
传输层:源端口号:转换的随机端口号|目的端口号:53
应用层:识别客户端查询的域名
●本地DNS服务器收到请求后,先查找自己缓存列表,查找到对应域名,则返回客户端请求域名IP地址。查找不到,则开始递归查询或迭代查询(递归查询:DNS服务器作为DNS客户端向其他DNS服务器发送查询解析请求。迭代查询:DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址)。
递归查询过程:
①主机向负责自己的本地 DNS 发送查询报文,如果本地服务器缓存中有,将直接返回结果
②本地服务器发现缓存中没有,于是从内置在内部的根服务器列表中选一个发送查询报文
③根服务器解析一下后缀名,告诉本地服务器负责 .com 的所有顶级服务器列表
④本地服务器选择一个顶级域服务器继续查询,.com 域服务器拿到域名后继续解析,返回负责 .xx 域的所有权威服务器列表
⑥本地服务器从返回的权威服务器之一再次发送查询报文,最终会从某一个权威服务器上得到具的IP 地址
⑧向主机返回结果
迭代查询过程:
●浏览器获得该域名对应IP地址。向此服务器对应端口发起TCP三次握手连接请求。
TCP三次握手过程:
TCP6个标志位:
●URG - 紧急
●ACK - 应答
●PUSH - 推送; 数据包立即发送
● RST - 复位;中断一个连接
● SYN - 同步; 表示开始会话请求
●FIN - 结束; 结束会话
①客户端向服务端发送一份特殊的 TCP 报文,该报文并不包含应用层的数据,是一份特殊的报文,它 的 TCP 首部中 SYN 字段值为 1 (参见上述报文格式)。
除此之外,客户端还会随机生成一个初始序号,填在报文的「序号」字段,代表当前报文的序号是这 个,并且我后续的分组会基于这个序号递增。
然后该报文将会经网络层、链路层、物理层发送到服务端。
如果分组丢失了,那么客户端会经过某个时间间隔再次尝试发送。
②而如果分组准确的到达服务端了,服务端拆开 TCP 首部会看到,这是一个特殊的 SYN 握手报文,于 是为此次连接分配缓存等资源。
接着服务端开始构建响应报文,SYN 是一个用于同步需要的字段,响应报文中依然会被置为 1,并且 服务端也将随机生成一个初始序号放置的响应报文的序号字段中。
最后,服务端还会为响应报文中的确认字段赋值,这个值就是客户端发过来的那个序号值加一。
整体上的意思就是说,「我同意你的连接请求,我的初始序号为 xxx,你的初始序号我收到了,我等 着你的下一个分组到来」
③客户端收到服务端的响应报文,于是分配客户端 TCP 连接所必须的缓存等资源,于是连接已经建立。
实际上从第三步开始,客户端就可以携带应用层数据向服务端交换报文了,以后的每份报文中,SYN 都 为 0,因为它只是用于同步初始序号的,这一点需要明确。
●TCP三次握手连接完成,客户端向服务器端发送GET请求;
●服务器端收到客户端的GET请求,响应。
HTTP响应状态码:
1xx:通知
2xx:成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误
●浏览器收到服务器端返回的响应后,解析,显示在终端显示屏上;
●文件传输完成后,进行TCP四次挥手:
TCP四次挥手过程:
①客户端构建一份特殊的 TCP 报文,该报文首部字段 FIN 被置为 1,然后发送该报文。
②服务端收到该特殊的 FIN 报文,于是响应客户端一个 ACK 报文,告诉客户端,请求关闭的报文已经收到,我正在处理。ACK置1。
③服务端发送一个 FIN 报文,告诉客户端,我将要关闭连接了。ACK、FIN置1。
④客户端返回一个 ACK 响应报文,告诉服务端,我收到你刚才发的报文了,我已经确认,你可以关闭连接了。
当服务端收到客户端发送的 ACK 响应报文时,将释放服务端用于该 TCP 连接的所有资源,与此同时,客户端也会定时等待一定时间后完全释放自己用于该连接的相关资源。
最后
以上就是无奈嚓茶为你收集整理的学习笔记——HTTP上网过程详解的全部内容,希望文章能够帮你解决学习笔记——HTTP上网过程详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复