1. TCP/IP

1.1 传统的OSI(Open System Interconnection)参考模型是7层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。而TCP/IP是5层参考模型:应用层(HTTP、FTP等协议)、传输层(TCP、UDP协议)、网络层(IP协议)、数据链路层(ARP协议,IEEE802.3以太网协议)和物理层

1.2 TCP和UDP的区别:①TCP面向连接,传输数据需要先建立连接,UDP是不需要连接的;②TCP提供可靠的服务,保证数据无差错、不丢失,UDP则不保证可靠性;③TCP传输效率低,UDP传输效率高。

1.3 TCP怎么实现可靠的连接:①三次握手和四次挥手;②校验和、ACK应答、丢包重传、流量控制和拥塞控制等机制。

1.4 三次握手和四次挥手:①客户端发送同步序列号K(字符表示是SYN K);②服务端接受到该序列号,响应客户端序列号K+1的同时发送一个同步序列号M(ACK K+1, SYN M);③客户端接收到响应序列号K+1,同时响应服务端序列号M+1(ACK M+1)。为什么是三次呢?因为TCP是双向通道,要确保接受和发送都没有问题,只有当每次发送的序列号,得到响应才证明收发都没有问题,下面借用潜行前行公众号的一张图。那么挥手为什么是四次呢?因为客户端要关闭连接时,服务端的数据可能还没传输完成,所以先响应客户端,等到真正传输完成再发送指令FIN。

     

         

1.5 丢包的超时重传:①由于网络问题,在客户端发送和接收过程中存在丢包情况;②发送时丢包,那么客户端在规定时间内就收不到服务端的响应,规定时间后会重传。③发送是成功的,但是服务端的响应没被客户端收到,规定时间后客户端仍会重传,但是服务端通过序列号(通过序列号可知目前接收的数据,以及下一次要接收的数据)发现该数据已接收,那么直接丢弃,然后继续响应上次的序列号。④如果在重传数据后,网络恢复,之前丢包的数据、响应送达客户端或服务端,这种情况怎么处理?这时通过序列号就可以很好的知道数据或者响应正不正确了,从而决定是丢弃还是处理。

1.6 流量控制:接收方将自己缓冲区剩余容量大小放入TCP的“窗口大小”字段(滑动窗口),通过ACK报文响应给发送端,设定发送端发送数据的大小。

1.7 拥塞控制

1.7.1 慢启动和拥塞避免:①慢启动:发送端会维护一个拥塞窗口(缩写为cwnd),初始可发送的报文段是1,然后每成功传输一次数据,拥塞窗口大小翻倍(指数增长);②拥塞避免:当慢启动的cwnd大小达到ssthresh(拥塞避免阈值)后,为了避免拥塞,每成功传输一次数据,拥塞窗口加1(线性增长)。③每次遇到网络拥塞(貌似没有具体的判断依据,通过网络负载和吞吐量决定),就会将拥塞窗口大小设为1,同时将ssthresh设为网络拥塞时拥塞窗口大小的一半。还是借用潜行潜行公众号的一张图,如下。

1.7.2 快重传和快恢复:①快重传:由于某个数据段的丢包,发送方在等待响应时发送的其它报文,接收方都只会响应丢包前的那个响应序列号,发送方只要连续收到3个重复的响应序列号,立即从响应序列号后的数据开始重传,避免了在等待丢包数据的响应时重复发送没用的数据,避免网络拥塞。②快恢复:数据包的丢失可能是因为网络阻塞导致,所以这个时候应该重新进行慢启动和拥塞避免过程;但有可能又不是网络阻塞导致,所以不走慢启动,直接走拥塞避免过程,将ssthresh和cwnd都调整为当前cwnd的一半,然后cwnd按照拥塞避免原则线性增长。

1.8 拥塞窗口和滑动窗口的区别:相同点都是控制发送数据的大小;不同点是拥塞窗口根据网络情况限制数据的传输,而滑动窗口根据接收方的缓冲区大小限制数据的传输。

