【TCP/IP】从在浏览器中输入网址按回车键说起

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 【TCP/IP】从在浏览器中输入网址按回车键说起

前言


在个人电脑上,用浏览器冲浪是再常用不过的一个操作了,但在浏览器中输入网址按下回车键背后发生的网络事件你清楚吗?


背景知识


协议栈


1、网络协议分层,其好处:


  • 促进标准化工作,允许各个供应商进行开发;


  • 各层间相互独立,把网络操作分成低复杂单元;


  • 灵活性好,某一层变化不会影响到其它层;


  • 各层间通过一个接口在相邻层上下通信。


2、PDU,即protocol data unit,每一层使用自己层的协议和别的系统的对应层相互通信,协议层的协议在对等层之间交换的信息叫协议数据单元。各层的PDU如下:


  • 上层:message


  • 传输层:segment


  • 网络层:packet


  • 数据链路层frame


  • 物理层:bit


3、封装和解封装


  • 封装:数据要通过网络进行传输,要从高层一层一层的向下传送,如果一个主机要传送数据到别的主机,先把数据装到一个特殊协议报头中,这个过程叫封装


封装分为:分片(和MTU、MSS有关系)和加控制头信息


  • 解封装:上述的逆向过程


OSI七层 vs TCP/IP五层架构



各层地址


  • 物理层:无地址,比如以太网直接是通过双绞线连接,WLAN有单独的协议保证物理层的连接;


  • 链路层:MAC地址,设备出厂时会设定好,而且这个地址可以映射到网卡供应商的(OUI字段);


  • 网络层:IP地址,具体分为IPv4和IPv6两种,一般有三种获取方法:静态配置、DHCP、PPPoE三种方式;


  • 传输层:端口,标识某个服务(如DHCP使用UDP67和68两个端口)或程序;


  • 应用层:无地址,主要依赖于网络层+传输层地址,来唯一标识一个应用,如某路由器的维护网址(http://192.168.1.1:80),实际上对应socket的原型。


涉及协议


以访问web服务器、DHCP获取PC的地址为例,其中涉及的协议有:


TCP、IP、ARP、DNS、DHCP等,具体而言:


  • ARP:用于根据IP地址去查询对应主机的MAC地址;


  • DHCP:用于上网主机动态获取IP地址;


  • DNS:用于根据域名,解析出对应服务器的IP地址。


全过程解析


准备工作(Human)


这里以有线连接路由器LAN口为例来说明。


要上网,首先要用网线连接路由器的LAN口和PC的网口,物理层连好后,对应LAN口会发LINK UP消息给系统,进而触发下面后续操作。


这一步是人工介入的,后面多数由操作系统自动完成。


DHCP拿地址(OS)


  • 链路层地址,前面提过,在网卡出厂时写死的,不需要单独的流程去获取。但PC上网需要的三层地址(IP地址),是需要额外的流程的,这里的DHCP过程就是获取IP地址用的。


  • DHCP过程是操作系统自动完成的,不需要人工干预。


  • DHCP这一步不再继续向下展开,实际上DHCP背后发送报文走的流程和网页数据走的TCP报文本质上是类似的。


打开网页,输入网址(www.csdn.net),按下回车(Human)


这一步是人工介入的,实际不光是打开网页,打开其他需要网络的APP,也是类似的过程。


DNS解析(Browser)


  • 按下回车,此时浏览器程序会调用gethostbyname这类函数,进行dns解析。这里涉及DNS协议的实现,根据配置文件情况,可能从本地缓存查询,也可能向DNS服务器发起DNS请求(或UDP或TCP);


    hptr=gethostbyname(“www.csdn.net”)


  • 解析的结果是根据域名查到了服务器的IP,比如根据www.csdn.net查到了其IP地址为47.95.164.112地址,此时浏览器程序获得服务器地址。


  • DNS解析这一步不再继续向下展开,实际上DNS解析中gethostbyname背后发送数据走的流程和网页数据走的TCP报文本质上是类似的。


建TCP连接(Browser)


  • 浏览器根据前一步DNS解析获得的IP地址,建立TCP socket(实际中是哪种类型的socket,跟具体的业务有关,HTTP是基于TCP的),并发起GET请求(HTTP协议),获取数据。


  • 获取数据之后,将其显示在页面上。


  • 下面是用C实现的部分获取页面信息的伪码,实际浏览器的逻辑类似:


/*create socket*/
struct sockaddr_in si;
si.sin_family = AF_INET;
si.sin_port = htons(80);
si.sin_addr.S_un.S_addr = inet_addr(ipstr);
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == -1 || sock == -2)
  return ;
