一.谈一谈TCP/IP网络及协议
1.TCP/IP网络协议有5层,分别是:应用层、传输层、网络层、数据链路层、物理层。
OSI网络协议中将应用层细化为:应用层、表示层、会话层
2.应用层协议有:DNS协议(域名解析协议)、HTTP协议、HTTPS协议等
3.传输层协议有:UDP协议、TCP协议等
4.网络层协议有:IP协议等
5.数据链路层协议有:以太网协议等
二.谈一谈传输层UDP协议
1.UDP协议:无连接、不可靠传输、面向数据报、全双工。
2.UDP协议数据报报头是8个字节,其中包括:源IP、目的IP、报文长度、校验核个占两个字节。其中UDP报文载荷最多可以是64KB
3.UDP校验报文是否完整,可以采用将报文信息累加冗余的方式,与检验和做对比。
4.传输信息必须是一个完整的数据报的格式
三.谈一谈传输层TCP协议
1.TCP协议:有连接、可靠传输、面向字节流、全双工
2.有连接:在客户端与服务器进行通信时,必须出现要建立连接,获取双方信息,TCP采用三次握手的方式建立连接。
3.可靠传输:TCP中体现可靠传输的是确认应答机制与消息重传机制。
4.面向字节流:TCP传输时,可以以字节为单位进行传输,TCP报头中有32为序列号和32为确认序号,该序号为发送的第一个字节的的大小。
四.TCP协议中为什么是3次握手,为什么不是2次或者是4次?
1.TCP的确认应答机制是为了让客户端与服务器建立良好的连接。
2.三次握手是为了确认传输链路是否通畅。
3.三次握手是为了确保客户端和服务器的接收和发送功能都没有问题
4.三次握手是为了客户端与服务器功能共同协商一些重要的参数
5.如果是2次握手,客户端和服务器的接受和发送功能没有办法保证
6.如果是4次握手,由于发送的syn与ack都是系统内核完成的,当服务器接收到客户端发来的syn后,向客户端翻反应的ack与syn时机是一样的,所以这两个是一起发送过去的,如果拆开发送那么只会增加通信次数,没有必要。
五.谈一谈TCP协议中滑动窗口
1.滑动窗口使得TCP在协议在传输过程中变得高效,连续多个传输数据报,不再是等一个数据报传过去等待应答后再传第二个。
2.滑动窗口初始大小在客户端与服务器建立连接时就商议好的,当服务器接收到数据报后,首先会将其放入缓冲区中,该缓冲区类似于一个阻塞队列,在缓冲区将收到的数据报进行排序,如果有重复的会进行去重,如果有缺失的部分服务器会将缺失的字节序列号以ack报文的形式告诉客户端,要求客户端进行重传,该过程也被称为快速重传机制。
3.在传输的过程中,滑动窗口的大小随着流量的改变而变化,如果服务器端缓冲区中顺关于的空间不多了,会向客户端发送ack报文,并告诉客户端控制一下发送的流量。
六. 谈一谈是什么流量控制、拥塞控制
1.流量控制与滑动窗口有关,当一组TCP数据报到达服务端,此时首先会进入缓冲区,缓冲区进行排序、去重等操作后,再交给服务器处理,如果此时缓冲区中的空间不足时,向客户端发送ack报文告诉客户端控制一下流量。
2.窗口大小再TCP报文中给出是16位,难道意思就是说是最多一次性传64kb的数据吗?答案并不是,在报头的选项中有一个窗口扩展因子,当传送数据过大时,此时窗口的大小可以变为窗口大小<<负载因子。当然此时只有当ack为1时才生效
3.拥塞控制是针对于传输的数据链路层上,传输过程中如果某一个节点的负载过大,会导致整个系统瘫痪,传输效率下降,因此当传输过程中TCP引入"慢启动"机制,也就是先法少量的数据探探路,摸清当前的网络拥堵状态,再按照多大的速度传输数据。
七.什么是延时应答和捎带应答机制
1.延时应答是提升传输效率的方式之一,当服务端的缓冲区域剩余空间较少时,先不要着急向客户端发送ack报文让其快速控制流量,首先可以延时一小会,让服务器端对缓冲区的报文进行一部分处理,再向客户端发送ack报文。
2.捎带应答是在延时应答的基础上做出的进一步提升,有了延时应应答,此时服务器向客户端发送的业务数据和ack报文可以一起向客户端进行传达,因为ack的传输时间被延迟,可以与携带业务的数据报一起传过去。
八.什么是面向字节流?
1.面向字节流指的是客户端有一个发送缓冲区,服务器端有一个接收缓冲区,当客户端这边如果发送的字节过长,可以在发送缓冲区被分为多次发送。当客户端这边如果发送的字节较短,可以在发送缓冲区中进行等待,等到拼接成合适的长度后再发出。
2.面向字节流存在一个粘包问题:就是发送过去的数据从数据报中拆出来的时候,不知道从哪里开始拆。此时就造成粘包问题
3.粘包问题的解决方案:可以设定标识符,每段字节后跟一个标识符。可以在报头中设定字节的长度,每次按照该长度去读取准没问题。
九.什么情况下会触发NAT机制?
1.NAT机制是在路由过程中,局域网的客户端想要访问到广域网的服务器时,此时会触发NAT机制。
2.NAT机制是将局域网中的设备的IP和端口号进行了转换后向其他广域网发送请求。具体是将局域网中的设备IP转换为路由器或者交换机的ip,将局域网中的端口号经过自动编号发送,此时路由器或交换机会将局域网中的旧的源IP和旧的端口号保存下来,等到接收到服务端发来的响应后映射回去。
十.HTTP与HTTPS的区别?
1.HTTPS相较于HTTP做了加密处理,使其访问更加安全。
2.HTTPS需要拿到公证机构证书,有了公证机构又对其作了非对称加密和对称加密。
3.URL的前缀不同。
十一.浏览器上输入网址后做了什么?
1.浏览器中的域名首先被发送至DNS域名系统解析服务器中,将域名解析为对应的IP
2.将输入的网址构造为HTTPS请求发送。
3.客户端与服务器建立TCP连接,通过3次握手建立连接。
4.将HTTPS请求构造成TCP数据报发送。
5.通过路由器时,源IP与源端口经过NAT机制构造出新的源IP与源端口进行发送。
6.通过网线传到对面的服务器端。
十二.cookie和session的区别
1.cookie时存在客户端上的,一般每个域名都有对应的cookie存储区,互不影响
2.cookie中的值一般是由服务器返回给客户端的,一般存的是sessionId。
3.session中的值是我们通过客户端设置的,当客户端第一次访问浏览器时,会设置一个session并传给服务器并将其保存在服务器端,服务器会将sessionId作为返回值返回给客户端,存储在浏览器中,下一次访问时,首先会检查cookie中的值,看看能不能找到对应的session。
十三.get与post的区别
1.get一般用于向服务接收数据,post一般用于向服务器发送数据。
2.get一把将请求信息放在url中作为queryString。post一般将请求消息放在data正文中,像是一般是json格式,
3.get具有"幂等性",但是post没有"幂等性"要求。
4.get请求是可以被缓存的,post的请求不能被缓存。