盒子
盒子
文章目录
  1. TCP ip UDP 请求头
  2. http请求头有哪些,介绍平时见过的,怎么利用这些信息来进行前后端调试
  3. 知道HTTP和HTTPS吗?区别是什么?各自的默认端口号?
  4. 简述TCP与UDP协议的差别,两者与HTTP的关系。并列举HTTP的方法,以及常见的返回状态码。
  5. OSI七层模型
  6. Socket连接和Http连接的区别?
  7. 什么是TCP连接的三次握手?
  8. TCP四次挥手
  9. TCP三次握手有没有被攻击的可能
  10. TCP四次挥手时最后一次等待要多久,为什么
  11. TCP滑动窗口机制
  12. TCP拥塞控制机制
  13. 哪些http方法对于服务端和用户是安全的
  14. Http协议的特点?GET与POST的区别?什么是Https协议?
  15. XML数据的解析方式各有什么不同?JSON解析有哪些框架?
  16. Http和Socket的区别?
  17. TCP流量控制
  18. socket模型
  19. 从浏览器输入一个地址,到页面显示html,这个过程经历了什么,调用了哪些应用层协议?
  20. Windows/Linux下判断远程地址为某主机监听的某端口是都开放的命令是?
  21. ssh协议以及如何预防中间人攻击、如何免去使用密码
  22. cookie和session
  23. 网络协议
  24. DNS协议

面试内容整理--网络篇

TCP ip UDP 请求头

http://blog.csdn.net/mrwangwang/article/details/8537775

http请求头有哪些,介绍平时见过的,怎么利用这些信息来进行前后端调试

HTTP请求信息由3部分组成:
l 请求方法 URI协议/版本
l 请求头(Request Header)
l 请求正文

知道HTTP和HTTPS吗?区别是什么?各自的默认端口号?

https协议需要到ca申请证书。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全

简述TCP与UDP协议的差别,两者与HTTP的关系。并列举HTTP的方法,以及常见的返回状态码。

TCP—传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

ping使用的是ICMP协议,它和IP协议处在同一层;使用UDP协议的有DNS,使用TCP有FTP协议,SMTP/POP3协议,TELNET协议

请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。

HTTP的响应状态码由5段组成:

• 1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急…
• 2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
• 3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
• 4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
• 5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。

OSI七层模型

• 7. 应用层——Application(Layer 7)
与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。

• 6. 表示层——Presentation(Layer 6)
这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。

• 5. 会话层——Session(Layer 5)
它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。

• 4. 传输层—— Transport(Layer 4)
这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。

• 3. 网络层——Network(Layer 3)

这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。

• 2. 数据链路层——Data Link(Layer 2)
它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。

• 1. 物理层——Physical(Layer 1)
物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。

Socket连接和Http连接的区别?

Http连接:Http连接就是所谓的短链接,即客户端向服务器发送一次请求,服务器响应后连接即会断掉。
Socket连接:Socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉。

什么是TCP连接的三次握手?

第一次握手:客户端发送SYN包(SYN=j)到服务器,并进入SYN_SEND状态,等待服务器确认。客户端给服务器发包。 此时服务器确认自己可以接收客户端的包,客户端不确认服务器是否接收到了自己发的包。
第二次握手:服务器收到SYN包,必须确认客户的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。服务器端回复客户端。 此时客户端确认自己发的包被服务器收到,也确认自己可以正常接收服务器包,客户端对此次通信没有疑问了。服务器可以确认自己能接收到客户端的包,但不能确认客户端能否接收自己发的包。
第三次握手:客户端接收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。客户端回复服务器。 客户端已经没有疑问了,服务器也确认刚刚客户端收到了自己的包。两边都没有问题,开始通信。

TCP四次挥手

由于TCP连接是全双工(A->B与B->A同时)的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
CP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

TCP三次握手有没有被攻击的可能

如果一个恶意攻击的ip一直请求连接,服务器会发送ack确认,但永远等不到回复,就会导致服务器资源浪费)
攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

TCP四次挥手时最后一次等待要多久,为什么

如A向B发送挥手,则A需要等待2MSL,MSL为最大报文生命期,这是为了确保A的挥手能到达B,不然B会重传第三次挥手的信息。另外也是确保所有此次通话相关报文在网络中消失
这最主要是因为两个理由:
1、为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
2、他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从而保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。

TCP滑动窗口机制

滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

TCP拥塞控制机制

依赖于一个拥塞窗口(cwnd)来控制
TCP的拥塞控制由4个核心算法组成:“慢启动”(Slow Start)、“拥塞避免”(Congestion voidance)、“快速重传 ”(Fast Retransmit)、“快速恢复”(Fast Recovery)。
慢启动:
最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间(Round Trip Time,RTT)呈指数级增长
拥塞避免:
从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。拥塞避免的主要思想是加法增大,也就是cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加,这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。
快速恢复:
1.当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。
2.再收到重复的ACK时,拥塞窗口增加1。
3.当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。

