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中,相对安全一些。
     
     
  • 相关阅读:
    poj 2584 T-Shirt Gumbo (二分匹配)
    hdu 1757 A Simple Math Problem (乘法矩阵)
    矩阵之矩阵乘法(转载)
    poj 2239 Selecting Courses (二分匹配)
    hdu 3661 Assignments (贪心)
    hdu 1348 Wall (凸包)
    poj 2060 Taxi Cab Scheme (二分匹配)
    hdu 2202 最大三角形 (凸包)
    hdu 1577 WisKey的眼神 (数学几何)
    poj 1719 Shooting Contest (二分匹配)
  • 原文地址:https://www.cnblogs.com/buwenyuwu/p/7222622.html
Copyright © 2011-2022 走看看