前言

小伙伴们在面试过程中会遇到一些HTTP/网络TCP/IP相关问题

我大概收集整理了下

  1. TCP的3次握手&4次挥手
  2. TCP属于哪一层
  3. TCP/IP分层
  4. 介绍DNS解析
这些问题我们都可以在以下文章中找到答案

网络基础TCP/IP

  1. web使用一种名为http(超文本传输协议)的协议作为规范,完成从客户端到服务器端的运作流程
  2. 通常使用的网络是在TCP/IP协议族的基础上运作的,它是互联网相关的各类协议族的总称,HTTP属于它内部的一个子集,
  3. 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之http协议2.0/SPDY


石头人汉考克
46 声望2 粉丝