1.9 粘包和拆包问题:程序需要发送的数据大小和TCP单次所能发送的报文长度(Maximum Segment Size, MSS)是不一样的。当需要发送的数据大于MSS,需要将数据拆分多次发送,称之为拆包;当需要发送的数据小于MSS,会考虑将多个数据一起发送,称之为粘包。解决:①使用特殊字符作为数据的结尾或开头;

1.10 TCP四种计时器:①重传计时器:用于在规定时间(通常是60秒)内没有收到响应报文,进行数据重传。②坚持计时器:当流量控制的滑动窗口大小为零的时候启动,当时间到了(通常是60秒)就发送一个报文进行探测。③保活计时器:避免TCP连接没有关闭而长期空闲,每次收到数据,就将计时器复位,默认设置为2小时④时间等待计时器:连接关闭时,并不马上就关闭,因为接收方可能还在传输数据,时间大小一般是30秒到2分钟

1.11 四次挥手时,客户端收到服务端的FIN后,需要等待2个MSL(Max Segment LifeTime)再进入Closed状态,为什么?①保证客户端发送的ACK报文能够到达服务端,有这个2MSL时间,那么当服务端没有收到ACK报文时重传FIN+ACK报文,客户端还可以再发送ACK报文;②可以让本连接的报文段从网络中清空。

1.12 TCP四次挥手时,服务端主动断开和客户端主动断开的区别。因为主动断开的一方有2MSL时间的TIME_WAIT状态,则会存在一段时间有较多连接处于TIME_WAIT状态,Windows默认是4分钟,有损性能。解决:进行相关参数的配置:如更改MSL的时间,开启TIME_WAIT状态的TCP连接重用,开启TIME_WAIT状态的TCP连接回收。MSL时间是不是也可以处于某个范围。

1.13 TCP自身可以分段和重组(最大分段大小,MSS);UDP不会分段,由网络层分片和重组(最大传输单元,MTU)

2. JavaWeb内容及HTTP协议

2.1 在浏览器地址栏输入一个网址,经历了哪些步骤?①域名解析(浏览器DNS缓存--》操作系统自身DNS缓存--》读取host文件--》本地域名服务器...根域名服务器);②进行TCP3次握手建立连接;③浏览器发送http请求;④服务器响应http请求;⑤浏览器解析响应内容并渲染。

2.2 HTTP(HyperText Transfer Protocol)协议:超文本传输协议,浏览器和服务器之间传输数据的一种协议。

2.3 HTTP协议的无状态:每一次HTTP请求都是独立的,之间没有联系。这就会出现上一次账户登录,但下一次进行一些账户操作时,不知道是对哪个账户操作的情况。所以通过cookie和session机制来保持“状态”。

2.4 cookie:① 服务器通知客户端保存键值对数据的一种技术,客户端有cookie后每次向服务器发起请求都会带上cookie;② cookie的生命周期控制:正数表示指定秒数后过期;负数表示浏览器关闭cookie就过期,默认设置;零表示马上删除cookie。③cookie的有效范围:上级目录设置的cookie,下级目录可以获取;下级目录设置的cookie,上级目录获取不到。

2.5 session:①维护客户端和服务器之间关联的一种技术,在服务器端保存,底层是cookie技术,依赖于名为JSESSIONID的cookie;②刚开始客户端发起请求没有数据,然后服务器收到请求如果要创建session,会先判断有没有,没有就创建,并且通过set-cookie命令告诉客户端创建cookie对象,之后客户端发请求都会带上该cookie;服务端再通过该cookie的数据可以找到之前创建好的session对象。

2.6 常见状态码:200:请求成功;301:永久重定向,并且之后访问会直接使用得到的永久重定向地址,常见的是域名跳转;302:临时重定向;303:也是临时重定向,但以get方式发起重定向;304:发起的请求使用缓存的资源;307:临时重定向,和303一样,但是不会把post重定向请求改为get方式;400:客户端发起的请求有误;403:资源访问被拒绝;404:资源找不到;500:服务器内部发生错误。

