找回密码
 立即注册
首页 业界区 安全 计网(2)

计网(2)

勺缓曜 6 小时前
计网(2)

基础篇

二、从键入网址到网页显示
1.png

<ol>HTTP
键入网址后,浏览器首先解析URL,获取发送给web服务器的请求信息。
URL的组成:
2.png

例子:https://www.baidu.com:其中www.baidu.com表示百度的服务器。
web服务器文件路径:
3.png

所以URL的本质就是请求服务器里的文件资源。当没有路径名时,就表示访问根目录下事先设置的默认文件:/index.html 或者/default.html。
对URL解析获取Web服务器和文件名后,根据这些信息生成http请求报文:
4.png

DNS(ip地址查询)
浏览器解析URL生成HTTP消息后,通过操作系统将消息发送到web服务器。在发送之前。需要查询服务器域名对应的IP地址,如果每次访问需要填写具体的ip地址,难以记忆很不方便(类比手机号),所以我们通常可以将ip地址以及对应服务器保存再“通讯录中”。
所以,引入了一个专门保存web服务器与IP的对应关系的服务器,即DNS服务器。www.baidu.com 称其为域名,.代表了不同层次之间的界限。在域名中,越靠右的位置表示层级越高。实际上域名最后还有一个. ,比如 www.baidu.com. , 最后这个点代表根域名。所以域名的层级关系类似一个树状结构:
跟DNS服务器(.)
顶级域DNS服务器(.com)
权威DNS服务器(server.com)
![域名的层级关系](D:\Users\Li Tingfeng\Desktop\学习记录\计算机网络\assets\域名的层级关系.png)
根域的DNS服务器信息保存在互联网中所有的DNS服务器中,所以任何DNS服务器都可以找到并访问根域DNS服务器。
因此,客户端只要能找到任意一台DNS服务器,就可以通过它找到根域服务器,然后在一路顺藤摸瓜根服务器下的目标DNS服务器。
域名解析的工作流程:
5.png


  • 客户端首先发出一个DNS请求,询问本地域名服务器(在TCP/IP配置中指定) www.baidu.com 的IP是什么。
  • 本地服务器拿到 www.baidu.com 首先查询服务器中的缓存表是否有对应的IP地址,如果有直接返回。如果没有,本地服务器会去问根域名服务器:“老大,www.baidu.com 的ip地址是多少?”
  • 根服务器不会直接解析www.baidu.com 并存储其IP地址,这样的话根服务器的存储是很大的问题,他会找到顶级域DNS服务器 .com,并将他的ip地址告诉本地服务器:“我给你 .com顶级域名服务器的地址,你去问问他。”
  • 同样地,顶级域名服务器同样也不会直接存储IP地址,它会将权威DNS服务器的地址(www.server.com) 告诉本地服务器,让他去问他。
  • 权威域名服务器(域名解析结果的原出处,权威即它旗下的域名它做主)查询后将对应的IP地址告诉本地DNS
  • 本地DNS再将IP地址返回客户端,客户端与目标建立连接。
    域名解析就像我们生活中问路,这个过程通常只指路不带路。
    不是每次解析域名都要经过这么多步骤!浏览器、操作系统、本地host文件、本地DNS服务器中都有存储IP地址的缓存,如果在缓存中找到了对应的IP地址,都会直接返回。
    在通过DNS找到对应的ip地址后,上文提到操作系统会帮助我们发送请求到web服务器。
协议栈(操作系统发送HTTP的帮手)
协议栈的内部分为几个部分,分别承担不同的工作。上下关系有一定的规则,上面的部分会向下面的部分委托工作。
6.png

应用程序通过Socket库来调用协议栈来工作。在操作系统层面,协议栈的工作主要有两方面:一是负责数据收发的TCP与UDP协议,这俩协议会接受应用层的收发委托操作。二是IP协议控制网络包的收发操作,其中IP协议中包含了ICMP协议和ARP协议。
  1. ICMP协议:用于告知网络包传输过程中产生的错误以及各种控制信息
  2. ARP协议:根据IP地址查询对应的以太网MAC地址
复制代码
实际的收发操作是网线中的信号执行的。
可以看到协议栈的工作流程严格遵守TCP/IP网络模型的四层结构。
TCP——可靠的传输
HTTP是基于TCP协议传输的。TCP报文头部的格式:
7.png


源端口号与目的端口号:指明数据来自谁与数据发给谁
序号:包的序号,防止包乱序
确认序列:确认发出去后对方是否收到,如果没有收到就重新发送,直到送达,解决了丢包的问题。
状态位:例如:SYN是发起一个连接,ACK是回复,RST是重新连接,FIN是结束连接等。TCP是面向连接的,因而双方要维护连接的状态,带状态位的包的发送,会引起双方状态的变更。
窗口大小:用来实现流量控制,通信双发各声明一个窗口(缓存大小),标识自己的处理能能力。“发送的太快,会撑死,发送的太慢,会饿死。”
TCP还提供拥塞控制,在报文头部没有体现。它是通过发送端和接收端的协议栈维护的状态变量与算法实现。但是要利用报文中的ACK,丢包等信息来实现。
例子:TCP 序号与确认序列解决乱序与丢包的例子

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册