嵌入式-计算机网络知识学习-从网址键入到网页显示

一、解析HTTP网址(URL)

如:http://www.server.com/dir1/file1.html

        http:------表示使用的是http协议

        //-----------后面跟服务器名称

        www.server.com---服务器名称

        /dir1/file1.html----表示文件夹名称

二、生成HTTP请求

 请求报文:请求行+消息头+消息体组成

 响应报文:状态行+消息头+消息体组成

三、查询服务器IP地址--DNS寻址

1.本地客户端询问本地DNS服务器

2.本地DNS服务器询问.根域,返回下一级路径.com名称

   本地DNS服务器询问.com,返回下一级路径www.server.com名称

   本地DNS服务器询问www.server.comIP地址,返回IP地址

   本地DNS服务器提交IP地址给本地客户端

四、调用socket库

委托协议栈工作。

协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。

协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

五、TCP协议传输

1.TCP建立连接(三次握手)--保证客户端和服务器端的可靠连接

三次握手目的:为了确认双方的接收能力和发送能力是否正常

  • 一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。

  • 然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。

  • 服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于 SYN-RCVD 状态。

  • 客户端收到服务端发送的 SYN 和 ACK 之后,发送对 SYN 确认的 ACK,之后处于 ESTABLISHED 状态,因为它一发一收成功了。

  • 服务端收到 ACK 的 ACK 之后,处于 ESTABLISHED 状态,因为它也一发一收了。

第一次A---->B:证明客户端的发送能力正常

第二次B---->A:证明服务器端的接收和发送能力正常

第三次A---->B:证明客户端的接收能力正常

两次握手错误情况举例:如果客户端第一次发送请求,但是服务器端没有收到,此时请求报文失效;客户端再次向服务器端发送请求,之后客户端与服务器建立连接,这条请求突然到达服务器端,服务器误认为客户端又发送了连接请求,两次握手建立连接,而客户端忽略服务器发来的确定,也不发送数据,造成不必要的错误和网络资源的浪费。

2.TCP报文格式

SYN是发起一个连接,ACK是回复,RST是重新连接,FIN是结束连接

接收窗口:TCP要做流量控制,通信双方各声明一个窗口(缓存大小),标识自己当前能够的处理能力。

TCP还有拥塞控制,即当拥塞之后,控制自己发送的速度。

3.在linux下,可以通过netstat -napt命令查看当前连接状态

4.TCP分割数据

如果HTTP请求消息超过MSS的长度,TCP就会把HTTP的数据拆解为数据块发送,而不是一次性发送。拆分出来的每个数据块都会加上TCP头部信息,然后交给IP模块来发送数据。

5.TCP报文生成

TCP 协议里面会有两个端口,一个是浏览器监听的端口(通常是随机生成的),一个是 Web 服务器监听的端口(HTTP 默认端口号是 80, HTTPS 默认端口号是 443)。

最后组装为TCP头部+HTTP头部+数据发送到网络层处理。

六、网络层-IP定位

TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成网络包发送给通信对象。

1.IP报文格式

协议号:06(十六进制)---表示协议是TCP

源地址:客户端输出的IP地址

目的地址:通过DNS域名解析得到的Web服务器IP

        注*如果客户端有多个网卡(即有多个IP地址),如何判断使用哪一个

        需要根据路由表规则,来判断哪一个网卡作为源地址 IP。

七、网络接口层--MAC两点传输

网络包还需要在IP头部加上MAC头部

MAC头部信息:接收方MAC地址(48位)

                          发送方MAC地址(48位)-----在客户端网卡ROM中

                          协议类型(16位):0800(IP协议)、0806(ARP协议)

问题:如何获取接收方的MAC地址呢?

由ARP协议帮我们找到路由器的MAC地址

具体实现:

ARP 协议会在以太网中以广播的形式,对以太网所有的设备喊出:“这个 IP 地址是谁的?请把你的 MAC 地址告诉我”。

然后就会有人回答:“这个 IP 地址是我的,我的 MAC 地址是 XXXX”。

八、网卡发送

将上述最终的数字信息转化为电信号在网线上传输

完成这一步的是网卡驱动程序,在上述网络包复制到网卡的缓存区,并在开头加上报头和起始帧分界符,在末尾加上用于错误检测的帧校验序列

九、交换机-二层网络设备

首先,电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换为数字信号。然后通过包末尾的 FCS 校验错误,如果没问题则放到缓冲区。

交换机主要工作:交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口

交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中。因此,和网卡不同,交换机的端口不具有 MAC 地址

交换机的 MAC 地址表主要包含两个信息:

  • 一个是设备的 MAC 地址(接收方)
  • 另一个是该设备连接在交换机的哪个端口上。

如果接收方 MAC 地址是一个广播地址,那么交换机会将包发送到除源端口之外的所有端口。

十、路由器-三层网络设备

二层网络设备和三层网络设备区别是有没有自己的MAC地址。

首先,电信号到达网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过包末尾的 FCS 进行错误校验。

如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。

接收:

去掉网络包开头的MAC头部,然后根据后方的IP头部内容进行包的转发操作。

不接收:

根据路由表的网关列判断对方的地址。

接下来需要通过 ARP 协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地址。

然后重复网卡发送----交换机到达下一个路由器

十一、到达服务器

一层一层去除头部,如果里面的不是自己匹配的信息,就重新加头部发送。

如果是就会将这个包发送HTTP进程,然后从服务器端重复上面操作到达客户端。

客户端接收完成之后,向服务器发起四次挥手,断开连接。

  • 第一步:客户端进程发出断开连接指令,这将导致客户端的TCP程序创建一个特殊的TCP报文段,发送到服务器。这个报文段的FIN字段被置为1,表示这是一条断开连接的报文;
  • 第二步:服务器接收到客户端发来的断开连接报文,向客户端回送这个报文的确认报文(ACK字段为1),告诉服务器已经接收到FIN报文,并允许断开连接;
  • 第三步:服务器发送完确认报文后,服务器的TCP程序创建一条自己的断开连接报文,此报文的FIN字段被置为1,然后发往客户端;
  • 第四步:客户端接收到服务器发来的FIN报文段,则产生一条确认报文(ACK1),发送给服务器,告知服务器已经接收到了它的断开报文。服务器接收到这条ACK报文段后,释放TCP连接相关的资源(缓存和变量),而客户端等待一段时间后(半分钟、一分钟或两分钟),也释放处于客户端的缓存和变量;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值