面经总结:计算机网络
-
计算机网络学了哪些内容?
包括:OSI参考模型以及各层的学习、TCP/IP协议、HTTP这些;
-
OSI七层模型?各层功能?各层协议?
数据链路层:将比特组装成帧和点到点的传递(帧Frame) PPP点对点协议、ARP地址解析协议;
传输层:提供端到端的可靠报文传递和错误恢复(段Segment) TCP、UDP
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:提供用户程序接口(应用协议数据单元APDU)FTP、DNS、HTTP
-
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位)
/*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是Address Resolution Protocol地址解析协议,根据IP地址或获取物理地址(MAC地址);
RARP是Reverse Address Resolution Protocol反向地址转换协议,允许物理机器从ARP列表请求其IP地址。
RARP产生原因:
ARP(地址解析协议)是设备通过自己知道的IP地址来获得自己不知道的物理地址的协议。假如一个设备不知道它自己的IP地址,但是知道自己的物理地址,网络上的无盘工作站就是这种情况,设备知道的只是网络接口卡上的物理地址。这种情况下应该怎么办呢?RARP(逆地址解析协议)正是针对这种情况的一种协议。
-
get和post的区别?