小林coding的笔记——图解网络(二)

本文详细介绍了从输入URL到网页显示的整个过程,涉及HTTP请求、DNS域名解析、TCP/IP协议栈及TCP的三次握手。首先,浏览器解析URL生成HTTP请求,然后通过DNS查找服务器IP,接着TCP协议确保数据可靠传输,包括端口号、序列号、确认号以及流量控制。最后,TCP通过三次握手建立连接,分割数据进行传输,确保数据安全到达。
摘要由CSDN通过智能技术生成

从键入网址到网页显示,期间发生了什么?

小林coding 图解网络

HTTP

浏览器先对输入的URL进行解析,从而生成发送给Web服务器的请求信息。

http: 协议名称

//表示服务器的名称

web服务器

/目录名/… 文件名 表示数据源(文件)的路径名

http://www.server.com/dir1/file1/html
server 服务器下 /dir1/file1.html
如果没有设置默认文件 就是访问 /index.html或者/default.html这些文件
对URL进行解析,确定web服务器和文件名,就可以通过这些信息生成HTTP请求信息了。

DNS

浏览器通过解析URL并生成HTTP消息后,委托操作系统将消息发送给web服务器。

发送之前需要查询服务器域名对应的IP地址 因为委托操作系统发送消息时,必须提供IP地址

IP地址很难记 所以一般都用域名 就跟通讯录里都存姓名一样

域名层级关系

域名中越靠后的层级越高

www.server.com .根域最顶级 之后是.com 之后是server.com

根域的DNS服务器信息保存在互联网中所有的DNS服务器中

所以客户端只要找到任意一台DNS服务器,就可以通过它找到根域DNS服务器,然后再一路顺藤摸瓜找到位于下层的某台目标DNS服务器

域名解析工作流程

  1. 客户端首先发现DNS请求,问www.server.com的IP是啥,并发给本地DNS服务器(也就是客户端TCP/IP设置中填写的DNS服务器地址)
  2. 本地域名服务器收到客户端的请求后,如果缓存里能找到,则直接返回IP地址。否则本地DNS会问它的根域名服务器,根域名服务器是最高层次,不能进行域名解析,但可以指明一条道路。
  3. 根DNS收到本地DNS请求后发现最后面是.com 说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
  4. 本地域名DNS收到顶级域名服务器地址后,会向.com发送请求,可以告诉我www.server.com的地址嘛
  5. 之后它继续把负责server.com的权威DNS服务器的地址给你
  6. 之后本地去问权威服务器 之后server.com权威服务器告诉你对应的IP地址
  7. 本地DNS再将IP地址返回客户端,客户端就可以和目标建立连接

DNS域名解析都是只指路,不带路

浏览器层次、操作系统层次、host文档层次 都没有才会去问

host文档(域名解析文档) 将主机名映射到IP地址的一个纯文本文件

协议栈

DNS获取IP后,就可以把HTTP的传输工作,交给操作系统的协议栈

小林coding原图

协议栈的上半部分 是负责收发数据的TCP UDP 协议 他们会接受应用层的委托来执行收发数据的操作

协议栈的下面一半是用IP协议控制网络包收发操作,在互联网上传数据时,数据包会被切分成一块块的网络包,而将网络包发送给对面的操作就是由IP负责的。

IP中还包含ICMP和ARP协议

ICMP用于告知网络包传送过程中产生的错误以及错误信息。
ARP用于根据IP地址查询对应的以太网MAC地址

IP下面的网卡驱动程序负责控制网卡硬件 最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作

可靠传输 —— TCP

HTTP是基于TCP协议传输的,

小林coding原图

源端口号和目标端口号是必不可少的,如果没有这俩端口号,数据就不知道应该发给哪个应用。

包的序号用来解决包乱序的问题

还有的是确认号 确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决不丢包的问题。

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

窗口大小是为了更好地做流量控制,通信双方各声明一个窗口,标明自己当前能处理的能力,不要发送的太快也不要太慢

TCP除了做流量控制外,还可以做拥塞控制 不能控制路口有多少车,但可以通过控制红绿灯,控制进来的车的数量

HTTP通信前 需要TCP建立连接,TCP连接的建立,通常称为三次握手

小林coding原图

一开始,双方都处于CLOSED状态,先是服务器主动监听某个端口,处于LISTEN状态。

之后客户端一看服务器可以接收服务了,主动发起SYN之后进入SYN_SENT状态

服务器收到发起的连接,返回SYN,并且ACK(应答)客户端的SYN,之后处于SYN_RCVD状态

客户端收到服务器端的SYN和ACK之后,发送ACK的ACK,之后处于ESTABLISHED状态,因为它一发一收成功了。

服务端收到ACK的ACK后,处于ESTABLISHED状态,因为它也一发一收了。

三次握手的目的是保证双方都有发送和接收的能力。

TCP的连接状态查看 在linux中可以通过netstat -napt

小林coding原图

TCP分割数据

小林coding原图

如果HTTP请求消息较长,超过了MSS的长度,这时TCP就需要把HTTP的数据拆解成一块块的数据发送,而不是一次发送所有的数据,

MTU:一个网络包的最大长度,以太网一般为1500字节。
MSS:除去IP和TCP头部之后,一个网络包所能容纳TCP的数据最大长度。

数据会被以MSS为单位进行拆分,拆分出来的每个数据都会被放进单独的网络包中。也就是在每个被拆分的数据加上TCP头信息,交给IP模块来发送数据。

IP头+TCP头+MSS=MTU

TCP报文生成

TCP协议里面会有两个端口,一个是浏览器监听的端口(通常随机生成),一个是WEB服务器监听的端口(HTTP默认端口号为80,HTTPS默认端口号为443)

TCP报文的数据部分就是存放了HTTP的头部+数据,组装好TCP报文,就交给下面的网络层处理。

网络层报文如下

小林coding原图
TCP就可以保证安全到达 (TCP的头 就包含了一系列保证安全的措施,比如标志位等)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值