计算机网络面试
1.TCP/IP协议
TCP/IP协议(TCP、IP协议是TCP/IP协议中最重要的协议,故以它们命名)是一个协议集合,TCP/IP协议集包括①应用层②传输层③网际层④网络接口层。

1.1 网络接口层
网络接口层与OSI参考模型中的物理层和数据链路层相对应,它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议。
1.2 网际层
网际层负责点到点(point-to-point)的传输(这里的"点"指主机或路由器)
该层协议
- Internet协议(IP)
- Internet控制信息协议(ICMP)
- 地址解析协议(ARP)
- 反向地址解析协议(RARP)
1.3 传输层
传输层负责端到端(end-to-end)的传输(这里的"端"指 源主机和目的主机的 端口)
该层协议
- TCP(Transmission Control Protocol,传输控制协议)
- UDP(User Datagram Protocol,用户数据报协议)
1.4 应用层
应用层服务于应用进程的,就是向用户提供数据加上编码和对话对的控制。
该层协议

2.TCP和UDP
2.1简要介绍TCP和UDP
TCP(Transmission Control Protocol,传输控制协议)
TCP数据格式如下图:

(图片来源于https://blog.csdn.net/zhang6223284/article/details/81414149)
从TCP的数据格式可以推知:
1.序号主要是为了解决乱序问题,确认序号主要为了验证对方是否收到自己发出去的报文段。
2.状态位(6bit)SYN 是发起一个链接,ACK 是回复,RST 是重新连接,FIN 是结束连接。因为 TCP 是面向连接的,因此双方通过状态位维护连接的状态
3.窗口大小,TCP 要做流量控制,需要通信双方各声明一个窗口,标识自己当前的处理能力。
我们开始讲TCP连接中的三次握手,四次挥手,先搞清楚seq和ack的关系:
ack:期待对方下次发送的序号seq
我方即将发出ack = 刚收到对方seq + 1
我方即将发送的seq = 刚收到对方的ack
TCP三次握手(建立连接)

TCP四次挥手(释放连接)

说明:
1.四次挥手过程中seq值介绍
- 第一次挥手:u为客户端发送数据的最后一个字节序号+1 (因为不发数据了)
- 第二次挥手:v为服务端回复客户端时,继续发送的数据字节序号(正常发送序号)
- 第三次挥手:w为服务端发送数据的最后一个字节序号+1 (服务端剩余数据发送完成)
- 第四次挥手:第三次挥手时,服务端ack表示下一次客户端要发送seq=u+1
2.注意双方什么时候停止发送数据,什么时候释放连接
3.为什么建立连接时不是两次握手,而是三次?
主要是为了防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器 收不到确认,就知道客户端并没有请求连接。
UDP(User Datagram Protocol,用户数据报协议)
用户数据报协议,属于传输层的协议,无连接,不保证传输的可靠性。

(图片来源于https://blog.csdn.net/zhang6223284/article/details/81414149)
UDP优势:
①开销小
TCP为了保证其可靠性,首部包含20字节,以及40字节的可选项,UDP首部只有8字节
②速度更快
UDP发送数据之前没有TCP的连接建立过程;
TCP提供了过多的保护,在及时性上做了很多的妥协。
UDP传输过程中存在的主要问题:
①丢失和乱序:因为UDP不提供ACK、序列号等机制,所以是没有办法知道是否有报文丢失以及接收方到达等报文顺序是否和发送方发送的报文数据一样;
②差错:对于差错问题则是可以通过校验和等检测到,但是不提供差错纠正;
③数据完整性,UDP协议头部虽然有16位的校验和,但是IPv4并不强制执行,也就是说UDP无法保证数据的完整性
2.2 TCP和UDP比较
1.TCP面向连接;UDP是无连接的
2.TCP提供可靠的服务;UDP尽最大努力交付,即不保证可靠交付。
3.UDP具有较好的实时性(不用建立连接,且报文小,省时间),工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信。
5.TCP对系统资源要求较多,UDP对系统资源要求较少。
3.Http和Https的区别
1.Http协议直接运行在TCP之上;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP
2.Http是超文本传输协议,明文传输,客户端与服务器端都无法验证对方的身份;Https则是具有安全性的ssl加密传输协议,可进行加密传输、身份认证的网络协议,要比http协议安全。
3.端口不同:Http与Https使用不同的连接方式,用的端口也不一样,前者是80,后者是443
4.资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源
5.开销:Https通信需要证书,而证书一般需要向认证机构购买
4.浏览器输入网址到显示网站页面的过程
①检测地址
地址栏检测url地址是否合法
②本地查找
查找该url是否在本地缓存,若在直接显示;否则开始外网到外网
③解析域名
若url为域名,则需要查找DNS服务器解析域名为ip地址
④建立TCP连接
从③得到要访问ip地址,开始向该ip地址服务器建立TCP连接(Http协议基于TCP协议),通过三次握手过程建立好TCP连接
⑤Http请求资源
TCP连接已经建立成功后,浏览器向服务器发送Http请求,请求得到网页资源;服务器收到请求后做出Http响应,返回数据资源到浏览器
⑥Http响应资源
浏览器收到Http响应,得到所返回资源数据
⑦处理响应资源
解析响应资源,渲染页面,并且存入缓存
注意:因为Http请求资源的方式有多种,所以页面渲染过程中,可能所以资源一起响应,可能先显示文本资源
5.get请求和post请求的区别

浙公网安备 33010602011771号