我是靠谱客的博主 隐形玫瑰,最近开发中收集的这篇文章主要介绍网络连接全过程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

打开浏览器,输入网址,也可以叫作URL(Uniform Resource Locator,统一资源定位器)。

http://www.xxxx.com

浏览器解析URL,获取URL中协议、服务器名、数据源的路径名等信息,并根据解析出来的信息生成HTTP请求消息。

然后浏览器需要向DNS服务器查询www.xxxx.com的IP地址。通过调用socket库(gethostbyname),使操作系统上的DNS客户端(DNS解析器)调用操作系统内部协议栈,协议栈通过网卡向DNS服务器发出查询消息。

目标DNS服务器会从域名与IP地址的对照表中查找相应的记录,并返回IP地址。如果找不到,会将查询信息转发到根域,根域中找不到相应记录,判断域名属于com域,将com域的IP返回给目标DNS服务器,目标DNS服务器再将查询信息转发到com域,com如果找不到相应记录,返回xxxx域的IP给目标DNS服务器,目标DNS服务器再将查询信息转发到xxxx域,xxxx域发现有相应的记录,将www.xxxx.com的IP地址返回给目标DNS服务器,目标DNS服务器将IP地址返回。

解析器从操作系统协议栈获取DNS服务器返回相应消息,取出IP地址交给浏览器。

接下来浏览器需要将HTTP消息发至目标服务器。

消息不是由浏览器发送的,浏览器通过操作系统提供的接口委托操作系统内部协议栈发送。

浏览器将通信需要的控制信息(IP、端口号、通信操作的状态等)传入协议栈。浏览器请求进行连接操作,协议栈将会与目标服务器进行TCP三次握手,协议栈中TCP模块创建TCP头部连接控制信息交给IP模块发出(详细收发过程后面再讲)。

服务器端处理经其协议栈中的TCP模块解析出的TCP连接控制信息,之后返回响应信息,两端以这种方式进行连接操作。在三次握手后,连接成功建立,此时可以进行收发数据。

浏览器将HTTP消息放入协议栈缓冲区,协议栈将网络包发出,服务器收到后返回TCP确认信息,发送方协议栈收到确认信息。此时HTTP请求发送操作已经完成。

发送HTTP请求之后,还需要等待Web服务器返回响应消息,浏览器向协议栈发出读取请求,协议栈接收数据后,将数据暂存入接收缓冲区,再将数据从接收缓冲区交给浏览器。浏览器得到服务器返回的HTTP响应,就可以进行网页显示等一系列操作了。

下面说详细说一下数据收发过程:
协议栈中TCP模块创建TCP头将数据封装成TCP包后交给IP模块。

此时需要查看路由表,确定网络包由哪个网卡发出,并发往何处,如果路由表中找不到对应条目,网络包将发往默认网关(通常是路由器)。

IP模块会在TCP包前面添加IP头部封装成IP包,发送方IP为选择的网卡的IP,接收方IP为服务器IP。

此时发送方MAC地址为选择的网卡的MAC地址,接收方网卡的MAC地址未知。所以需要进行ARP广播,获得接收方网卡的MAC地址,然后IP模块给网络包添加MAC头部,之后交给网卡处理。

网卡驱动从IP模块获取包,复制到网卡内的缓冲区,向MAC模块发送发送包的命令,MAC 模块会将包从缓冲区中取出,并在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。传给网卡的网络包是0和1组成的数字信息,网卡将数字信息转换为电信号或者光信号,并发送出去。

网络包经过传输到达交换机,交换机检查MAC地址表是否有接收方MAC地址的记录,如果有,直接发送至接收方所连接的交换机的端口。

网络包经过交换机发出后到达路由器(路由器的端口具有IP地址和MAC地址),路由器检查接收方MAC地址和当前端口MAC地址一致,接收该包,根据接收方IP地址查询路由表。如果没有匹配的条目,路由器会丢弃这个包,并通过ICMP消息告知发送方。如果找到匹配的条目,将网络包发送方MAC地址替换为路由器发出端口的MAC地址,通过ARP查询下一个转发目标的MAC地址。网络包完成后发出。

现在的路由器设备拥有一种叫作地址转换的功能,可以划分出一个与互联网隔离的私有网络。内网和外网之间通过路由器的端口和地址对应表在私有地址和公有地址之间相互转换,完成网络包的转发。

接入路由器通过接入网连接到网络运营商,在经过认证后,网络运营商下发给上网设备唯一的公有地址。此时路由器就可以接入互联网。数据包经过路由器转发至互联网,在层层转发后最终到达目的地。

接收数据:
计算机网卡接收数据包时,判断接收方MAC是否和自己一致,如果一致则放入缓冲区,如果不一致则丢弃。接下来网卡会发起一个中断,网卡驱动被中断处理程序调用,从网卡的缓冲区取出包,判断协议类型,将它放入对应协议栈。应用程序就可以从协议栈获得并处理数据了。

最后

以上就是隐形玫瑰为你收集整理的网络连接全过程的全部内容,希望文章能够帮你解决网络连接全过程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部