zoukankan      html  css  js  c++  java
  • 面经总结:计算机网络

    • 计算机网络学了哪些内容?

    包括:OSI参考模型以及各层的学习、TCP/IP协议、HTTP这些;

    • OSI七层模型?各层功能?各层协议?

    各层功能和协议:
    物理层:通过媒介传输比特(比特Bit)
    数据链路层:将比特组装成帧和点到点的传递(帧Frame) PPP点对点协议、ARP地址解析协议;
    网络层:负责数据包从源端到目的端的传递和网际互连(包Packet) IP、ICMP、RARP、RIP
    传输层:提供端到端的可靠报文传递和错误恢复(段Segment) TCP、UDP
    会话层:建立、管理和终止会话(会话协议数据单元SPDU)
    表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
    应用层:提供用户程序接口(应用协议数据单元APDU)FTP、DNS、HTTP
    (注:ARP在OSI里是链路层,在TCP/IP里是网络层)
     
    • TCP三次握手

    (1.过程;2.几个常见问题)

    第一次:客户端给服务器发送syn包x;SYN_SENT

    第二次:服务器接收到syn包,返回一个syn包y 和 一个ack包x+1; SYN_RECV

    第三次:客户端收到syn+ack包,向服务器发送ack包。ESTABLISHED

    为什么三次握手?

    防止已失效的连接请求报文段重传。

    • TCP四次挥手

    四次挥手?

    把三次握手的第二次分解,先发ack包,再发fin包。

    第一次:主动关闭方发送fin包x,关闭数据传送; FIN_WAIT1  

    第二次:被动方发送ack包x+1; FIN_WAIT2 CLOSE_WAIT

    第三次:被动方发送fin包y,关闭数据传送; LASH_ACK

    第四次:主动方发送ack包y+1;TIME_WAIT 

    为什么四次握手?

    被动方收到FIN包时,并不会立即关闭socket,所以先回复一个ack包。等到被动方所有数据发送完,再发fin包。

    为什么TIME_WAIT/等待2MSL?

    (确保被动关闭方收到ACK包)

    MSL是报文最大生存时间;主动方发出最后一个ACK包进入TIME_WAIT状态,目的是防止最后一个ACK包对方没接收到,那么对方在超时后将重发第三次握手的FIN包。 A->ACK->B,等待ACK到达对方时间MSL,等待FIN超时重传MSL,所以如果2MSL时间没有收到FIN,说明对方安全收到ACK。

    如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后就立即释放连接,就无法收到B重传的FIN报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常的步骤进入CLOSED状态。 

    • TCP和UDP的比较?

    1.特点:连接、可靠、安全; 2.举例; 3.协议;

    都是传输层的协议;

    TCP提供面向连接、可靠的数据流传输,而UDP提供非面向连接、不可靠的数据流传输;

    TCP注重数据安全性,UDP数据传输快;比如聊天软件、在线视频等都是UDP;

    协议:TCP支持的应用协议有Telnet远程登录、FTP文件传输、HTTP;

    UDP对应协议有DNS域名系统;

    TCP可靠性?

    面向连接、超时重传机制、拥塞控制等;

    • 浏览器访问一个网址的过程?

      1.首先浏览器通过DNS解析网址的IP地址,通过IP找到服务器路径;

      2.根据IP地址向服务器发送一个HTTP请求;

      3.服务器收到请求,返回响应;

      4.浏览器对网页解析,渲染显示。

    涉及各层协议?

    应用层:HTTP、DNS、(DNS解析域名为目的IP,通过IP找到服务器路径,客户端向服务器发起HTTP会话)

    传输层:TCP、 (HTTP会话会被分成报文段,添加源、目的端口;TCP协议进行主要工作)

    网际层:IP、(ARP)、ICMP、(为数据包选择路由,IP协议进行主要工作)

    链路层:PPP、(ARP)(发送IP数据包到达服务器的地址,ARP协议将IP地址转成MAC地址)

    • TCP头结构?

    TCP头结构定义

    (五层:1.源16+目的16; 2.序列号; 3.确认号;4.TCP头4+保留6+标志位6,窗口16; 5.校验和16位+紧急指针16位)

    16、16:源端口和目的端口
    32 序列号
    32 确认号
    4、6、6、16 头部、保留位、标志位、窗口大小
    16、16 校验和、紧急指针;

    /*TCP头定义,共20个字节*/
    typedef struct _TCP_HEADER 
    {
     short m_sSourPort;              // 源端口号16bit
     short m_sDestPort;              // 目的端口号16bit
     unsigned int m_uiSequNum;         // 序列号32bit
     unsigned int m_uiAcknowledgeNum;  // 确认号32bit
     short m_sHeaderLenAndFlag;        // 前4位:TCP头长度;中6位:保留;后6位:标志位
     short m_sWindowSize;            // 窗口大小16bit
     short m_sCheckSum;              // 检验和16bit
     short m_surgentPointer;           // 紧急数据偏移量16bit
    }__attribute__((packed))TCP_HEADER, *PTCP_HEADER;

    • HTTP协议

      HTTP是超文本传输协议 Hyper Text Transfer Protocol, 它主要负责web server和web浏览器之间的通讯,HTTP协议把web client (浏览器)的请求发送到一个web server, 并把网页内容从web server返回到浏览器。常用请求包括get和post两种。
      HTTPS 是安全超文本传输协议 Secure HTTP, 主要用于在web server和web 浏览器之间进行隐私数据的传输。

    • HTTP请求报文和响应报文

    HTTP请求报文

      一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成。

    1.请求行

    请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。

    HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

    2.请求头部

    请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

    User-Agent:产生请求的浏览器类型。

    Accept:客户端可识别的内容类型列表。

    Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

    3.空行

    最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

    4.请求数据

    请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

    HTTP响应报文

    HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。

    响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。

    状态行格式如下:

    HTTP-Version Status-Code Reason-Phrase CRLF

    其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

    • 1xx:指示信息--表示请求已接收,继续处理。
    • 2xx:成功--表示请求已被成功接收、理解、接受。
    • 3xx:重定向--要完成请求必须进行更进一步的操作。
    • 4xx:客户端错误--请求有语法错误或请求无法实现。
    • 5xx:服务器端错误--服务器未能实现合法的请求。

    常见状态代码、状态描述的说明如下。

    • 200 OK:客户端请求成功。
    • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
    • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
    • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
    • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
    • 500 Internal Server Error:服务器发生不可预期的错误。
    • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

    举个例子:HTTP/1.1 200 OK(CRLF)。

    • HTTP报文header有哪些属性?

    (以下为Request的)

    Host:请求的主机名;

    User-Agent:浏览器类型;

    Accept:客户端能够接受的内容类型;

    Accept-Language:语言;

    Accept-Encoding:压缩编码类型;

    Accept-Charset:字符编码集;

    Content-Type:提交的内容类型;

    Connection:是否持久连接;

    Keep-Alive:持久连接时间;

    cookie:保存在请求域名下的所有cookie值;

    Referer:访问请求的页面;

    示例:

    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 
    application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
    Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  
    Accept-Language: zh-cn  
    Accept-Encoding: gzip, deflate  
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
    Host: <a href="http://www.google.cn">www.google.cn</a>  
    Connection: Keep-Alive  
    Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
    NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
    FxlRugatx63JLv7CWMD6UB_O_r  
    • HTTP状态码

    状态码是http响应里的部分,用来描述响应的状态;

    2xx:成功处理请求;

    3xx:重定向;

    4xx:客户端错误;

    5xx:服务器错误;

    常见状态码:

    200:请求被成功接收;

    301:永久跳转,完成请求还需进一步操作;

    302:临时跳转,完成请求还需进一步操作;

    400:客户端请求有语法错误,不能被服务器所理解;

    403:没有权限,拒绝访问;

    404:访问页面不存在;

    500:服务器错误;

    503:服务器当前不能处理客户端请求;

    • ARP和RARP

    ARP协议?
    (功能、工作原理)
    ARP(Address Resolution Protocol)是地址解析协议;
    OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。(概括:在不同层,不能传输)
    工作原理:
    (1.查;2.有,没有-ARP请求;3.不一致,一致-ARP响应;4.收到,没收到)
      0)ARP缓冲区,ARP列表-IP地址和MAC地址的对应关系;
      1)检查ARP列表;
      2)列表没有;发起ARP请求的广播包,包括源主机IP、MAC以及目的主机IP地址;
      3)网络中所有主机收到ARP请求,检查IP和自己IP是否一致,不同则忽略;
      4)相同:1.首先将发送端MAC和IP添加到自己的ARP,如果以及存在则覆盖;2.给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;
      5)源主机收到ARP响应包,将目的主机IP和MAC添加到ARP列表;并开始数据传输;
      6)如果源主机一致没有收到ARP响应数据包,表示ARP查询失败。

    ARP是Address Resolution Protocol地址解析协议,根据IP地址或获取物理地址(MAC地址);

    RARP是Reverse Address Resolution Protocol反向地址转换协议,允许物理机器从ARP列表请求其IP地址。

    RARP产生原因:

    ARP(地址解析协议)是设备通过自己知道的IP地址来获得自己不知道的物理地址的协议。假如一个设备不知道它自己的IP地址,但是知道自己的物理地址,网络上的无盘工作站就是这种情况,设备知道的只是网络接口卡上的物理地址。这种情况下应该怎么办呢?RARP(逆地址解析协议)正是针对这种情况的一种协议。

    RARP的工作过程:
    1、网络上的每台设备都会有一个独一无二的硬件地址,通常是由设备厂商分配的MAC地址。PC1从网卡上读取MAC地址,然后在网络上发送一个RARP请求的广播数据包,请求RARP服务器回复该PC的IP地址。
    2、RARP服务器收到了RARP请求数据包,为其分配IP地址,并将RARP回应发送给PC1。
    3、PC1收到RARP回应后,就使用得到的IP地址进行通讯。
     
     
    • get和post的区别?

    1.http规范:幂等、安全;2.应用:参数/保密性、长度 3.总结
    根据HTTP规范:
     1)get用于信息获取,是安全的和幂等的。安全是针对服务端而言,get不会引起数据的变化,例如对数据库的增删改。产生的结果是幂等的,指同一个url和同样的get参数,呈现给用户的结果相同。
     2)post可能引起数据的变化。比如填写表单更新数据。
    从应用角度来看:
     1)get请求参数放在URL后面,格式是URL?key1=value&key2=value...即?在URL后面,多个参数用&隔开,可以在链接看到参数。长度方面:理论上HTTP对get参数没有长度限制,但是一般打开链接都是通过浏览器,因此会受到浏览器或者操作系统限制长度,比较常见的限制长度是1024字节。
     2)post请求数据会放在HTTP包中,保密性相对安全。HTTP标准也没有对POST数据进行限制,但是会受到服务端的长度限制,如处理的程序(PHP),服务器引擎(Apache)。
    总结:
     1)get适合于查询区分某些特定数据的页面,如商品展示。
     2)由于post的HTTP标准,因此更适合做数据的改变,而且由于应用角度上的数据传递方式,更适合用于登录注册功能页,因为数据不会显示在url中,相对安全一些。
     
     
  • 相关阅读:
    HD2058The sum problem
    采用循环链表结构求解约瑟夫问题
    java线性表学习笔记(二)
    java线性表学习笔记(一)
    HD1004Let the Balloon Rise
    HD1005Number Sequence
    用c++库函数轻松解决回文问题
    accelerated C++ 中查找url(学习笔记)
    C++ 之关联容器 map
    pytorch 迁移学习[摘自官网]
  • 原文地址:https://www.cnblogs.com/buwenyuwu/p/7222622.html
Copyright © 2011-2022 走看看