/* connect server */
connect(sock, (SOCKADDR*)&si, sizeof(si));
/*send request to http server*/
char request[1024] = "GET /?st=1 HTTP/1.1\r\nHost:";
strcat(request, host);
strcat(request, "\r\nConnection:Close\r\n\r\n");
int ret = send(sock, request, strlen(request), 0);
/*get web page contents*/
FILE *f = fopen("recieved.txt", "w");
int isstart = 0;
while (ret > 0)
{
  const int bufsize = 1024;
  char* buf = (char*)calloc(bufsize, 1);
  ret = recv(sock, buf, bufsize - 1, 0);
  fprintf(f, "%s", buf);
  free(buf);
}
fclose(f);
closesocket(sock);


传输层转发(TCP/IP协议栈-TCP)


在上一步建立TCP socket等相关操作,背后是大名鼎鼎的TCP三次握手:



路由转发(TCP/IP协议栈-IP层)


  • IP层收到TCP层发来的报文后,根据目的IP(本文的csdn网站对应的IP地址)去查路由表,找到对应的表项(接口、下一跳),构建IP报文并从对应接口发送出去。


  • 构造IP报文的时候,会去邻居系统查找下一跳IP对应目的MAC;


  • 一台windows电脑的典型IP路由表如下:


Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    10.42.113.129   10.42.113.132       20
    10.42.113.128  255.255.255.192    10.42.113.132   10.42.113.132       20
    10.42.113.132  255.255.255.255        127.0.0.1       127.0.0.1       20
   10.255.255.255  255.255.255.255    10.42.113.132   10.42.113.132       20
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
        224.0.0.0        240.0.0.0    10.42.113.132   10.42.113.132       20
  255.255.255.255  255.255.255.255    10.42.113.132   10.42.113.132       1
Default Gateway:     10.42.113.129 


ARP解析(TCP/IP协议栈-ARP)


  • ARP相关模块,也可以叫邻居子系统,主要用于维护目的IP和目的MAC的对应关系。


  • 有本地有缓存,如果没有缓存则发起ARP请求去获取。


  • 一个windows下的ARP表如下:


C:\Users\1024>arp -a
接口: 10.40.164.55 --- 0xb
  Internet 地址         物理地址              类型
  10.42.164.2           74-41-14-16-ad-c0     动态
  10.42.164.3           00-11-5e-00-01-01     动态


数据链路层(Windows驱动)


  • 前面IP层找到对应出接口后,会调用对应接口的驱动发送函数将报文。


  • 驱动发送报文的实质,就是操作PC机的网卡,将报文交给网卡发出。


物理层(网卡&网线)


  • 以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为PHY,而许多网卡的芯片把MAC和PHY的功能做到了一颗芯片中。


  • 数据从驱动下到MAC控制器,经由PHY,送到RJ45接口,之后数据就以物理信号的形式从网线传出去了。



总结


  • 本文仅以有线为例来说明PC DHCP获取地址,有线上网的全过程,实际上无线上网、PPPoE方式也类似,读者可触类旁通。


  • 最后盗张图整体看下浏览器上网过程中,上层应用数据的经过各的各组件以及其变化。



参考资料


  • 《TCP/IP详解》


  • 《网络是怎样连接的》
