网络层:实现数据的路由和转发
域名一般维护在什么服务器上面 ==> 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.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时间:
TIME_WAIT(2MSL):MSL代表一个报文的最大生存时间。2MSL代表一个来回的时间。
3.4 字节流协议