2.7 304:首先判断资源是否过期,如果未过期,不会发起请求,直接使用浏览器缓存的资源,如果过期,那么向服务器发起请求。如果服务器资源文件有改动,那么返回新的资源文件以及200状态码;如果未改动,那么返回304状态码,然后浏览器使用之前缓存的资源文件。缓存过期有两种方式,cache-control和expires两种,cache-control优先级更高。资源文件改动判断:客户端第一次请求资源文件后,服务器端的响应头会带有last-modified字段;之后资源过期,客户端再发起请求,在请求头中会带有if-modified-since字段(就是第一次的last-modified字段内容),然后服务端会拿这个值和资源文件的最后修改时间对比,如果相等就返回304,让客户端使用过期的数据;如果不相等,重新响应新的资源文件并返回状态码200。

2.8 HTTP请求报文:①三部分:请求行、请求头和请求体,请求头和请求体之间有空行;②请求行:请求方式(GET还是POST等),请求资源路径,请求的协议和版本号。

2.9 HTTP响应报文:①三部分:响应行、响应头和响应体,响应头和响应体之间有空行;②响应行:响应的协议和版本号,响应状态码,响应状态描述符。

2.10 HTTP协议的1.0和1.1区别:1.1版本引入了长连接的概念,避免了1.0版本单个请求结束就关闭连接的弊端(建立连接和关闭连接耗费资源),但是时间长了之后,服务端会有较多连接。

2.11 HTTPS和HTTP的区别:HTTP是明文传输,HTTPS则在HTTP基础上加了SSL/TLS(Secure Socket Layer和Transport Layer Security),因此具备内容加密、身份认证、数据完整性(确保数据不被改变)的功能。

2.12 内容加密:分为非对称加密和对称加密。对称加密:加密和解密使用相同的算法,不够安全;非对称加密:加密和解密使用不同算法,得不到解密的私钥,就算有加密的公钥也解析不了非法拦截的用户数据。

2.13 身份认证:如果非法用户将自己私钥计算的签名和公钥发给客户,那么客户端验证会通过。为了避免这种情况,数字证书需要经由CA第三方机构统一管理,如果不被CA认证通过,那么认证失败。

2.14 数据完整性:发送者对响应报文进行hash运算,得到Digest,然后再用私钥加密,得到数字签名,最终接收者通过对比公钥解析数字签名得到的Digest和数据hash运算的Digest,从而确定数据是否被修改过。

2.15 HTTP1.1和HTTP2.0的区别:HTTP1.1虽然已经实现了管线化(不等待响应,可发送下一个请求),但是客户端还是按照请求的发送顺序接收响应。会出现线头阻塞情况(某个请求耗时会阻塞其它请求)。HTTP2.0通过多路复用,可以避免线头阻塞情况。

3. FTP协议

3.1 FTP仅基于TCP,不支持UDP。

3.2 FTP使用2个端口进行数据和指令的传输,然后分两种工作方式——PORT和PASV模式

3.3 PORT模式(服务端去连接客户端):①客户端通过端口 N 先和服务端的命令端口 21 建立TCP连接;②然后客户端发送命令 PORT N+1 到服务端;③服务端先响应 ACK,接着服务端从数据端口 20 发起一个到客户端 N+1端口的连接;④最后客户端从 N+1 端口响应一个 ACK。

3.4 PASV模式(客户端去连接服务端):①客户端通过端口 M 和服务端的命令端口21建立TCP连接;②然后客户端发送命令 PASV 到服务端;③服务端返回 PORT X;④客户端通过 M+1 端口向服务端的数据端口 X 发起连接,然后服务端向客户端返回一个 ACK。

3.5 客户端没有公网IP,所以一般客户端使用PASV方式,才能连接FTP服务器。