相关文章
|
9月前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
163 4
|
23天前
|
编解码 安全 网络安全
指纹浏览器中HTTP代理IP的重要性及使用原因
随着数字化发展,网络安全和隐私保护成为核心需求,指纹浏览器应运而生。它通过客户端信息唯一标识用户身份。搭配HTTP代理IP可增强安全性,具体表现为:1. 保护用户地址;2. 提高信息安全;3. 防止指纹检测;4. 增强网络安全。HTTP代理以其稳定性、安全性,在网络营销等领域发挥重要作用,二者结合为用户提供更强的隐私和安全保护。
89 34
|
3月前
|
域名解析 网络协议 前端开发
浏览器输入域名网址访问后的过程详解
1、以91处理网为例,客户端浏览器通过DNS解析到www.91chuli.com,IP地址是202.108.22.5,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到202.108.22.5,然后通过TCP进行封装数据包,输入到网络层。
117 2
|
3月前
|
Web App开发 API Windows
取接口访问者信息[IP,浏览器,操作系统]免费API接口教程
此API用于获取访问者的IP地址、浏览器和操作系统信息,支持70多种浏览器和操作系统。通过POST或GET请求至`https://cn.apihz.cn/api/ip/getapi.php`,需提供用户ID和KEY。返回结果包括状态码、消息、IP、浏览器和操作系统信息。示例:{"code":200,"ip":"175.154.88.178","browser":"Chrome","os":"Windows 10"}。详情见官网文档。
|
5月前
|
Web App开发 存储 安全
Python编写脚本,打开浏览器输入网址,自动化登陆网站
Python编写脚本,打开浏览器输入网址,自动化登陆网站
337 4
|
4月前
|
域名解析 缓存 网络协议
浏览器输入 URL 回车后会经历哪些步骤?
本文首发于微信公众号“前端徐徐”,详细解析了从在浏览器中输入URL到页面完全呈现的全过程,涵盖检查缓存、URL解析、DNS解析、TCP连接、HTTP请求、服务器响应、浏览器处理响应、页面解析与渲染、关闭TCP连接等关键步骤。通过这些步骤,帮助读者深入了解互联网的工作原理,提升网站性能和用户体验。
58 0
|
7月前
|
数据采集 数据安全/隐私保护
Kameleo指纹浏览器进阶使用:轻松集成IPXProxy海外代理IP
Kameleo是一款出色的指纹浏览器,它能够帮助用户实现隐身浏览。大家在进行网络抓取的时候总会碰到一些阻碍,而采取指纹浏览器可以提升网络抓取的效率,并且集成代理IP能增加一层防护,让数据采集更加全面,为制定营销策略提供更好的支持。那如何将Kameleo指纹浏览器与IPXProxy海外代理IP集成?
101 2
|
7月前
|
安全 搜索推荐 数据安全/隐私保护
战斧指纹浏览器与IPXProxy海外代理IP的协同使用策略
战斧指纹浏览器是一家专注跨境用户的指纹浏览器,支持IP隔离技术,能够解决账号关联的问题。当然,用户在使用战斧浏览器的时候也可以搭配自有设备,其中IPXProxy的海外代理IP是不错的选择。那战斧指纹浏览器与IPXProxy海外代理IP如何搭配使用?
196 2
|
7月前
|
数据安全/隐私保护
YunLogin指纹浏览器与IPXProxy海外代理IP搭配使用的步骤详解
想要运营海外社交媒体账号,需要指纹浏览器和代理IP这两个实用的工具。YunLogin指纹浏览器是不错的选择,用户可以利用指纹浏览器来管理多个社交媒体账号,例如instagram,然后通过给浏览器环境设置不同的代理IP,降低账号关联的风险,确保每个账号都是独立运行。那如何将YunLogin指纹浏览器与IPXProxy海外代理IP搭配使用?
130 2
|
7月前
|
安全 iOS开发 MacOS
Dolphin指纹浏览器+IPXProxy代理IP:配置与使用全流程
通过代理IP,用户可以轻松绕过地域限制,访问全球范围内的网站和服务。不过想要同时使用多个代理IP的话,就需要借助指纹浏览器。Dolphin指纹浏览器和IPXProxy代理IP是大家常用的组合,这个组合为用户打造了一个既安全又高效的在线环境。下面是Dolphin指纹浏览器配置IPXProxy代理IP使用步骤,帮助大家更好了解这个组合。
183 3

热门文章

最新文章