本文为作者原创,转载请先与作者联系。 同发于博客园和简书 面试过程中,相对算法/操作系统/数据库部分,网络方面的知识可能算是比较简单的了。本文主要讲述TCP/IP协议的基础知识,描述的比较浅,先做一个铺垫,网络方面的具体知识比如:iptable/nmap/curl/ssh和sql注入攻击等我将在以后结合Linux补充几篇博文来描述。 描述一下TCP三次握手的过程接下来我们根据下面这幅图来解释一下TCP三次握手。p.s: 每个箭头代表一次握手。 第一次握手 client(客户端)发送一个SYN(seq=x)包给server(服务器),然后“期待”server的ACK回复。p.s: seq为sequence(序列)的缩写,ACK为acknowledge(通知)的缩写。 第二次握手 server(服务器)接收到SYN(seq=x)包后就返回一个ACK(ack=x+1)包,意思是告诉client(客户端):我已经成功接收到你的SYN包。 并且自己也发送一个SYN(seq=y)包,然后”期待“client(客户端)的ACK回复。 第三次握手 client(客户端)接收到server(服务器)发回的ACK(ack=x+1)包后,然后就把自己的状态设置为ESTABLISHED(已建立连接)。 然后根据server(服务端)发回的SYN(seq=y)包,返回给”期待"中的server一个ACK(ack=y+1)包。期待中的server收到ACK回复,也把自己的状态设置为ESTABLISHED(已建立连接)。到此TCP三次握手完成,client与server可以正常进行通信了。 关于TCP滑窗/阻塞处理/四次分手等问题,以后我会继续在这篇文章下面补充。 谈一下TCP/UDP的区别和优缺点TCP协议是可靠的而且面向连接,它可以保证信息到达的顺序,UDP和IP协议都是不可靠的协议。 TCP面向字节流,UDP面向报文。 TCP数据传输慢,UDP数据传输快成本低,早期的QQ就是采用的UDP。 描述一下计算机之间通信的原理计算机之间是通过ip和port(端口)来进行通信的,每一台计算都具有一个独立ip地址(在浏览器里面输入ip.cn就可以查看你独有的公网ip地址),和65535个port(端口)。计算机每一个通过网络通信的程序都占有一个独立的port,通过ip我们能确定我们要访问的计算机,而port(端口)帮助我们要和计算机上的哪一个程序通信。 p.s: 在linux/mac上我们可以通过netstat -tulnp命令查看本机上哪些端口被占用了。比如在我的计算机上,MySQL占用了3306,Tomcat占用了8080,Nginx占用了80,DNS服务器占用了53,Shadowsocks占用了1080。 TCP/UDP端口列表大全。 说一说在浏览器中输入url后的整个响应过程下面我们以我们在浏览器中输入segmentfault.com为例子来讲解。 查找域名(segmentfault.com)对应的IP地址。在linux/mac下可以通过dig命令来查询。 浏览器根据查询到的IP地址向segmentfault的服务器的80端口发送一个HTTP请求(request) 后台PHP接收到请求(request)后,发回一个网页。 浏览器收到回复后,解析返回的网页。 上面只是简要的描述,如果要详细展开的话在实在太大了。面试过程中,应该详细描述DNS解析域名的过程,对于浏览器发送的request和response的整个流程可以结合TCP/IP四层模型和OSI七层模型来展开,而对于服务器是如何处理请求的,可以根据网站采用的后台框架详细展开描述。 介绍一下TCP/IP四层模型和OSI七层模型这里可以参考维基百科上的解释,解释的非常清晰,这里我就不重复了。 文章未完,写的比较匆忙,晚上来详细补充。 |
小黑屋|在路上
( 蜀ICP备15035742号-1 )
GMT+8, 2025-7-7 20:21
Copyright 2015-2025 djqfx