TCP/IP面试常问合集,JavaWeb内容及HTTP协议相关推荐

  1. TCP/IP面试常考题目

    TCP/IP(附解析) 1. OSI与TCP/IP各层的结构与功能,都有哪些协议. 2. TCP与UDP的区别. 3. TCP报文结构. 4. TCP的三次握手与四次挥手过程,各个状态名称与含义,TI ...

  2. 测试主管面试必问合集:get 与 post 的区别

    疑问收录解答 01 GET与POST的区别 (1)GET请求用来获取数据资源,POST请求用来创建.发送数据资源.(详见下方补充说明) (2)GET无请求主体,POST有请求主体. (3)GET有幂等 ...

  3. 网络基础 TCP/IP协议面试常问知识点

    网络基础 TCP/IP协议面试常问知识点 ****************** 如有侵权请提示删除 ********************* 1.网络包的组成: 报头/起始帧分界符--MAC头部-- ...

  4. 给大家提供一些面试常问的问题

    给大家提供一些面试常问的问题 1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private :     私有成员, 在类的内部才可以 ...

  5. Java面试常问计算机网络问题

    转载自   Java面试常问计算机网络问题 一.GET 和 POST 的区别 GET请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?na ...

  6. 计算机考研复试面试常问问题 计算机网络篇(上)

    计算机考研复试面试常问问题 计算机网络篇(上) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更 ...

  7. Linux C工程师面试常问技术要点

    前言 最近在考虑跳槽,整理一下面试常问的东西,在给自己复习的同时也希望给需要面试的朋友有帮助~ 系统编程常问技术点 物理内存+虚拟内存 内存分区(栈+堆) 进程+线程 锁 分片 中断+系统调用 同步+ ...

  8. 数据库面试常问——for考研复试面试

    关于数据库的一些面试常问问题 前言: 本人22考研党,已上岸,发一些复试准备整理的资料作为对考研准备的一个收尾.由于近几年基本都是线上复试,线上的话会更加注重概念的考察,本人在复试准备期间搜集了面试题 ...

  9. 计算机考研复试面试常问问题 计算机网络篇(下)

    计算机考研复试面试常问问题 计算机网络篇(下) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更 ...

最新文章

  1. 工作5年左右的程序员如何在职业瓶颈期内快速提升自己的身价?提升后如何有效变现自己的高质量技能?...
  2. linux查看进程占用pcu,Linux运维:如何使用ss代替netstat命令
  3. 在JUnit测试中使用Builder模式
  4. Docker常用命令、超实用、讲解清晰明了(rm、stop、start、kill、logs、diff、top、cp、restart ...)
  5. windows os x linux比较,对比测试:Ubuntu 11.04 vs Win7 vs OS X 10.7
  6. C#通用类库--短信猫操作类1(原始AT命令)
  7. access 报表中序号自动_Access中自动编号的字段ID如何让它重新从初始值1开始编号...
  8. JavaScript学习 第三课(三)
  9. 11. Flash助手推荐的弹窗广告怎么删除
  10. arm9有多少个寄存器
  11. apk自行修改后的操作(软件安装不了,安了打不开,闪退)
  12. Centos桌面版无法打开Chrome浏览器
  13. 绕过AMSI详细指南:如何利用DLL hijack轻松绕过AMSI
  14. 微信小程序 | 一文总结全部营销抽奖功能
  15. 上传声音 微信小程序_图文详解微信小程序中调用录音功能和音频播放的方法...
  16. SyntaxError: (unicode error) ‘utf-8‘ codec can‘t decode byte 0xca in position 0: invalid continuati
  17. CC2530—MQ-2气敏式烟雾传感器
  18. Mybatis源码研究序
  19. 【大数据】Hadoop—— 三大核心组件理论入门 | 完全分布式集群搭建 | 入门项目实战
  20. 单价多少元一千克在c语言中怎么表示_小学三年级数学《克和千克的认识》说课稿范文...

热门文章

  1. abap 向上取整CEIL和向下取整FLOOR
  2. ABAP动态取得数据的方法
  3. MIRO/MIR7有何差别
  4. 饭后为什么不宜喝冷饮?
  5. SAP作业类型应用简介
  6. The true love
  7. ABAP选择屏幕的例子
  8. 文娱打卡百强,重工智造升级,互联网进入“长沙时间”
  9. python mysql股票分析_一颗韭菜的自我修养:用Python分析下股市,练练手
  10. opt文件夹下没有ros_ubuntu16.04下ROS操作系统学习笔记(二)