浏览器与服务器的数据传输

从计算机发送出来的网络包会通过集线器、路由器等设备被转发,最终到达目的地。

经过集线器

当信号到达集线器后,会被广播到整个网络中,信号到达集线器的PHY(MAU)模块后,会进入中继电路。中继电路的基本功能就是将输入的信号广播到集线器的所有端口上。

接下来,信号从所有接口流出,到达连接在集线器上的所有设备,然后,这些设备在收到信号之后会通过MAC头部中的接收方MAC地址判断是不是发给自己的,如果是发给自己的就接受,否则就忽略。

经过交换机

首先,信号到达交换机的网线接口,并由PHY(MAU)模块进行接收。

接下来,PHY(MAU)模块会将网线中的信号转换为通用格式,然后传递给MAC模块,MAC模块将信号转换为数字信息,然后将信息存入缓冲区中。

将包存入缓冲区后,接下来需要查询一下这个包的接收方MAC地址是否已经在MAC地址表中有记录了,通过交换电路到达指定的端口。

当网络包通过交换电路到达发送端口时,端口中的MAC模块和PHY (MAU)模块会执行发送操作,将信号发送到网线中。

经过路由器

首先路由器会通过端口将发过来的包接收进来。

接下来,转发模块会根据接收到的包的IP头部中记录的接收方IP地址,在路由表中进行查询,以此判断转发目标。

然后,转发模块将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去。

到达互联网

互联网接入路由器将数据包接收之后,根据IP头部记录的接收方的IP地址在路由表中查询对应的记录,然后转发给对应的网关。

互联网接入路由器转发数据包后,数据包进入ADSL Modem,然后,ADSL Modem会把包拆分成很多小格子,每一个小格子称为一个信元,然后将这些信元转换成信号了,ADSL Modem将信元转换为电信号之后,信号会进入一个叫作分离器的设备,然后ADSL信号会和电话的语音信号混合起来一起从电话线传输出去。

从分离器出来,就是插电话线的接口,信号从这里出来之后,会通过室内电话线,到达配线盘,通过配线盘之后,经过保安器,信号会进入电线杆上架设的电话电缆,经过电话线到达电话局。

信号通过电话线到达电话局之后,会经过配线盘、分离器到达DSLAM。电信号会被还原成数字信息——信元。信元从DSLAM出来之后,会到达一个叫作BAS的包转发设备,接下来,BAS会在包的前面加上隧道专用头部并发送到隧道的出口。

然后,网络包会到达隧道出口的隧道专用路由器在这里隧道头部会被去掉,IP包会被取出,并被转发到换联网。

到达网络运营商

网络包通过接入网之后,到达运营商POP的路由器,路由器根据路由表中的信息判断转发目标,经过几次转发之后,网络包就到达了Web服务器所在的POP的路由器,然后从这里被继续转发到Web服务器。

到达服务器

服务器的网卡接收到传输的电信号或者光信号,然后将其还原成数字信息。

接下来需要根据包末尾的帧校验序列(FCS)来校验错误,当FCS一致,即确认数据没有错误时,接下来需要检查MAC头部中的接收方MAC地址,看看这个包是不是发给自己的。如果是发给自己的就把数据存储在网卡的缓冲区中,否则就丢弃。

从网卡缓冲区中将接收到的包读取出来,根据MAC头部的以太类型字段判断协议的种类,并调用负责处理该协议的软件。

当网络包转交到协议栈时,IP模块会首先开始工作:

  1. 检查IP地址是否是发给自己的
  2. 检查是否分片,如果分片就等全部分片都接受完毕在还原,如果没有分片就存储
  3. 判断IP头部的协议字段,然后转发给对应的模块

TCP模块收到数据包时,执行以下操作:
4. 根据收到的包的发送方IP地址、发送方端口号、接收方IP地址、接收方端口号找到相对应的套接字
5. 将数据块拼合起来并保存在接收缓冲区中
6. 向客户端返回ACK

服务器接收数据完毕后,会根据数据内容执行对应的应用程序,然后把应用程序的执行结果返回给浏览器。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java浏览器服务器之间的通信可以使用以下两种方式: 1. 使用HTTPURLConnection和URL类进行通信。这是Java中一种最常用的方法,这种方法使用HTTP协议建立连接并在服务器浏览器之间传输数据。 2. 使用Socket类进行通信。这种方法使用TCP/IP协议直接连接服务器浏览器,使它们能够在同一时间发送和接收数据。 在实际应用中,通常使用第一种方法。以下是一个简单的Java代码示例,演示如何使用HTTPURLConnection和URL类连接服务器并从服务器获取数据: ```java import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class ServerCommunication { public static void main(String[] args) throws Exception { URL url = new URL("http://www.example.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法为GET connection.setRequestMethod("GET"); InputStream inputStream = connection.getInputStream(); // 读取服务器返回的数据 byte[] data = new byte[1024]; int len = 0; while ((len = inputStream.read(data)) != -1) { System.out.println(new String(data, 0, len)); } inputStream.close(); connection.disconnect(); } } ``` 以上代码使用URL类创建一个连接到指定URL的对象,然后使用HttpURLConnection类打开连接。在此之后,设置请求方法为GET,并使用getInputStream()方法获取服务器返回的数据流。最后,我们读取数据流并打印数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端御书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值