面经总结:计算机网络

 

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

包括: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中,相对安全一些。
 
 

 

posted @ 2017-07-22 20:52  不闻余物  阅读(851)  评论(0编辑  收藏  举报