问:在浏览器输入网址到看到页面经历了哪些过程?

每个人有每个人的回答,先说下我对这道题的答案:

  • 浏览器会访问DNS服务器将输入的域名对应的IP获取到
  • 浏览通过HTTP协议和IP协议处理发送的建立连接的请求然后发送到互联网
  • 在互联网中路由器根据目标IP地址,通过复杂的算法找出'最优路径'来传输请求
  • 找到目标IP计算机(服务器)的网卡通过三次握手建立连接
  • 服务器对请求进行分析处理然后返回浏览器需要的页面
  • 浏览器拿到数据会对DOM结构和CSS进行分析形成renderTree然后渲染到页面上
  • 在渲染的过程中有需要从服务器请求的资源,会重复1-6的过程

计算机网络的分层模型

OSI七层模型

  • 应用层(Application) 提供网络与用户应用软件之间的接口服务
  • 会话层(Session) 提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制
  • 表示层(Presentation) 提供格式化的表示和转换数据服务,如加密和压缩
  • 传输层(Transimission) 提供建立、维护和取消传输连接功能,负责可靠地传输数据(PC)
  • 网络层(Network) 处理网络间路由,确保数据及时传送(路由器)
  • 数据链路层(DataLink) 负责无错传输数据,确认帧、发错重传等(交换机)
  • 物理层(Physics) 提供机械、电气、功能和过程特性(网卡、网线、双绞线、同轴电缆、中继器)

HttpServletRequest获取ip地址和mac地址

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
 * 常用获取客户端信息的工具
public class NetworkUtil {
     * 获取ip地址
    public static String getIpAddress(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        // 本机访问
        if ("localhost".equalsIgnoreCase(ip) || "127.0.0.1".equalsIgnoreCase(ip) || "0:0:0:0:0:0:0:1".equalsIgnoreCase(ip)){
            // 根据网卡取本机配置的IP
            InetAddress inet;
            try {
                inet = InetAddress.getLocalHost();
                ip = inet.getHostAddress();
            } catch (UnknownHostException e) {
                e.printStackTrace();
        // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
        if (null != ip && ip.length() > 15) {
            if (ip.indexOf(",") > 15) {
                ip = ip.substring(0, ip.indexOf(","));
        return ip;
     * 获取mac地址
    public static String getMacAddress() throws Exception {
        // 取mac地址
        byte[] macAddressBytes = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress();
        // 下面代码是把mac地址拼装成String
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < macAddressBytes.length; i++) {
            if (i != 0) {
                sb.append("-");
            // mac[i] & 0xFF 是为了把byte转化为正整数
            String s = Integer.toHexString(macAddressBytes[i] & 0xFF);
            sb.append(s.length() == 1 ? 0 + s : s);
        return sb.toString().trim().toUpperCase();

 参考:blog.csdn.net/weixin_33894992/article/details/88018525

网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合。 对等实体通常是指计算机网络体系结构中处于相同层次的信息单元。 一般系统网络协议包括五个部分:通信环境,传输服务,词汇表,信息的编码格式,时序、规则和过程。 java获取IP地址和MAC地址。 /** * 通过HttpServletRequest返回IP地址 * @param request HttpServletRequest * @return ip String * @throws Exception public String getIpAddr(HttpServletRequest request) throws Exception { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); 一、后台通过IPMAC地址1.获取客户端ip地址( 这个必须从客户端传到后台):   jsp页面下,很简单,request.getRemoteAddr() ;   因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换   public String getMyIP() {        try {           * @throws IOException public final static String getIpAddress(HttpServletRequest request) { String ip=""; try { // 获取请... HttpServletRequest request =((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); public static String getIpAddr(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress ==. 1. 获取客户端IP public String getIpAddr(HttpServletRequest request) { String ipAddress = null; ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddre... 原文链接:https://blog.thinkeridea.com/201903/go/get_client_ip.html用户请求到达提供服务的服务器中间有很多的环节,导致服务获取用户真实的 ip 非常困难,大多数的框架及工具库都会封装各种获取用户真实 ip 的方法,在 exnet 包中也封装了各种 ip 相关的操作,其中就包含获取客户端 ip 的方法,比较实用的方法如下:func Clien... //获取ip public static String getIpAddress(HttpServletRequest request) { String ip = null; //X-Forwarded-For:Squid 服务代理 String ipAddresses =... 获取访问者ip,代码:String sip="";try{sip = (String)request.getRemoteAddr();}catch(Exception e){}%>获取访问者mac地址,法是用UDP协议来发送查询mac指令然后返回值中解析mac。代码String smac = "";String sip = request.getHeader("x-forwarded-for... 关于你的爱机(电脑)你真的了解它吗?它的真实姓名、MAC地址你真的知道吗?为了了解每个工作日都陪伴着你的爱机下面小编就给您推荐几种方法来获取计算机名以及MAC地址的信息计算机名方法1对于Windows 10用户,请在桌面找到“此电脑”图标,右键点击后选择“属性”,打开系统属性页后查看计算机名:对于Windows 7用户,请在桌面找到“计算机”图标,右键点击后选择“属性”,打开计算机属性页...