前言
小伙伴们在面试过程中会遇到一些HTTP/网络TCP/IP相关问题
我大概收集整理了下
- TCP的3次握手&4次挥手
- TCP属于哪一层
- TCP/IP分层
- 介绍DNS解析
这些问题我们都可以在以下文章中找到答案
网络基础TCP/IP
- web使用一种名为http(超文本传输协议)的协议作为规范,完成从客户端到服务器端的运作流程
- 通常使用的网络是在TCP/IP协议族的基础上运作的,它是互联网相关的各类协议族的总称,HTTP属于它内部的一个子集,
-
TCP/IP按层次分为,
应用层
,传输层
,网络层
,数据链路层
,- 应用层 决定了向用户提供用用服务时通信的活动,
- 传输层 提供处于网络连接中的两台计算机之间的数据传输
- 网络层 处理网络上流动的数据包
- 链路层 处理连接网络的硬件部分
整体流程
(1)应用层 获取http请求报文,转发给传输层
(2)传输层 把报文分割,打上标记及端口号,转发给网络层 (TCP)
(3)网络层 增加作为通信目的地的mac地址,转发给链路层 (IP)
(4)链路层 服务器端在链路层接收到数据,再逐层向上转发到应用层(以太网)
发送端 在层与层之间传输数据时 会被打上该层所属的首部信息,反之
接收端 在层与层之间传输数据时 每经过一层是会把对应的首部消除
传输层 TCP
- 方便传输 把大块数据分割成报文段为单位的数据包进行管理
TCP协议采用三次握手
,保证数据准确送达
原因
在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。
在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
三次握手
(1)客户端发送一个SYN标志的数据包给对方,(SYN=1,seq=x,)
(2)服务端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息(SYN=1,ACK=1,seq=y,ack=x+1)客户端收到包之后,状态切换为ESTABLISHED
(3)客户端收到后,回传一个带ACK标志的数据包代表握手结束 (ACK=1,seq=x+1,ack=y+1),服务端收到包之后,状态切换为ESTABLISHED
seq 同步序列号,第一次随机生成seq的序列x, 之后在此基础+y(y为数据长度,无数据则y=1)ack 应答序列号 在seq基础上+1
这时 客户端和服务器端就可以开始传送数据
四次挥手
关闭是一个全双工的过程,发包的顺序的不一定的。一般来说是客户端主动发起的关闭,最后一次客户端发出的数据seq = x, ack = y
(1)客户端, 状态为FIN_WAIT_1 发出FIN包(FIN=1 ack=y seq=x+1)
(2)服务端收到后, 状态切换为CLOSE_WAIT 发出ACK包(ACK=1 ack=x+2) 客户端收到包之后状态切换为FNI_WAIT_2
(3)服务端处理完任务后,状态切换为LAST_ACK, 发出FIN包(FIN=1 seq=y)
(4)客户端收到后, 状态切换为TIME_WAIT 发出ACK包(ACK=1 ack=1)等待2MSL后关闭连接
网络层 IP
- IP地址指明了节点被分配到的地址
- mac地址指网卡所属的固定地址
- ip地址会变, mac地址基本不会变
DNS域名解析
DNS协议通过域名查找IP地址,或逆向从IP地址反查域名服务
URI和URL
- URI 统一资源标识符,标识某一互联网资源
- URL 统一资源定位符,表示资源地址
- URL是URI的子集
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。