AI智能
改变未来

面试官都震惊,你这网络基础可以啊!

目录

  • 网络
  • 1.对网络的基础认识
  • <1>.组网方式
  • <2>.OSI七层模型
  • <3>.TCP/IP五层(四层模型)
  • <4>.对封装分用的理解
  • 2.网络数据传输
    • <1>局域网
    • (1)认识IP和MAC
    • (2)网络数据传输的特性
    • (3)网络数据传输流程
    • 1)网络互联的方式
    • 2).局域网交换机组网的方式
    • 3)局域网交换机+路由器组网的方式
  • <2>广域网传输流程
  • 3.UDP和TCP
    • <1>UDP协议
    • <2>TCP协议(可靠的传输协议)
    • (1)TCP相关概念
    • (2)确认应答机制
    • (3)超时重传机制(安全机制)
    • (4)连接管理机制(安全机制)
    • (5)滑动窗口(效率)
    • (6)流量控制机制(安全机制)
    • (7)拥塞控制机制(安全机制)
    • (8)延迟应答机制(效率)
    • (9)捎带机制(效率)
  • <3>TCP的总结
    • (1)TCP特性
    • (2)面向字节流
    • (3)粘包问题
  • <4>UDP VS TCP
    • (1)UDP和TCP的特性
    • (2)如何使用UDP进行可靠传输
  • 4.MTU和IP协议
    • <1>MTU协议
    • <2>IP协议
  • 5.HTTP和HTTPS
    • <1>HTTP
    • (1)Http的前置知识
    • 1)网络数据传输
    • 2)认识URL
  • (2)HTTP
    • 1)域名
    • 2)http协议格式
    • 3)http请求方法
    • 4)http状态码
    • 5)http头信息
  • <2>HTTPS
  • 6.正向代理和反向代理
    • <1>.正向代理服务器
    • <2>.反向代理服务器
  • 7.网络面试题
    • <1>.说一说TCP/IP模型,以及都做了哪些事情
    • <2>.说一说TCP的三次握手四次挥手
    • <3>IPV4和IPV6的区别
    • <4>TCP和UDP的区别
    • <5>如何用UDP进行可靠传输
    • <6>正向代理和反向代理的区别
    • <7>说说HTTP和HTTPS
    • <8>https中SSL握手的过程
    • <9>DNS解析(DNS找IP)
    • <10>GET和POST的区别
    • <11>常见的状态码
    • <12>输入一个URL到浏览器中,会发生什么

    网络

    1.对网络的基础认识

    <1>.组网方式

    1.网络互联:使用集线器将少量主机连在一起

    1. 局域网(LAN):使用交换机和路由器将主机连接,可以自由组合三种方式

      组网方式:

      <1>.交换机

      <2>.路由器

      <3>.交换机+路由器

    3.广域网(WAN):广域网和局域网知识相对的概念

    例如:一个学校之间的网络就可以成为局域网,而一个国家,多个国家之间可以称为广域网,覆盖的区域不同

    组网方式:公网上,网络结点组成,每一个结点可以是:

    <2>.OSI七层模型

    1.对协议的简单理解:本质上是数据格式的定义。而知名的数据格式,大家普遍遵循的规定,就属于协议

    2.OSI七层模型:一种网络分层的设计方法论,比较复杂且不实用,落地几乎都是TCP/IP四层,五层模型

    <3>.TCP/IP五层(四层模型)

    五层模型:除去OSI的表示层和会话层

    四层模型:除去OSI的表示层,会话层和物理层

    注意:

    应用程序实现对应用层的封装分用

    对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;(四.层封装分用)对于一台路由器, 它实现了从网络层到物理层;(下三层封装分用)
    对于一台交换机, 它实现了从数据链路层到物理层;(下两层分装分用)
    对于集线器, 它只实现了物理层;

    <4>.对封装分用的理解

    1.封装:发送数据时,从高到低的顺序,按照对应的网络分层协议对数据进行包装

    例如:

    2.分用:封装的逆过程:接收数据时,从低到高的顺序,按照对应的网络分层协议,解析数据

    例如:

    2.网络数据传输

    <1>局域网

    (1)认识IP和MAC

    IP:

    IP的格式:xxx.xxx.xxx.xxx
    IP由四个部分组成,每个部分都是0-255.
    网络号:前三个部分组成(用来标识网段),前三个部分相同,标识在一个网段
    主机号:最后一个部分用来标识主机号
    IP分为A-E五大类,部分范围是局域网IP,部分是广域网IP,可以根据规范,知道某个IP是局域网IP还是公网IP
    注意: 局域网内(局域网IP):网段唯一,同一个网段,主机号唯一
    公网(公网IP):公网IP是唯一的

    MAC:

    和网卡硬件绑定的,全球唯一
    作用:网络数据传输定位网卡硬件的位置,一个主机可能有多个网卡(例如蓝牙连接,无线连接,有线连接的网卡),电脑硬件定位数据发送的目的位置只能使用MAC

    总结:
    IP地址描述的是路途总体的起点和终点。(给人用的,网络主机的逻辑地址)
    MAC地址描述的是路途上的每一个区间的起点和终点(给电脑硬件用的,网络主机的物理地址)

    (2)网络数据传输的特性

    1.IP,MAC起的作用
    2.封装分用——发送数据从高到低封装,接收数据从低到高分用
    3.结合IP,MAC,理解网络数据传输,本质上是一跳一跳的传输数据

    首先根据目的主机发送http请求,从源IP发送数据到目的IP
    从源MAC(1)发送数据到目的MAC(2),然后MAC(2)对数据进行封装和分用,再以MAC(2)为源MAC,目的MAC为MAC(3),以此,发送数据到最终目的MAC。
    注意: 接收数据报的主机:可能在一些情况下(广播或者转发),出现目的MAC不是我,我也能收到的情况(后面会提到)。

    五元组:
    源IP,目的IP,源端口,目的端口,协议号

    IP:标识主机,给人用
    源IP:发送数据的主机
    目的IP:接收数据的主机

    端口号:
    源端口:标识发送数据的进程
    目的端口,标识接收数据的进程
    协议号:进程需要封装,解析数据报的数据格式

    DNS协议:
    作用:域名转IP

    主机/路由器:都存在DNS缓存
    域名查询的方式:上图树形结构从下往上查找(缓存,域名服务器)。
    先在主机/路由器的DNS缓存中找,如果找不到,依次向上

    特殊的IP,域名:本机IP为127.0.0.1,本机域名为localhost

    (3)网络数据传输流程

    ARP/RARP协议:
    主机中有ARP缓存表
    ARP协议:IP转MAC
    RARP协议:MAC转IP

    注意:交换机和集线器自己是没有MAC地址的,都是通过转发(不会修改源MAC和目的MAC)
    交换机有MAC地址转换表,可以根据MAC找到对应的端口,而集线器没有这个功能

    1)网络互联的方式

    首先介绍集线器:如上图,网络数据传输时,直接转发到其他所有端口(工作在物理层)

    网络数据传输的过程:

    1.ARP缓存表找到了

    1.主机1发送数据到主机3(http://主机3:80)
    2.主机1查找本机的ARP缓存表,根据ARP协议,找到目的MAC
    3.数据报由主机1,发送到集线器(数据报中的源MAC(主机1),目的MAC(主机3)真实的数据报
    4.集线器转发数据报到除主机1的其他所有相连的主机(主机2,主机3)
    5.主机2接收:数据报中,目的MAC不是我,丢弃
    主机3接收,数据报中,目的MAC是我,接收
    目的IP是我,交给对应端口处理,如果不是我,执行上述网络传输(一跳一跳的过程)

    2.ARP缓存表没找到

    1.主机1发送数据到主机3,http://主机3:80
    2.主机1查找本机的ARP缓存表,发现找不到
    3.主机1发送广播数据报(非真实数据,只是要求对应主机返回MAC:我要IP为主机3的MAC,谁是主机3,快告诉我)

    注意:

    4.集线器转发到主机2,主机3
    5.主机2接收:要求的IP不是我,丢弃
    主机3接收:要求的IP是我,返回我的MAC
    6.主机1收到主机3的返回数据(IP,MAC)更新自己的ARP缓存表
    7.主机1发送真实的数据到主机3

    注意:使用集线器的缺陷
    网络冲突,这样构成的网络区域叫冲突域/碰撞域(例如,房间里有多个人说话,那么其中某一个人说话就听不清楚了)

    2).局域网交换机组网的方式

    首先介绍交换机,交换机的作用:
    MAC地址转换表:保存连接的主机MAC和端口的映射,目的MAC是谁,直接转发到对应的端口(不像集线器,发送到所有端口),不会产生冲突域。

    1.主机1发送数据到主机3 ,http://主机3:80
    2.主机1查找本机的ARP缓存表,如果找到,主机1发送数据到主机3。如果找不到,发送广播数据报,让IP为主机3的告诉我,你的MAC
    3.交换机转发到其他所有端口(广播)
    4.主机2丢弃,主机3返回自己的MAC
    5.交换机知道主机3的MAC,主机1知道主机3的MAC(更新ARP缓存表)
    注意:上述五个步骤,都是根据IP找MAC,和集线器的流程相似,下面的步骤时根据MAC找端口
    6.主机1发送真实数据给交换机
    7.交换机查找自己的MAC地址转换表,通过MAC找端口,发送数据到对应的端口
    8.主机3接收,目的MAC是我,目的IP也是我
    这种网络数据传输的方式就像:先问张三的手机号,再打电话给张三,对别人没有影响

    3)局域网交换机+路由器组网的方式

    注意:单独由路由器组网的方式,和上述由交换机单独组网的方式相同
    首先介绍路由器,这里介绍两种:
    <1>LAN口连接局域网,为主机分配局域网IP,分配的局域网IP都是一个网段(路由器下连接多个主机的类型)
    路由器还有个网卡:绑定局域网的IP,和下面连接的主机进行信息交互用的

    <2>LAN口是网卡。每个LAN口都可以连接类似交换机组网的方式

    主机上的网络信息:

    第二种路由器组网方式:

    1.主机1发送数据到主机2:http://192.168.2.y:8080/xxx
    2.通过目的IP+子网掩码,计算出目的主机和本机是否在一个网段
    3.如果是,不需要使用路由器,和上述使用交换机组网方式一样
    4.如果不是,表示我主机1和交换机处理不了,要发送给网关转发(网关就类似于IP的管理者,能查询其他主机的IP)
    5.数据报发送给网关设备

    目的MC:通过路由器网关的IP在主机1的ARP缓存表中,获取网关的MAC
    6.路由器接收到数据报,分用:物理层到网络层,网络层分用,所有可以获取到目的IP
    7.路由器查找自己的ARP缓存表(IP找MAC)
    8.找不到,路由器发广播,主机2在哪,告诉我你的MAC
    9.有了MAC,直接发到主机3

    <2>广域网传输流程

    1.NAT和NAPT

    NAT协议:局域网IP映射公网IP
    NAPT协议:局域网IP+局域网端口映射—–>公网IP+公网端口

    2.传输流程

    结合上图,理解广域网传输流程
    首先:主机1发送http://www.baidu.com网络流程

    传输流程
    1首先主机1发送http请求,使用DNS协议:进行域名转IP
    域名转IP:首先在本机DNS缓存表找,如果找不到—->向上查找——>如果根域名服务器也找不到,表示公网上没有该域名的主机

    2. 找到IP,数据报IP部分,PORT部分都有了:

    1. 根据目的IP计算是否和主机在同一个网段
      主机1的IP+子网掩码 计算出——>主机1的网段
      目的IP+子网掩码 计算出——->目的主机的网段
      通过上述计算,判断目的IP和主机是否在同一个网段

    2. 如果是同一个网段,和局域网传输一样
      如果不是同一个网段:发送数据到网关
      找网关的MAC:

    3. 找到网关的MAC之后,将http数据重新封装,交由交换机转发
      交换机转发:在MAC地址转换表(MAC映射端口),通过目的MAC找端口(交换机的屁股口)
      注意:这个过程没有封装和分用

    注意:前五个步骤,和路由器组成的局域网传输流程一样 参考:局域网传输

    1. 路由器接收,分用数据报

    注意:路由器会根据最短路径算法,计算出下一个发送数据的设备,会离目的IP更近一步

    7. 上述步骤之后,数据报由局域网到广域网进行传输
    路途中的设备:

    8. 数据报到达百度服务器之后

    **9.**数据由百度服务器返回,路途上经过的设备传输流程和步骤七相同(但是不一定是原路返回)
    **10.**路由器1接收响应数据(对接收的数据进行分用,修改,封装)

    11. 之后的步骤,和局域网传输相同
    主机接收数据报,分用

    3.UDP和TCP

    <1>UDP协议

    UDP协议端格式:

    16位UDP校验和作用:类似于藏头诗,双方约定好的校验数据,进行数据校验

    UDP的特性:
    1.无连接:没有建立连接就发数据
    2.不可靠:没有类似TCP保证数据传输的安全机制,(连接管理机制,确认应答机制,超时机制
    ,)效率更高。
    3.面向数据报:只能一次接收(系统级别的操作:调用系统函数)
    4.没有发送缓冲区(发了消息就不管),有接收缓冲区
    5.数据最大为64k

    发送缓冲区:主机1发送完数据,发出之后就不管了
    接收缓冲区:
    如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次recvfrom, 每次接收10个字节;
    所以,接收数据的时候,发送100个字节,系统读取只调用一次,但是可以读取多次发来的其他100字节。
    但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;

    <2>TCP协议(可靠的传输协议)

    (1)TCP相关概念

    TCP协议:可靠的传输协议,安全,效率(有连接的可靠传输协议)
    设计TCP协议的理念:非100%安全,保证可承受范围内的安全,尽可能的提高网络传输数据的效率
    TCP协议端格式:

    六位标志位:
    URG: 紧急指针是否有效
    ACK: 确认号是否有效
    PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
    RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
    SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
    FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
    重点掌握ACK,SYN,FIN

    (2)确认应答机制

    主机A发送数据给主机B,每个数据都带了数据序号,主机B返回ACK应答
    每一个ACK都带有对应的确认序列号, 意思是告诉发送者, 我已经收到了哪些数据; 下一次你从哪里开始发

    作用:
    1.保证安全:保证‘我’发送的消息,对方必须确认并恢复
    2.保证多条数据确认信息的安全(告诉发送者,这次回应是对哪些数据,下次数据发送应该从什么时候开始)

    (3)超时重传机制(安全机制)

    超时重传机制触发:主机A发送数据给主机B,如果主机A在一个特定的时间间隔内没有收到来自主机B的确认应答,就会进行数据重发。

    没有收到确认应答的情况:1.主机A的数据报在发送的过程中丢了。2.主机B的ACK应答丢了

    超时时间的确定:TCP会根据当时的网络状态,动态的计算数据发送的速度,得到单次数据报发送的最大生存时间(MSL),超时时间即为(2MSL)

    了解:如果一直接收不到ACK,超时时间会如何处理?
    Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发的超时时间都是500ms的整数倍.
    如果重发一次之后, 仍然得不到应答, 等待 2500ms 后再进行重传.
    如果仍然得不到应答, 等待 4500ms 进行重传. 依次类推, 以指数形式递增(2的指数倍).
    累计到一定的重传次数, TCP认为网络或者对端主机出现异常, 强制关闭连接.

    (4)连接管理机制(安全机制)

    流程图:

    1.建立连接——>TCP三次握手:

    TCP——>三次握手的流程

    1.主机A发送syn到主机B,要求建立a到b的连接。此时主机A的状态为syn_sent
    2.主机B回复ack+syn(这里的ack和syn数据报本来是两个,但是仅标志位不同,所以可以合并,为什么不是四次的原因),要求建立b到a的连接,主机B的状态为syn_rcvd
    3.主机A回复第2步syn的ack。主机A的状态为established,建立A到B的连接
    主机B接收到第3步的数据报,建立B到A 的连接,主机B的状态置为established

    TCP——>三次握手中的问题:
    1.syn为什么有两个?
    双方的连接状态会持续,且连接是有方向的

    2.第二步中,为什么是ack+syn?
    本质上是一个发ack应答,一个发syn请求,而且是方向一致的两个数据报,可以合并

    3.第三步中,ack确认应答哪个?
    应答第二步的syn

    2.断开连接——>TCP四次挥手:

    TCP——>四次挥手的流程
    1.主机A发送fin到主机B,请求关闭a到b的连接
    2.主机B回复ack,主机B的状态置为close_wait
    3.主机B发送fin到主机A,请求关闭b到a的连接
    4.值即A回复ack(第三步的fin),状态置为time_wait
    主机B接收到第四步的数据报,状态置为closed
    主机A经过2MSL(超时等待时间)之后,状态置为closed

    TCP——>4次挥手中的问题
    1.第2步和第3步为什么不能和3次握手流程一样,进行合并
    原因:第2步是TCP协议在系统内核中实现时,自动响应的ack
    第3步时应用程序手动调用close来关闭连接的
    程序在关闭连接之前,可能需要执行释放资源等前置操作,所以不能合并(TCP协议实现时,没有这样进行设计)

    2.第3步中,主机A为什么不能直接设置为closed状态
    原因: 第4个数据报可能丢包,如果直接置为closed,丢包后无法重新发送数据。
    主机B达到超时时间之后,会重发第三个数据报,然后要求主机A再次回复ack

    3.服务器出现大量的close_wait状态,是为什么?
    服务端没有正确的关闭连接(程序没有调用close,或者没有正确使用)

    (5)滑动窗口(效率)

    如果没有滑动窗口,网路数据传输就是串行的方式(发送一次之后,等待应答,这个时间内,主机A无事可做,主机B也一样),效率比较差。

    使用滑动窗口可以解决效率的问题:类似于多线程的方式,并发的,同时发送多个数据报。
    如下图:

    1.窗口大小指的是无需等待确认应答而可以继续发送数据的最大值. 上图的窗口大小就是4000个字节(四个段).
    2.发送前四个段的时候, 不需要等待任何ACK, 直接发送;
    3.收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推;
    4.操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答;只有确认应答过的数据, 才能从缓冲区删掉;
    5.窗口越大, 则网络的吞吐率就越高;

    丢包问题:
    1.数据报丢包

    如上图:如果主机A发送的数据报丢包,主机B的ack应答,会根据主机A已经收到的连续数据报的最大值+1返回ack应答,当主机A收到三个同样的ack应答之后,会将丢掉的数据报进行重发(具有接收缓冲区,来记录已经接收的数据报的序号)

    2.ACK应答丢包:这种情况下, 部分ACK丢了并不要紧, 因为可以通过后续的ACK进行确认

    如果是滑动窗口的第一个包丢了,根据上述数据报丢包的情况,收到了第6个报的ACK应答,是从6001开始,说明第一个报主机B已经收到,所以ack丢包可以根据后序ack确定数据报主机B是否收到

    关于滑动窗口的几个问题:
    <1>.滑动窗口的大小:无需等待确认应答而可以继续发送数据的最大值
    <2>.如何确定窗口的大小:由拥塞窗口和流量控制窗口决定(滑动窗口大小=(拥塞窗口大小,流量控制大小))(后序会讲到)
    <3>.如何滑动:依赖于ACK的确认序号(ack确认序号前的数据报都已经接收到了),在该ACK确认序号前,当次并行收到了多少个数据报,就可以滑动多少
    <4.>为什么要有接收缓冲区和发送缓冲区:
    发送端的发送缓冲区:记录已经发送的数据——搜到对应的ACK应答,才可以清理该数据
    接收端的接收缓冲区:记录已经接收的数据——如果发送数据报丢包,才知道让对方重发

    (6)流量控制机制(安全机制)

    接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就
    会造成丢包, 继而引起丢包重传等等一系列连锁反应.

    接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;
    窗口大小字段越大, 说明网络的吞吐量越高;
    接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
    发送端接受到这个窗口之后, 就会减慢自己的发送速度;
    如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据
    段, 使接收端把窗口大小告诉发送端.

    当接收端使用流量控制窗口时,如何保证接受端的数据安全?
    告诉发送端,影响发送端滑动窗口的大小

    (7)拥塞控制机制(安全机制)

    少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞;

    发送端在网络状态不明的情况下,贸然发送大量的数据,会造成网络拥堵,需要先发送少量数据探路,设置拥塞窗口的大小

    如上图:如何确定拥塞窗口的大小
    此处引入一个概念程为拥塞窗口
    发送开始的时候, 定义拥塞窗口大小为1;
    每次收到一个ACK应答, 拥塞窗口加1;
    每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗口;
    为了不增长的那么快, 因此不能使拥塞窗口单纯的加倍.
    此处引入一个叫做慢启动的阈值
    当拥塞窗口超过这个阈值的时候, 不再按照指数方式增长, 而是按照线性方式增长

    (8)延迟应答机制(效率)

    举个例子:
    假设接收端缓冲区为1M. 一次收到了500K的数据; 如果立刻应答, 返回的窗口就是500K;
    但实际上可能处理端处理的速度很快, 10ms之内就把500K数据从缓冲区消费掉了;
    在这种情况下, 接收端处理还远没有达到自己的极限, 即使窗口再放大一些, 也能处理过来;
    如果接收端稍微等一会再应答, 比如等待200ms再应答, 那么这个时候返回的窗口大小就是1M;

    延迟应答类型:
    数量限制: 每隔N个包就应答一次;
    时间限制: 超过最大延迟时间就应答一次;

    (9)捎带机制(效率)

    在延迟应答的基础上, 我们发现, 很多情况下, 客户端服务器在应用层也是 “一发一收” 的,意味着当客户端给服务端发送请求时,服务端会给客户端响应数据,此时ACK就像可以搭请求数据的顺风车,一起发送。

    接收端响应的ACK,和主动发送的数据,可以合并返回。

    <3>TCP的总结

    (1)TCP特性

    TCP是有连接的可靠协议

    (2)面向字节流

    TCP既有发送缓冲区,也有接收缓冲区,数据没有大小限制

    调用write时, 数据会先写入发送缓冲区中;
    如果发送的字节数太长, 会被拆分成多个TCP的数据包发出;
    如果发送的字节数太短, 就会先在缓冲区里等待, 等到缓冲区长度差不多了, 或者其他合适的时机发送出去;
    接收数据的时候, 数据也是从网卡驱动程序到达内核的接收缓冲区;
    然后应用程序可以调用read从接收缓冲区拿数据;
    另一方面, TCP的一个连接, 既有发送缓冲区, 也有接收缓冲区, 那么对于这一个连接, 既可以读数据, 也可以写数据. 这个概念叫做 全双工

    (3)粘包问题

    在TCP的协议头中, 没有如同UDP一样的 “报文长度” 这样的字段, 但是有一个序号这样的字段
    站在传输层角度看,报文是一个一个按照顺序排序好放在缓冲区,但是站在应用层角度看,都是一个个数字,不知道哪个数字是一段保文的开头,也不知道哪一个数字是结尾。这就是粘包
    所以得明确一个报文的开头和结尾

    但是对应UDP来说:
    对于UDP, 如果还没有上层交付数据, UDP的报文长度仍然在. 同时, UDP是一个一个把数据交付给应用层.就有很明确的数据边界.
    站在应用层的站在应用层的角度, 使用UDP的时候, 要么收到完整的UDP报文, 要么不收. 不会出现"半个"的情况

    <4>UDP VS TCP

    (1)UDP和TCP的特性

    TCP用于可靠传输的情况, 应用于文件传输, 重要状态更新等场景;
    UDP用于对高速传输和实时性要求较高的通信领域, 例如, 早期的QQ, 视频传输等. 另外UDP可以用于广播

    (2)如何使用UDP进行可靠传输

    引入序列号, 保证数据顺序;
    引入确认应答, 确保对端收到了数据;
    引入超时重传, 如果隔一段时间没有应答, 就重发数据;

    4.MTU和IP协议

    <1>MTU协议

    MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.
    以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
    如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片
    不同的数据链路层标准的MTU是不同的;

    <2>IP协议

    1.协议头格式

    简单了解:
    4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.

    8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位 TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要(应用层协议需要不同安全/效率需求,此时可以设置服务类型来满足)

    下面三个字段都与数据链路层MTU相关:

    5.HTTP和HTTPS

    <1>HTTP

    (1)Http的前置知识

    1)网络数据传输

    网络数据传输,都需要使用相同的协议,双方约定好的统一规范(封装和解析的数据格式规范)
    协议:数据格式的约定
    目标:对于http协议来说,就是学习里边的协议格式。结合理论实操,进行程序的调试,http协议格式本身,http数据中,包括自己的数据格式

    2)认识URL

    (2)HTTP

    1)域名

    域名:基于DNS解析为IP
    IP:网络中定位主机的地址(逻辑地址)
    PORT:端口号,定位某个主机中唯一的进程(应用程序)
    url:url是全路径(绝对路径)
    uri:uri包含了url这种全路径,还包含相对路径
    特殊注意事项:输入域名直接访问,其实是访问/这个资源的路径。
    浏览器中,不输入端口号,是因为http协议的默认端口是80
    url中的请求数据:请求路径?key1=value1&key2=value2…
    问号前代表绝对路径,问号后代表请求的资源,数据

    2)http协议格式

    3)http请求方法

    重点了解get和post方法

    get和post方法的区别:

    1.get的请求数据只能放在url中,post的数据,可以放在url和请求体

    2.url长度有限制,所有get方法请求数据不能太多,冰球url只能传输ascli字符

    3.安全性将,post可以存放请求数据在请求体,相对更加安全

    其他区别:了解即可

    4)http状态码

    服务端返回(服务端设置),站在服务端的角色上,状态码都是对应的含义,站在客户端的角色上就不一定

    注:x表示0到9的数字
    重点掌握:

    5)http头信息

    <2>HTTPS

    HTTP是明文传输的,不安全
    HTTPS是基于HTTP+SSL/TSL来实现的,发送的数据需要加密,接收到的数据需要解密,比HTTP安全,但是传输效率比HTTP低

    <1>.前置知识:为什么需要HTTPS

    如上图:HTTP是不安全的,在传输的过程中,当客户端发送数据时,可能被钓鱼网站“欺骗”,将钓鱼网站当作服务端,或者直接被钓鱼网站窃取到数据,然后更改,造成不安全的影响

    此时需要解决:
    a:如何保证服务器是真实的,不是钓鱼网站?
    b:解决网络数据传输,使用明文,所有路途中的设备,如果获取到,存在信息泄露

    所以,就要使用到证书来解决安全问题
    a:权威的证书机构颁发的证书(安装浏览器时,初始化就内置权威证书)(解决上述a问题)
    b:https服务器证书(解决上述b问题)

    私钥,公钥,密钥:

    密钥:客户端,服务端用来加解密
    对称加密:使用同一个钥匙,来加解密
    公钥的生成(SSL握手阶段): 见SLL握手

    https中涉及的细节:
    1.使用公钥和私钥来生成密钥(这里是非对称加密生成密钥)
    2.密钥加解密真正的数据(这里进行的对称加密,效率比非对称加密高)

    如何获取并验证服务器证书:

    具体流程:流程
    1.用密钥进行加解密:
    <1>.客户端向服务端索要并验证公钥
    <2>.双放协商生成"对话密钥"
    <3>.双方采用“对话密钥”进行加解密通信

    2.HTTPS握手阶段(根据公钥私钥生成对话密钥)(以上1,2步需要保证对话密钥不被钓鱼)

    <1>.首先客户端给出协议版本号,一个客户端生成的随机数,以及支持的加密方式

    <2>.服务端确认双方使用的加密方式,给出数字证书,以及一个服务器生成的随机数

    <3>.客户端确认数字证书有效,然后生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数,发个服务端

    <4>.服务端使用自己的私钥,获取客户端发来的随机数

    <5>.客户端和服务端根据约定的加密方式,使用前面的三个随机数,生成密钥

    3.发送数据的阶段:
    客户端使用对话密钥加解密真正的数据
    服务端使用对话密钥加解密真正的数据
    注意:此部分被钓鱼也没有关系(对话密钥无法解密)

    6.正向代理和反向代理

    <1>.正向代理服务器

    <1>概念

    正向代理服务器:抓包工具
    正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。

    <2>原理图

    <3>使用场景和特点

    1.特点:要访问的服务器只知道代理服务器来访问它,并不知道真实的客户端是谁
    2.使用场景:正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。

    <2>.反向代理服务器

    <1>概念

    反向代理服务器:nginx等
    反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了

    <2>原理图

    <3>使用场景和特点

    1.特点:特点:反向代理服务器隐藏了真实服务器的信息,例如淘宝,京东,天猫等
    2.使用场景:
    反向代理的典型用途是将 防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

    7.网络面试题

    <1>.说一说TCP/IP模型,以及都做了哪些事情

    TCP/IP模型分为五层,分别是应用层,传输层,网络层,数据链路层,物理层

    TCP/IP协议群主要是报文的拆分,增加协议头,数据的传输,路由和寻址以及数据的重组

    <2>.说一说TCP的三次握手四次挥手

    1.建立连接——>TCP三次握手:

    TCP——>三次握手的流程

    1.主机A发送syn到主机B,要求建立a到b的连接。此时主机A的状态为syn_sent
    2.主机B回复ack+syn(这里的ack和syn数据报本来是两个,但是仅标志位不同,所以可以合并,为什么不是四次的原因),要求建立b到a的连接,主机B的状态为syn_rcvd
    3.主机A回复第2步syn的ack。主机A的状态为established,建立A到B的连接
    主机B接收到第3步的数据报,建立B到A 的连接,主机B的状态置为established

    TCP——>三次握手中的问题:
    1.syn为什么有两个?
    双方的连接状态会持续,且连接是有方向的

    2.第二步中,为什么是ack+syn?
    本质上是一个发ack应答,一个发syn请求,而且是方向一致的两个数据报,可以合并

    3.第三步中,ack确认应答哪个?
    应答第二步的syn

    2.断开连接——>TCP四次挥手:

    TCP——>四次挥手的流程
    1.主机A发送fin到主机B,请求关闭a到b的连接
    2.主机B回复ack,主机B的状态置为close_wait
    3.主机B发送fin到主机A,请求关闭b到a的连接
    4.值即A回复ack(第三步的fin),状态置为time_wait
    主机B接收到第四步的数据报,状态置为closed
    主机A经过2MSL(超时等待时间)之后,状态置为closed

    TCP——>4次挥手中的问题
    1.第2步和第3步为什么不能和3次握手流程一样,进行合并
    原因:第2步是TCP协议在系统内核中实现时,自动响应的ack
    第3步时应用程序手动调用close来关闭连接的
    程序在关闭连接之前,可能需要执行释放资源等前置操作,所以不能合并(TCP协议实现时,没有这样进行设计)

    2.第3步中,主机A为什么不能直接设置为closed状态
    原因: 第4个数据报可能丢包,如果直接置为closed,丢包后无法重新发送数据。
    主机B达到超时时间之后,会重发第三个数据报,然后要求主机A再次回复ack

    3.服务器出现大量的close_wait状态,是为什么?
    服务端没有正确的关闭连接(程序没有调用close,或者没有正确使用)

    <3>IPV4和IPV6的区别

    1.地址不同(IPV4 32位,IPV6 128位),所有地址的空间,数目不同

    2.地址分配不同(IPV4资源不够,分配的话需要竞争,而IPV6可以给每个人都分配很多的地址)

    3.寻址的方式不同:IPV4 通过子网掩码计算网络地址,而IPV6有固定的计算方式划分网络

    <4>TCP和UDP的区别

    1.TCP是有连接的可靠传输协议,而UDP是无连接的
    2.UDP传时数据是有大小限制的,而TCP没有
    3.UPD是面向数据报的,而TCP是面向数据流的。
    4.TCP保证数据正确性,顺序性,而UDP不能保证.

    5.UPD的传输速率高于TCP

    <5>如何用UDP进行可靠传输

    引入序列号, 保证数据顺序;
    引入确认应答, 确保对端收到了数据;
    引入超时重传, 如果隔一段时间没有应答, 就重发数据;

    <6>正向代理和反向代理的区别

    正向代理:要访问的服务器只知道代理服务器来访问它,并不知道真实的客户端是谁

    反向代理:反向代理正好相反。对于客户端来说,反向代理就好像目标服务器,客户端向反向代理发送请求,接着反向代理判断请求走向何处,隐藏了真实的服务器。

    <7>说说HTTP和HTTPS

    HTTP是超文本传输协议,是目前应用最广泛的网络通信协议,也是客户端和服务端交互的一系列行为的标准

    http header包含三大部分,有General。Response Headers(响应头)。 Request Headers(请求头)。

    http是无连接,无状态的(每次连接只处理一个请求,发送完数据后,不会记录)

    而https简单讲是HTTP的安全版,即HTTP下加入SSL层,主要是来确认网站的真实性和数据传输的安全。

    区别:

    1.http的数据是明文传输,而https是加密传输,需要用到ca证书

    2.http使用80端口,而https是443端口

    3.http的速度比https要快

    <8>https中SSL握手的过程

    <1>.首先客户端给出协议版本号,一个客户端生成的随机数,以及支持的加密方式

    <2>.服务端确认双方使用的加密方式,给出数字证书,以及一个服务器生成的随机数

    <3>.客户端确认数字证书有效,然后生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数,发个服务端

    <4>.服务端使用自己的私钥,获取客户端发来的随机数

    <5>.客户端和服务端根据约定的加密方式,使用前面的三个随机数,生成密钥

    <9>DNS解析(DNS找IP)

    1.当浏览器中输入www.bai.com域名时,操作系统会检查自己本地的hosts文件查看是否有这个网址的映射关系,如果有,直接调用

    2.如果没有,则查找本地的DNS解析器缓存,如果有,则直接返回IP

    3.如果没有,再找TCP/IP参数中设置的本地的DNS服务器,如果该域名包含再本地配置区域的资源中,则返回解析结果。

    4.也可能查找的域名,本地的DNS服务器已经缓存在网址的映射关系,那么直接调用这个IP

    5.如果本地DNS服务器也无法解析,会根据本地的DNS服务器是否设置转发器进行查询

    如果是未转发模式,本地DNS会把请求发给13台根DNS,由对应的根服务器(例如.com)向下找,最后完成解析

    如果是转发模式,那么DNS服务器会把请求一级一级向上传,往上找,直到传到根DNS。

    <10>GET和POST的区别

    1.get的请求数据只能放在url中,post的数据,可以放在url和请求体

    2.url长度有限制,所有get方法请求数据不能太多,并且url只能传输ascli字符

    3.安全性将,post可以存放请求数据在请求体,相对更加安全

    4.GET主要是从服务端获取数据,而POST请求主要是将数据发送到服务端

    5.POST请求刷新会被重新提交,但Get请求不会

    <11>常见的状态码

    400:客户端请求语法错误,服务端无法理解

    405:映射找到了,但是客户端请求方法和服务端提供的请求方法不匹配

    500:服务端内部报错

    403:无权限

    <12>输入一个URL到浏览器中,会发生什么

    1.域名解析(DNS解析)

    2.发起TCP的三次握手

    3.建立TCP连接后发起HTTP请求(如果浏览器存储了该域名下的Cookies,那么会把Cookies放入HTTP请求头里发给服务器。)

    4.服务器端响应http请求,浏览器得到html代码

    5.浏览器解析html代码,并请求html代码中的资源

    6.浏览器对页面进行渲染呈现给用户

  • 赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » 面试官都震惊,你这网络基础可以啊!