点击一个网页链接,然后发生了什么?

本文 Github/javamap 已收录,有Java程序员进阶技术知识地图以及我的系列文章,欢迎大家Star。

 

基础知识补课来了!!!

首先我们认识下网页链接的组成:

例子:http://www.baidu.com/

1. http是一个应用层的协议,详细的这里不介绍。

http是一个很有意思的东东,推荐大家可以看图解系列的关于http的书,很清晰。

 

2. DNS解析:将www.baidu.com解析成目的IP地址,如果URL里不包含端口号,则会使用该协议的默认端口号。

在本地机器上配置网络时都会填写DNS,这样本机就会把URL发送给这个配置的DNS服务器;如果能够找到相应的URL则返回其IP,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS可以看成一个树状结果,该请求将一直发送到根直到得到结果。

 

3. 建立socket连接

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

 

4. 请求连接成功建立后,开始向web服务器发送请求,这个请求一般是Get或Post命令(Post用于Form参数的传递))

 

5. 应答web服务器收到这个请求,进行处理。如果找到文件,web服务器将该内容传送给响应的Web浏览器。

 

6. 关闭连接

 

数据包在TCP/IP模型中的过程:

1. 应用层: 根据当前的需求和动作,结合应用层的协议,确定发送的数据内容,会把这些数据放到一个缓冲区内,然后形成了应用层的报文data

 

2. 传输层: 这些数据通过传输层发送,比如tcp协议。在该层被打上传输层的报头,主要包含端口号,以及tcp的各种制信息。

tcp是一种端到端的协议,利用这些协议,比如tcp首部的确认序号,根据这些数字,发送的一方不断的进行发送等待确认,发送一个数据段后,会开启一个计数器,只有收到确认后才会发送下一个,如果超过计数时间仍未收到确认则重发,在接受端收到错误数据,则将其丢弃,这将导致发送端超时重发。

 

3. 网络层:待发送的数据段送到网络层,在网络层被打包,这样封装上了网络层的报头,报头内容含有源及目的地IP地址,该层数据发送单元被称为packet。查找过程如下:

 

 

查找过程:

1. 根据目的地址,得到目的网络号,如果处在同一个内网,则可以直接发送

 

2. 如果不是,则查询路由器,找到一个路由

 

3. 如果找不到明确的路由,此时路由表中还会有默认网关,也可称为缺省网关,IP用缺省的网关地址将一个数据传送到下一个指定的路由器,所以网关也可能是路由器,也可能只是内网向特定路由器传输数据的网关。

 

4.  路由器接收到数据后,它再次为远程主机或网络查询路由,若还未找到路由,该数据包将发送到该路由器的缺省网关地址,而数据包中包含一个最大路由跳数。如果超过这个条数,则会丢弃数据包,这样可以防止无限传递。工作在网络层,传输层的数据对它是透明的

 

5. 如果上述步骤还未成功,则该数据包就不能被传送。

 

-- END --

日常求赞:你好技术人,先赞后看养成习惯,你的赞是我前进道路上的动力,对我非常重要。

加油技术人!

简介: 博主从华中科技大学硕士毕业,是一个对技术有追求,对生活有激情的程序员。几年间浪迹于多个一线互联网大厂,具有多年开发实战经验。

微信搜索公众号【爱笑的架构师】,我有技术和故事,等你来。

文章持续更新,在 Github/javamap 中可以看到我归档的系列文章,有面试经验和技术干货,欢迎Star。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值