http请求的详细过程
- 格式:pdf
- 大小:143.18 KB
- 文档页数:6
⼀个http请求发送到后端的详细过程⾸先http是⼀个应⽤层的协议,在这个层的协议,只是⼀种通讯规范,也就是因为双⽅要进⾏通讯,⼤家要事先约定⼀个规范。
1.连接当我们输⼊这样⼀个请求时,⾸先要建⽴⼀个socket连接,因为socket是通过ip和端⼝建⽴的,所以之前还有⼀个DNS解析过程,把变成ip,如果url⾥不包含端⼝号,则会使⽤该协议的默认端⼝号。
DNS的过程是这样的:⾸先我们知道我们本地的机器上在配置⽹络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS可以看做是⼀个树状结构,该请求将⼀直发送到根直到得到结果。
现在已经拥有了⽬标ip和端⼝号,这样我们就可以打开socket连接了。
2.请求连接成功建⽴后,开始向web服务器发送请求,这个请求⼀般是GET或POST命令(POST⽤于FORM参数的传递)。
GET命令的格式为: GET 路径/⽂件名 HTTP/1.0⽂件名指出所访问的⽂件,HTTP/1.0指出Web浏览器使⽤的HTTP版本。
现在可以发送GET命令:GET /mydir/index.html HTTP/1.0,3.应答 web服务器收到这个请求,进⾏处理。
从它的⽂档空间中搜索⼦⽬录mydir的⽂件index.html。
如果找到该⽂件,Web服务器把该⽂件内容传送给相应的Web浏览器。
为了告知浏览器,,Web服务器⾸先传送⼀些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间⽤⼀个空⾏分开。
常⽤的HTTP头信息有: ① HTTP 1.0 200 OK 这是Web服务器应答的第⼀⾏,列出服务器正在运⾏的HTTP版本号和应答代码。
代码"200 OK"表⽰请求完成。
② MIME_Version:1.0 它指⽰MIME类型的版本。
【HTTP】⼀、HTTP协议简介及其⼯作流程 协议是指计算机通信⽹络中两台计算机之间进⾏通信所必须共同遵守的规定或规则,超⽂本传输协议(HTTP)是⼀种通信协议,它允许将超⽂本标记语⾔(HTML)⽂档从Web服务器传送到客户端的浏览器。
(⼀)HTTP协议简介 HTTP(超⽂本传输协议)是⼀个应⽤层协议,它是互联⽹的⼀个基础协议,它规定了浏览器如何向万维⽹服务器请求万维⽹⽂档、服务器如何把⽂档传给浏览器。
HTTP是⾯向事务的应⽤层协议,它是万维⽹可以进⾏可靠⽂件交换的重要基础。
对于技术岗位的程序员来说理解掌握HTTP协议是必须的。
1、万维⽹概述 万维⽹实际上我们并不陌⽣,实际它并不是⼀个⽹络,⽽是⼀个⼤规模的、联机式的信息储藏所,是⼀个分布式的超媒体系统。
⼀个超⽂本由多个信息源链接⽽成。
利⽤⼀个链接可使⽤户找到另⼀个⽂档。
这些⽂档可以位于世界上任何⼀个接在因特⽹上的超⽂本系统中。
超⽂本是万维⽹的基础。
万维⽹以客户-服务器⽅式⼯作。
客户程序就是⽤户计算机上的各种浏览器,万维⽹⽂档所驻留的机器就成为服务器,客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维⽹⽂档。
万维⽹必须解决的⼏个问题:为了标志分布在整个因特⽹上的万维⽹⽂档,使⽤了统⼀资源定位符URL。
每⼀个⽂档在整个因特⽹的范围内具有唯⼀的标识符 URL。
为了实现万维⽹上各种超链之间的链接,使⽤了HTTP协议。
为了使各种万维⽹⽂档都能在因特⽹上的各种计算机上显⽰出来,使⽤了浏览器和HTML语⾔。
2、HTTP的版本演变 HTTP规定了客户端和服务器之间的通信格式,默认使⽤端⼝80,最早版本是1991年发布的0.9版。
该版本极其简单,只有⼀个命令get,只能传输HTML⽂本。
1996年,发布了HTTP的1.0版本,这⼀版才加⼊了⼤量的内容,使得互联⽹不仅可以传输⽂字,还能传输图像、视频、⼆进制⽂件等,报⽂格式也规定下来,引⼊了post和head等命令,是第⼀个⽐较成熟的版本。
请求从前端到后端的大概流程
前端和后端之间的请求交互是一个复杂的过程,它涉及到多个步骤和组件。
以下是一个前端向后端发送请求的简化流程:
前端发送请求:当用户在前端(通常是浏览器)进行某种操作,如点击一个按钮或填写一个表单,前端会通过HTTP协议向后端发送一个请求。
这个请求可能包含数据、参数或者仅仅是一个指令。
网络传输:请求在互联网上以数据包的形式进行传输。
这个过程涉及到DNS解析、IP 路由等网络层面的操作。
后端接收请求:后端服务器(例如,一个运行着某种服务器的计算机)接收前端发送的请求。
这个服务器可能运行着各种应用,如Web服务器、数据库服务器等。
后端处理请求:后端服务器根据接收到的请求类型和内容,执行相应的操作。
例如,如果请求是获取数据,服务器可能会从数据库中检索数据;如果请求是提交表单,服务器可能会处理表单数据并将其存储到数据库中。
后端返回响应:处理完请求后,后端会生成一个响应,然后通过网络返回给前端。
这个响应可能包含数据、状态码或者错误信息。
前端处理响应:前端接收到后端的响应后,会进行相应的处理。
例如,如果响应包含数据,前端可能会更新页面的某部分;如果响应包含错误信息,前端可能会显示一个错误消息。
以上就是一个大概的前端到后端的请求流程。
实际上,这个过程可能涉及更多的细节和组件,如负载均衡器、代理服务器、缓存服务器等。
而且,随着技术的发展,这个流程也在不断演变和优化,例如通过使用HTTP/2、WebSockets等技术来提高性能和用户体验。
在浏览器中简单输入一个网址,解密其后发生的一切(http请求的详细过程)一个http请求的详细过程我们来看当我们在浏览器输入:8080/mydir/index.html,幕后所发生的一切。
首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范。
1.连接当我们输入这样一个请求时,首先要建立一个socket连接,因为socket 是通过ip和端口建立的,所以之前还有一个DNS解析过程,把变成ip,如果url里不包含端口号,则会使用该协议的默认端口号。
DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS可以看做是一个树状结构,该请求将一直发送到根直到得到结果。
现在已经拥有了目标ip 和端口号,这样我们就可以打开socket连接了。
2.请求连接成功建立后,开始向web服务器发送请求,这个请求一般是GET 或POST命令(POST用于FORM参数的传递)。
GET命令的格式为:GET 路径/文件名HTTP/1.0文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。
现在可以发送GET命令:GET /mydir/index.html HTTP/1.0,3.应答web服务器收到这个请求,进行处理。
从它的文档空间中搜索子目录mydir的文件index.html。
如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。
为了告知浏览器,,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。
常用的HTTP头信息有:①HTTP 1.0 200 OK 这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。
Http请求详解(转)----请求+响应各字段详解参考1. HTTP请求格式⾸先介绍HTTP协议:(HTTP,HyperText Transfer Protocol)是上应⽤最为⼴泛的⼀种。
所有的⽂件都必须遵守这个标准。
⼯作原理:1. 由HTTP客户端发起⼀个请求,建⽴⼀个到服务器指定端⼝(默认是)的TCP连接。
连接2. HTTP服务器则在那个端⼝监听客户端发送过来的请求。
⼀旦收到请求,请求3. 服务器(向客户端)发回⼀个状态⾏,⽐如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的⽂件、错误消息、或者其它⼀些信息。
响应4. 客户端接收服务器所返回的信息通过浏览器显⽰在⽤户的显⽰屏上,然后客户机与服务器断开连接显⽰内容HTTP使⽤TCP⽽不是UDP的原因在于(打开)⼀个⽹页必须传送很多数据,⽽TCP协议提供传输控制,按顺序组织数据,和错误纠正。
做过Socket编程的⼈都知道,当我们设计⼀个通信协议时,“消息头/消息体”的分割⽅式是很常⽤的,消息头告诉对⽅这个消息是⼲什么的,消息体告诉对⽅怎么⼲。
HTTP协议传输的消息也是这样规定的,每⼀个HTTP包都分为HTTP头和HTTP体两部分,消息体是可选的,⽽消息头是必须的。
每当我们打开⼀个⽹页,在上⾯点击右键,选择“查看源⽂件”,这时看到的HTML代码就是HTTP的消息体,那么消息头可以通过浏览器的开发⼯具或者插件可以看到,如果⽕狐的Firebug,IE的Httpwatch。
HTTP请求是指:客户端通过发送 HTTP 请求向服务器请求对资源的访问。
它向服务器传递了⼀个数据块,也就是请求信息,HTTP 请求由三部分组成:请求⾏、请求头和请求正⽂。
请求⾏:请求⽅法 URI 协议/版本请求头(Request Header)请求正⽂下⾯是⼀个HTTP请求的数据:POST /index.html HTTP/1.1 请求⽅法 url 协议/版本号Host: localhost 主机地址User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-cn,zh;q=0.5Accept-Encoding: gzip, deflateConnection: keep-aliveReferer: <a target=_blank href="http://localhost/" style="color: rgb(51, 102, 153); text-decoration: none;">http://localhost/</a>Content-Length:25Content-Type:application/x-www-form-urlencoded请求空⾏标志着请求头结束,请求正⽂(请求体)的开始username=aa&password=12341、请求⾏:请求⽅法URI协议/版本请求的第⼀⾏是“⽅法 URL 协议/版本”,并以回车换⾏作为结尾。
http的工作原理
HTTP(超文本传输协议)是一种用于传输超文本的应用层协议。
它的工作原理可以简单地分为以下步骤:
1. 建立连接:客户端(例如Web浏览器)向服务器发送请求。
2. 发送请求:客户端发送一个包含HTTP方法(例如GET、POST等)、URL地址以及其他必要的信息的请求报文给服务器。
3. 服务器处理请求:服务器接收到请求报文后,根据请求报文中的URL地址找到对应的资源,并根据请求方法执行相应的
操作。
服务器也可以生成响应报文,包含将要发送给客户端的数据。
4. 发送响应:服务器将响应报文发送回客户端。
报文中包含HTTP状态码、响应头以及实际的响应内容。
5. 客户端处理响应:客户端接收到响应后,根据状态码判断请求是否成功。
客户端可以处理响应数据,比如在Web浏览器
中渲染页面。
6. 断开连接:客户端和服务器之间的连接会在请求-响应周期
结束后断开。
这些步骤是HTTP协议在传输超文本时的基本工作原理。
通过这种方式,客户端可以与服务器进行交互,请求数据或发送数据。
从而实现了Web浏览器访问网页、下载文件、上传数据
等功能。
http流程HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的通信协议,是构建Web应用程序的基础。
在这篇文章中,我们将介绍HTTP的一般流程。
HTTP是基于客户端-服务器模型的协议,其中客户端通过发送HTTP请求来请求服务,服务器则通过发送HTTP响应来提供服务。
以下是HTTP的一般流程:1. 客户端发起请求:首先,客户端(例如浏览器)需要向服务器发送HTTP请求。
该请求通常由请求方法(例如GET、POST等)、请求头和请求体组成。
请求方法指定了客户端希望服务器执行的操作,例如获取资源、提交表单等。
2. 服务器处理请求:当服务器接收到客户端的请求后,它会根据请求方法和请求URL(Uniform Resource Locator)来确定要执行的操作。
服务器可能需要访问数据库、处理业务逻辑等。
3. 服务器发送响应:一旦服务器完成请求的处理,它会生成一个HTTP响应并将其发送回客户端。
响应通常包括状态码、响应头和响应体。
状态码用于指示请求的结果,例如200表示成功,404表示未找到,500表示服务器错误等。
4. 客户端接收响应:客户端接收到服务器发送的HTTP响应后,它会解析响应并根据需要进行处理。
例如,如果客户端接收到的是HTML响应,它可能会将其渲染为可视化的网页。
这是HTTP的基本流程。
然而,为了更好地保证通信的安全性和可靠性,现代的Web通信中通常还会涉及其他的步骤,例如:1. 建立安全连接:为了保护通信的安全性,客户端和服务器之间通常会建立安全连接。
一种常见的方法是使用HTTPS (HTTP Secure),它在HTTP的基础上添加了加密和身份验证的功能。
2. 身份验证:当客户端发送请求时,服务器可能需要对客户端进行身份验证,以确保只有经过授权的用户才能访问受保护的资源。
身份验证通常使用用户名和密码或令牌进行。
3. 会话管理:为了实现跨请求的状态保持,服务器可以使用会话管理技术。
.NET平台处理HTTP请求.NET平台处理HTTP请求的过程大致如下:1、 IIS得到一个请求;2、查询脚本映射扩展,然后把请求映射到aspnet_isapi.dll文件3、代码进入工作者进程(IIS5里是aspnet_wp.exe;IIS6里是w3wp.exe),工作者进程也叫辅助进程;4、 .NET运行时被加载;5、非托管代码调用IsapiRuntime.ProcessRequest()方法;6、每一个请求调用一个IsapiWorkerRequest;7、使用WorkerRequest调用HttpRuntime.ProcessRequest()方法;8、通过传递进来的WorkerRequest创建一个HttpContext对象9、通过把上下文对象作为参数传递给HttpApplication.GetApplicationInstance(),然后调用该方法,从应用程序池中获取一个HttpApplication实例;10、调用HttpApplication.Init(),启动管道事件序列,钩住模块和处理器;11、调用HttpApplicaton.ProcessRequest,开始处理请求;12、触发管道事件;13、调用HTTP处理器和ProcessRequest方法;14、把返回的数据输出到管道,触发处理请求后的事件。
当客户端向Web服务器请求一个页面文件时,这个HTTP请求会被inetinfo.exe 进程截获(WWW服务),它判断文件后缀,如果是*.aspx、*.asmx等,就把这个请求转交给aspnet_isapi.dll,而aspnet_isapi.dll则会通过一个Http PipeLine 的管道,将这个HTTP请求发送给w3wq.exe进程,当这个HTTP请求进入w3wq.exe 进程之后, framework就会通过HttpRuntime来处理这个HTTP请求,处理完毕后将结果返回给客户端。
在浏览器中输⼊URL后,执⾏的全部过程。
会⽤到哪些协议?(⼀次完整的HTTP请求过程)在浏览器中输⼊URL后,执⾏的全部过程。
会⽤到哪些协议?(⼀次完整的HTTP请求过程)整个流程如下: 域名解析 为了将消息从你的PC上传到服务器上,需要⽤到IP协议、ARP协议和OSPF协议。
发起TCP的三次握⼿ 建⽴TCP连接后发起HTTP请求 服务器响应HTTP请求 浏览器解析html代码,并请求HTML代码中的资源(如js、css、图⽚等) 断开TCP连接 浏览器对页⾯进⾏渲染呈现给⽤户域名解析⽐如要查询的IP地址: 1、浏览器搜索⾃⼰的DNS缓存(维护⼀张域名与IP地址的对应表); 2、若没有,则搜索操作系统中的DNS缓存(维护⼀张域名与IP地址的对应表); 3、若没有,则搜索操作系统的hosts⽂件(Windows环境下,维护⼀张域名与IP地址的对应表); 4、若没有,则操作系统将域名发送⾄本地域名服务器---(递归查询⽅式),本地域名服务器查询⾃⼰的DNS缓存,查找成功则返回结果,否则,(以下是迭代查询⽅式) 4.1. 本地域名服务器向根域名服务器(其虽然没有每个域名的具体信息,但存储了负责每个域,如com、net、org等解析的顶级域名服务器的地址)发起请求,此处,根域名服务器返回com域的顶级域名服务器的地址; 4.2. 本地域名服务器向com域的顶级域名服务器发起请求,返回权限域名服务器(权限域名服务器,⽤来保存该区中的所有主机域名到IP地址的映射)地址; 4.3. 本地域名服务器向权限域名服务器发起请求,得到的IP地址; 5、本地域名服务器将得到的IP地址返回给操作系统,同时⾃⼰也将IP地址缓存起来; 6、操作系统将IP地址返回给浏览器,同时⾃⼰也将IP地址缓存起来; 7、⾄此,浏览器已经得到了域名对应的IP地址;ARP(地址解析协议) ARP解决的是同⼀个局域⽹内,主机或路由器的IP地址和MAC地址的映射问题。
http请求的详细过程一个http请求的详细过程我们来看当我们在浏览器输入:8080/mydir/index.html,幕后所发生的一切。
首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范。
1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把变成ip,如果url 里不包含端口号,则会使用该协议的默认端口号。
DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS可以看做是一个树状结构,该请求将一直发送到根直到得到结果。
现在已经拥有了目标ip和端口号,这样我们就可以打开socket连接了。
2.请求 连接成功建立后,开始向web服务器发送请求,这个请求一般是GET或POST命令(POST用于FORM参数的传递)。
GET命令的格式为: GET 路径/文件名 HTTP/1.0文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。
现在可以发送GET 命令:GET /mydir/index.html HTTP/1.0,3.应答 web服务器收到这个请求,进行处理。
从它的文档空间中搜索子目录mydir的文件index.html。
如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。
为了告知浏览器,,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。
常用的HTTP头信息有:① HTTP 1.0 200 OK 这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。
代码"200 OK"表示请求完成。
② MIME_Version:1.0它指示MIME类型的版本。
③ content_type:类型 这个头信息非常重要,它指示HTTP体信息的MIME类型。
如:content_type:text/html指示传送的数据是HTML文档。
④ content_length:长度值 它指示HTTP体信息的长度(字节)。
4.关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。
下面我们具体分析其中的数据包在网络中漫游的经历在网络分层结构中,各层之间是严格单向依赖的。
“服务”是描述各层之间关系的抽象概念,即网络中各层向紧邻上层提供的一组操作。
下层是服务提供者,上层是请求服务的用户。
服务的表现形式是原语(primitive),如系统调用或库函数。
系统调用是操作系统内核向网络应用程序或高层协议提供的服务原语。
网络中的n层总要向n+1层提供比n‐1层更完备的服务,否则n层就没有存在的价值。
传输层实现的是“端到端”通信,引进网间进程通信概念,同时也要解决差错控制,流量控制,数据排序(报文排序),连接管理等问题,为此提供不同的服务方式。
通常传输层的服务通过系统调用的方式提供,以socket的方式。
对于客户端,要想建立一个socket连接,需要调用这样一些函数 socket() bind() connect(),然后就可以通过send()进行数据发送。
现在看数据包在网络中的穿行过程:应用层首先我们可以看到在应用层,根据当前的需求和动作,结合应用层的协议,有我们确定发送的数据内容,我们把这些数据放到一个缓冲区内,然后形成了应用层的报文data。
传输层这些数据通过传输层发送,比如tcp协议。
所以它们会被送到传输层处理,在这里报文打上了传输头的包头,主要包含端口号,以及tcp的各种制信息,这些信息是直接得到的,因为接口中需要指定端口。
这样就组成了tcp的数据传送单位segment。
tcp是一种端到端的协议,利用这些信息,比如tcp首部中的序号确认序号,根据这些数字,发送的一方不断的进行发送等待确认,发送一个数据段后,会开启一个计数器,只有当收到确认后才会发送下一个,如果超过计数时间仍未收到确认则进行重发,在接受端如果收到错误数据,则将其丢弃,这将导致发送端超时重发。
通过tcp协议,控制了数据包的发送序列的产生,不断的调整发送序列,实现流控和数据完整。
网络层然后待发送的数据段送到网络层,在网络层被打包,这样封装上了网络层的包头,包头内部含有源及目的的ip地址,该层数据发送单位被称为packet。
网络层开始负责将这样的数据包在网络上传输,如何穿过路由器,最终到达目的地址。
在这里,根据目的ip地址,就需要查找下一跳路由的地址。
首先在本机,要查找本机的路由表,在windows上运行route print 就可以看到当前路由表内容,有如下几项:Active Routes Default Route Persistent Route.整个查找过程是这样的:(1)根据目的地址,得到目的网络号,如果处在同一个内网,则可以直接发送。
(2)如果不是,则查询路由表,找到一个路由。
(3)如果找不到明确的路由,此时在路由表中还会有默认网关,也可称为缺省网关,IP用缺省的网关地址将一个数据传送给下一个指定的路由器,所以网关也可能是路由器,也可能只是内网向特定路由器传输数据的网关。
(4) 路由器收到数据后,它再次为远程主机或网络查询路由,若还未找到路由,该数据包将发送到该路由器的缺省网关地址。
而数据包中包含一个最大路由跳数,如果超过这个跳数,就会丢弃数据包,这样可以防止无限传递。
路由器收到数据包后,只会查看网络层的包裹数据,目的ip。
所以说它是工作在网络层,传输层的数据对它来说则是透明的。
如果上面这些步骤都没有成功,那么该数据报就不能被传送。
如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或 “网络不可达”的错误。
以windows下主机的路由表为例,看路由的查找过程======================================================================Active Routes:Network Destination Netmask Gateway Interface Metric0.0.0.0 0.0.0.0 192.168.1.2 192.168.1.101 10127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1192.168.1.0 255.255.255.0 192.168.1.101192.168.1.101 10192.168.1.101 255.255.255.255 127.0.0.1 127.0.0.1 10192.168.1.255 255.255.255.255 192.168.1.101192.168.1.101 10224.0.0.0 240.0.0.0 192.168.1.101192.168.1.101 10255.255.255.255 255.255.255.255 192.168.1.101192.168.1.101 1Default Gateway: 192.168.1.2Network Destination 目的网段Netmask 子网掩码Gateway 下一跳路由器入口的ip,路由器通过interface和gateway定义一调到下一个路由器的链路,通常情况下,interface和gateway是同一网段的。
Interface 到达该目的地的本路由器的出口ip(对于我们的个人pc来说,通常由机算机A的网卡,用该网卡的IP地址标识,当然一个pc也可以有多个网卡)。
网关这个概念,主要用于不同子网间的交互,当两个子网内主机A,B要进行通讯时,首先A 要将数据发送到它的本地网关,然后网关再将数据发送给B所在的网关,然后网关再发送给B。
默认网关,当一个数据包的目的网段不在你的路由记录中,那么,你的路由器该把那个数据包发送到哪里!缺省路由的网关是由你的连接上的default gateway决定的,也就是我们通常在网络连接里配置的那个值。
通常interface和gateway处在一个子网内,对于路由器来说,因为可能具有不同的interface,当数据包到达时,根据 Network Destination寻找匹配的条目,如果找到,interface则指明了应当从该路由器的那个接口出去,gateway则代表了那个子网的网关地址。
第一条 0.0.0.0 0.0.0.0 192.168.1.2 192.168.1.101 100.0.0.0 代表了缺省路由。
该路由记录的意思是:当我接收到一个数据包的目的网段不在我的路由记录中,我会将该数据包通过192.168.1.101这个接口发送到 192.168.1.2这个地址,这个地址是下一个路由器的一个接口,这样这个数据包就可以交付给下一个路由器处理,与我无关。
该路由记录的线路质量 10。
当有多个条目匹配时,会选择具有较小Metric值的那个。
第三条 192.168.1.0 255.255.255.0 192.168.1.101 192.168.1.101 10直联网段的路由记录:当路由器收到发往直联网段的数据包时该如何处理,这种情况,路由记录的interface和gateway是同一个。
当我接收到一个数据包的目的网段是192.168.1.0时,我会将该数据包通过192.168.1.101这个接口直接发送出去,因为这个端口直接连接着 192.168.1.0这个网段,该路由记录的线路质量 10 (因interface和gateway是同一个,表示数据包直接传送给目的地址,不需要再转给路由器)。
一般就分这两种情况,目的地址与当前路由器接口是否在同一子网。
如果是则直接发送,不需再转给路由器,否则还需要转发给下一个路由器继续进行处理。
查找到下一跳ip地址后,还需要知道它的mac地址,这个地址要作为链路层数据装进链路层头部。
这时需要arp协议,具体过程是这样的,查找arp 缓冲,windows下运行arp ‐a可以查看当前arp缓冲内容。
如果里面含有对应ip的mac地址,则直接返回。
否则需要发生arp请求,该请求包含源的ip和mac地址,还有目的地的ip地址,在网内进行广播,所有的主机会检查自己的ip与该请求中的目的ip是否一样,如果刚好对应则返回自己的mac地址,同时将请求者的ip mac保存。
这样就得到了目标ip的mac地址。