计算机网络底层原理分析详解

1、不同层次的网络协议

网络层:实现数据的路由和转发

2、一个HTTP请求的分层解析流程

域名一般维护在什么服务器上面 ==> DNS服务器:域名和主机ip的对应关系

解析域名,从浏览器缓存中找域名对应的dns信息 是否存在:找到dns信息,就可以拿到ip地址;

若没有找到:应用程序会把域名封装成dns的请求报文,dns的请求报文是应用层的协议,dns的应用程序会解析报文,DBS报文构造完成。

dns 53号端口,用来处理域名解析。

将dns报文往下传递,给传输层的协议。DNS协议底层依赖UDP协议,udp首部较小,4个字段,8个字节:包含源端口(本机随机生成的一个端口) 和 目的端口(53号端口)。

传输层依赖于下层的网络层,网络层将数据进一步打包,打包成一个IP报文,会加上ip首部:包含源ip地址、目的ip地址 以及 端口信息。需要依赖ARP协议,设备跟设备直接需要进行数据的转达;通过ARP协议,能知道数据包发送到哪一个物理设备上。

通过数据链路层将数据报发送出去。数据出口:一般是路由器,路由器联通光猫、运营商的网络接口。路由器拿到数据包,也会进行解析。ARP协议已经知道了需要发送的对应的物理地址,只需要 比对MAC地址,就可以定义网络设备的位置 ==> 确定该数据包交到哪个设备。

路由器拿到数据包,也会进行解析(解析到ip地址,ip地址会去找dns服务器),需要完成ip路由的功能:通过网络运营商接入的网络,发到公网上去。经过非常复杂的机房,完成路由包的转发。最终会到达主机所配置的DNS服务器。

当数据包到达dns服务器,会对数据包进行层层解析,数据链路层 -> 网络层 -> 传输层  -> 应用层,可以解析报文中的域名,然后从dns服务器缓存中找对应的ip地址,找到 会对数据进行从上层到下层 打包 ,再次发送回去。

应用层拿到响应报文,获取域名对应的ip地址。

缓存到浏览器中,接着 需要完成 HTTP请求报文(包含:Method请求方法、请求路径、协议版本、Hosts)的构造。

HTTP请求报文构造完成后,通过TCP协议完成数据传输 --> ip协议(完成数据的路由) --> 数据链路层 ,将数据发送出去 --> 到达机房 , 通过TCP 解析出需要交给应用层的哪个应用程序(解析端口,80端口),找到部署的nginx服务器,nginx解析静态资源。

HTTP响应 报文构造,通过同样的方式,将数据返回,最终到达主机的应用程序,把对应的http响应报文解析,渲染html页面。

3、TCP协议 

面向连接的、可靠的,基于字节流的传输层通信协议。

3.1 特点:

  • 基于连接的:数据传输之前需要建立连接
  • 全双工的:双向传输
  • 字节流:不限制数据大小,会将数据切分,打包成报文段,保证有序接收,重复报文自动丢弃
  • 流量缓冲:解决双方处理能力的不匹配(读、写缓冲区)
  • 可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性
  • 拥塞控制:防止网络出现恶意拥塞

tcp协议报文:

Dest port 一般是80端口,80是为HTTP开放的,上网冲浪使用次数最多的协议,主要用于传输信息的协议。

SYN报文 --> 请求建立tcp连接报文

ACK --> 响应报文

FIN报文 --> 连接关闭报文

 

3.2 TCP连接管理

1. tcp连接:四元组【源地址,源端口,目的地址,目的端口】

查看tcp连接:

应用程序(Program name)跟虚拟机之间的tcp连接

Foreign Address:正在运行虚拟机的这台主机 ,端口4925是随机生成的

2.确认连接:tcp三次握手

 

 

vmware ip:192.168.93.200

Flags [.] :.代表ack的请求报文

进行第一次握手  

Flags [S] : 代表tcp的SKN报文,也就是发起tcp连接的同步序列号的请求报文。本机会随机生成一个序列号:Sequence number(用来完成数据的可靠性传输,数据重组)

进行第二次握手  

服务器进行应答:通过ACK应答

tcp协议约定:数据传输时,第一次客户端请求携带一个初始序列号seq,每一个tcp请求包都会携带该序列号 ==> 用来确认数据是否发送成功。比如:从主机发送一个请求报文给服务器,数据发送成功?  ==> ack。 服务器会响应给客户端 ack = swq + 1,就说明服务器端收到了刚才的建立连接的请求报文。同时,服务器也发送 Flags [S.] 建立请求的报文,携带服务器端的初始化序列号 seq(随机生成)。

进行第三次握手  

客户端也需要应答回复ack给服务器, 服务器端通过客户端发送的报文中的 ack = 服务器发送的seq + 1 来确认。

为什么是三次? 两次No!

A端发送数据包D,在网络中产生延迟,若延迟时间较长,A选择丢弃该报文,重新和B建立连接。此时,连接建立成功。这个时候,报文D达到B,B认为A又再次发起了一次连接,B会发送响应报文给A,而A不会处理该响应了,会将响应报文丢弃。可是,在服务器端,B会维护此连接,便造成服务器资源的浪费。

3.3 TCP四次挥手

服务器发送报文(该报文不会携带任何数据),将FIN报文置为1,说明是一个关闭连接的请求。

连接关闭可以是客户端主动关闭,也可以是服务器端主动关闭。

主动关闭的一方需要等待2MSL时间:

  • 当主动关闭连接的一方接收到FIN报文后,立即CLOSED,会出现问题:最后一个发送的ACK报文可能会丢失。意味着服务器端没有收到ack,会一直向客户端发送FIN报文,浪费服务器资源。
  • 2MSL时间保证了请求报文在网络中全部消失。我们看到上一个连接的3号数据包并不是丢失而是在网络传输过程中由于某种原因发生了延迟,由于tcp的重传机制,发送端重新发送了新的3号数据包给接收端,随后发送端和接收端开始了四次挥手,这是因为系统回收time_wait太快,导致time_wait时间太短。新的连接建立后,上个连接在网络中延迟的数据包被新的连接收到了,从而破坏了新的tcp连接的可靠性。

 

TIME_WAIT(2MSL):MSL代表一个报文的最大生存时间。2MSL代表一个来回的时间。

3.4 字节流协议

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值