1. OSI与TCP/IP各层的结构与功能,都有哪些协议
具体见http://blog.csdn.net/qq_34337272/article/details/69055976?locationNum=15&fps=1
2. TCP与UDP的区别
TCP | UDP |
---|---|
面向连接 | 无连接(即发送数据之前不需要建立连接) |
可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达 | 尽最大努力交付,即不保证可靠交付 |
面向字节流 | 面向报文,没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低 |
点到点 | 支持一对一,一对多,多对一和多对多的交互通信 |
首部开销20字节 | 首部开销只有8个字节 |
全双工的可靠信道 | 不可靠信道 |
HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议 | QQ语音 QQ视频 TFTP |
3. TCP报文结构
端口号:TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接
序号:用来标识TCP发端向TCP收端发送的数据字节流
确认序号:一旦连接建立,该值将始终发送
首部长度:报文头长度(单位:位)/32
(PS:4位所能表示的最大值为0b1111,转化为十进制为15,15*32/8 = 60,故报头最大长度为60字节)
Urgent:紧急指针有效性标志
Acknowledgment:确认序号有效性标志,一旦一个连接建立起来,该标志总被置为1,即除了请求建立连接报文(仅设置Syn标志位为1),其它所有报文的该标志总为1
Push:接收方应尽快将报文段提交至应用层
Reset:重置连接标志
Syn:同步序号标志
Fin:传输数据结束标志
窗口大小:接收缓冲区大小
检验和:检验和覆盖整个TCP报文段;强制字段,由发送端计算存储,由接收端进行验证
紧急指针:当Urgent标志置1时,紧急指针才有效
链路层最多能承载65535字节的IP数据包,IP头最少20个字节,TCP头最少也是20个字节,所以TCP报文段能携带的数据最多就是65535-20-20=65495字节。
MTU(最大传输单元)是一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)
如果IP层有一个数据包要传,而且数据的长度比链路层的MTU大,那么IP层就会进行分片,把数据包分成托干片,让每一片都不超过MTU。
4. TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用
第一次握手:客户端发送SYN包至服务器,并进入SYN_SENT状态,等待服务器确认
第二次握手:服务器收到客户端的SYN包,发送一个ACK,同时发送自己的SYN,此时服务器进入SYN_RCVD状态
第三次握手:客户端接收到服务器发送的SYN+ACK后,进入ESTABLISHED状态,并发送服务器SYN包的确认ACK,服务器接收到客户端ACK后,进入ESTABLISHED状态
当客户端和服务器都进入ESTABLISHED状态后,客户端和服务器之间就可以开始双向传递数据了
第一次挥手:主动关闭方发送一个FIN并进入FIN_WAIT_1状态
第二次挥手:被动关闭方接收到主动关闭方发送的FIN并发送ACK,此时被动关闭方进入CLOSE_WAIT状态;主动关闭方收到被动关闭方的ACK后,进入FIN_WAIT_2状态
第三次挥手:被动关闭方发送一个FIN并进入LAST_ACK状态
第四次挥手:主动关闭方收到被动关闭方发送的FIN并发送ACK,此时主动关闭方进入TIME_WAIT状态,经过2MSL时间后关闭连接;被动关闭方收到主动关闭方的ACK后,关闭连接
(PS:MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。)
5. TCP拥塞控制
拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
几种拥塞控制方法:慢开始( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快恢复( fast recovery )
具体见http://blog.csdn.net/kinger0/article/details/48206999
5. TCP滑动窗口与回退N针协议
发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口。
发送方的窗口大小由接受方确定(敲黑板💯),目的在于控制发送速度,以免接受方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。
图中的4、5、6号数据帧已经被发送出去,但是未收到关联的ACK,7、8、9帧则是等待发送。可以看出发送端的窗口大小为6(也有说窗口大小是3的,认为窗口大小看的是未收到关联ACK的帧),这是由接受端告知的(事实上必须考虑拥塞窗口cwnd,这里暂且考虑cwnd>rwnd)。此时如果发送端收到4号ACK,则窗口的左边缘向右收缩,窗口的右边缘则向右扩展,此时窗口就向前“滑动了”,即数据帧10也可以被发送。
停等协议(stop-and-wait),这时接受方的窗口和发送方的窗口大小都是1,1个比特就够表示了,所以也叫1比特滑动窗口协议。发送方这时自然发送每次只能发送一个,并且必须等待这个数据包的ACK,才能发送下一个。虽然在效率上比较低,带宽利用率明显较低,不过在网络环境较差,或是带宽本身很低的情况下,还是适用的。
后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍未收到确认帧,就要重发出错帧及其后的N帧。
选择重传协议:在后退n协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。
最后的最后(敲黑板💯)
7. Http的报文结构
具体见http://www.jianshu.com/p/a2c4ede32d11
8. Http的状态码含义
一、200状态码:
成功2××: 成功处理了请求的状态码。
1、200 :服务器已成功处理了请求并提供了请求的网页。
2、204: 服务器成功处理了请求,但没有返回任何内容。
二、300状态码:
重定向3×× :每次请求中使用重定向不要超过 5 次。
1、301: 请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的URL。
2、302: 请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。
3、304: 如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。
三、400状态码:
客户端错误4×× :表示请求可能出错,妨碍了服务器的处理。
1、400: 服务器不理解请求的语法。
2、403: 服务器拒绝请求。
3、404: 服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。
4、410 :请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 代码。如果资源已永久删除,应当使用 301 指定资源的新位置。
四、500状态码:
服务器错误5×× :表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
1、500 :服务器遇到错误,无法完成请求。
2、503: 服务器目前无法使用(由于超载或停机维护)。
9. Http request的几种类型
OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET:向特定的资源发出请求。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
虽然HTTP的请求方式有8种,但是我们在实际应用中常用的也就是get和post,其他请求方式也都可以通过这两种方式间接的来实现。
10. Http1.1和Http1.0的区别
HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。
11. Http怎么处理长连接
目前http1.1默认是长连接
具体见http://www.jianshu.com/p/caeec6bd1d3f
12. Cookie与Session的作用于原理
具体见http://blog.csdn.net/colzer/article/details/8686966
13. 电脑上访问一个网页,整个过程是怎么样的:DNS、HTTP、TCP、OSPF、IP、ARP
应用层
- DNS(53):
我们输入的是一个URL需要转化成IP地址。首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS可以看做是一个树状结构,该请求将一直发送到根直到得到结果。 - HTTP(80)
HTTP协议的主要职责是生成针对目标web服务器的http请求报文(请求行、请求头部)
传输层
- TCP
将http请求报文分割成报文段,按序号分为多个报文段。(三次握手)
网络层
- IP
搜索目标的地址,一边中转一边传送。(路由) - ARP
因为最终都要在数据链路层上进行传输,而数据链路层并不认识IP地址,所以ARP的职责就是把IP地址转换成数据链路层认识的MAC地址。
通过数据链路层到达目标机器之后。
网络层
- RARP
这其实是ARP的逆过程,将MAC地址转换成Ip地址
传输层
- TCP
将接收到的报文段按序号进行重组。
应用层
- HTTP
HTTP协议对http请求进行解析处理
14. Ping的整个过程。ICMP报文是什么
Ping 程序是用来探测主机到主机之间是否可通信,如果不能Ping到某台主机,表明不能和这台主机建立连接。Ping 使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。
ICMP报文格式:IP首部(20字节)+8位类型+8位代码+16位校验和+(不同的类型和代码,格式也有所不同)