哪些http方法对于服务端和用户是安全的

GET / HEAD / OPTIONS方法
只从服务端获取资源 并不对服务器进行修改 因此相对安全。
对于客户端来说是不安全的 请求参数会显示在URL中。
TRACE方法
用于诊断诊断服务器,仅记录路径信息是安全的。
POST方法
会影响服务器端的资源。

Http协议的特点?GET与POST的区别?什么是Https协议?

1)Http协议是短连接,都是客户端主动发送请求,服务器做出响应,服务器响应之后,连接则断开。
2)GET请求没有请求体,POST含有请求体,请求参数可以放入请求体中,所以,POST可以提交大量的数据给服务器,更加安全。
3)HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议,它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。

XML数据的解析方式各有什么不同?JSON解析有哪些框架?

XML数据解析有两种方式:DOM解析和SAX解析。
DOM解析:必须完成DOM树的构造,在处理规模较大的XML文档时就很耗费内存,占用资源较多。
SAX解析:与DOM不同的是,SAX是用事件驱动模型,解析XML文档时每遇到一个开始或者结束标签、属性或一条指令时,程序就产生一个事件来进行相应的处理。因此,SAX相对于DOM来说更适合操作大的XML文档。
JSON解析:现在性能比较好的主要是第三方的JSONKit和iOS自带的JSON解析类,自带的JSON解析性能是最高的,但是只能是iOS5之后才可以使用。

Http和Socket的区别?

Http是客户端用Http协议进行请求,发送请求时需要封装http请求头,并绑定请求的数据,服务器一般有Web服务器配合(当然也非绝对)。Http请求方式为客户端主动发起请求,服务器才能给响应,一次请求完毕后则断开连接,以节省资源。服务器不能主动给客户端响应(除非采用http长连接技术)。iPhone主要使用的类是NSURLConnection。
Socket是客户端跟服务器直接使用Socket套接字进行连接,并没有规定连接后断开,所以客户端和服务器可以保持连接通道,双方都可以主动发送数据。一般在游戏开发或股票开发,这种要求即时性很强并且保持发送数据量比较大的场合使用。主要使用的类是CFSocketRef。

TCP流量控制

提示:答出滑动窗口,拥塞控制,慢启动,可以附带答上快重传、快恢复和超时重传(显得自己知道的比较多咯)

socket模型

一:select模型(选择模型)
周而复始地去检查…… 如果有数据……接收/发送 …….
二:WSAAsyncSelect模型(异步选择)
WSAAsyncSelect模型是Windows 下最简单易用的一种Socket I/O模型。使用这种模型时,Windows会把网络事件以消息的形势通知应用程序
三:WSAEventSelect模型(事件选择)
它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知。
四:Overlapped I/O 事件通知模型(重叠I/O模型)
我们可以通过使用Win32文件操纵函数ReadFile和WriteFile来进行Socket I/O。伴随而来的,用于普通文件I/O的重叠I/O模型和完成端口模型对Socket I/O也适用了。
“Overlapped”,Overlapped 模型是让应用程序使用重叠数据结构(WSAOVERLAPPED),一次投递一个或多个 Winsock I/O请求。这些提交的请求完成后,应用程序会收到通知。什么意思呢?就是说,如果你想从 socket上接收数据,只需要告诉系统,由系统为你接收数据,而你需要做的只是为系统提供一个缓冲区
五:Overlapped I/O 完成例程模型
Overlapped I/O 完成例程要求用户提供一个回调函数,发生新的网络事件的时候系统将执行这个函数:
六:IOCP模型

从浏览器输入一个地址,到页面显示html,这个过程经历了什么,调用了哪些应用层协议?

比较ok
http://www.jianshu.com/p/19fde9ed9fc6
http://blog.sina.com.cn/s/blog_72c8e14d010137qn.html

Windows/Linux下判断远程地址为某主机监听的某端口是都开放的命令是?

ssh协议以及如何预防中间人攻击、如何免去使用密码

SSH之所以能够保证安全,原因在于它采用了公钥加密。
整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的”中间人攻击”(Man-in-the-middle attack)。

cookie和session

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。2. 思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。3. Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。所以,总结一下:Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中

网络协议

http://www.jianshu.com/p/4de750258d9d

DNS协议

http://blog.csdn.net/hunanchenxingyu/article/details/21488291
DNS通常由其他应用层协议使用(如HTTP、SMTP、FTP),将主机名解析为IP地址,其运行在UDP之上,使用53号端口。
注:DNS除了提供主机名到IP地址转换外,还提供如下服务:主机别名、邮件服务器别名、负载分配。

呼呼呼山(http://code4fun.me)
11 Jan 2018 10:37 PM