小伙伴们在面试过程当中会遇到一些HTTP/网络TCP/IP相关问题web
我大概收集整理了下面试
这些问题咱们均可以在如下文章中找到答案
TCP/IP按层次分为,应用层
,传输层
,网络层
,数据链路层
,segmentfault
总体流程 (1)应用层 获取http请求报文,转发给传输层 (2)传输层 把报文分割,打上标记及端口号,转发给网络层 (TCP) (3)网络层 增长做为通讯目的地的mac地址,转发给链路层 (IP) (4)链路层 服务器端在链路层接收到数据,再逐层向上转发到应用层(以太网) 发送端 在层与层之间传输数据时 会被打上该层所属的首部信息,反之 接收端 在层与层之间传输数据时 每通过一层是会把对应的首部消除
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,)code
(2)服务端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息(SYN=1,ACK=1,seq=y,ack=x+1)客户端收到包以后,状态切换为ESTABLISHEDip
(3)客户端收到后,回传一个带ACK标志的数据包表明握手结束 (ACK=1,seq=x+1,ack=y+1),服务端收到包以后,状态切换为ESTABLISHED资源
seq 同步序列号,第一次随机生成seq的序列x, 以后在此基础+y(y为数据长度,无数据则y=1)ack 应答序列号 在seq基础上+1get
这时 客户端和服务器端就能够开始传送数据
关闭是一个全双工的过程,发包的顺序的不必定的。通常来讲是客户端主动发起的关闭,最后一次客户端发出的数据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后关闭链接
DNS协议经过域名查找IP地址,或逆向从IP地址反查域名服务
URI和URL
- URI 统一资源标识符,标识某一互联网资源 - URL 统一资源定位符,表示资源地址 - URL是URI的子集