计算机网络常见面试和笔试技巧汇总(一直更新)

一.TCP/IP协议

TCP/IP 是互联网相关各类协议族的总称。

1.TCP/IP的分层管理

TCP/IP协议里最重要的一点就是分层。IP层传输单位是IP分组,属于点到点的传输;TCP层传输单位是TCP段,属于端到端的传输TCP/IP协议族按层次分别为 应用层,传输层,网络层,数据链路层,物理层。越靠下越接近硬件。

物理层:该层负责 比特流在节点之间的传输,即负责物理传输,这一层的协议既与链路有关,也与传输的介质有关。通俗来说就是把计算机连接起来的物理手段。

数据链路层:控制网络层与物理层之间的通信,主要功能是保证物理线路上进行可靠的数据传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的。帧是用来移动数据结构的结构包,他不仅包含原始数据,还包含发送方和接收方的物理地址以及纠错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。如果在传达数据时,接收点检测到所传数据中有差错,就要通知发送方重发这一帧。

网络层:决定如何将数据从发送方路由到接收方。网络层通过综合考虑发送优先权,网络拥塞程度,服务质量以及可选路由的花费等来决定从网络中的A节点到B节点的最佳途径。即建立主机到主机的通信。

传输层:该层为两台主机上的应用程序提供端到端的通信。传输层有两个传输协议:TCP(传输控制协议)和 UDP(用户数据报协议)。其中,TCP是一个可靠的面向连接的协议,udp是不可靠的或者说无连接的协议

应用层:应用程序收到传输层的数据后,接下来就要进行解读。解读必须事先规定好格式,而应用层就是规定应用程序的数据格式。主要的协议有:HTTP.FTP,Telent等。

2.TCP与UDP的区别

TCP/UDP 都是传输层协议,但是两者具有不同的特效,同时也具有不同的应用场景。

 UDP

UDP只在IP数据报服务的基础上增加了少量的功能:复用与分用、对整个报文的差错检测。

  1. UDP是无连接的
    通信前不需要建立连接,通信结束也无需释放连接。

  2. UDP是不可靠的
    它是尽力而为交付,不能确保每一个数据报都送达。

  3. UDP是面向报文的
    所谓『面向报文』就是指:UDP数据传输的单位是报文,且不会对数据作任何 拆分 和 拼接 操作。
    在发送端,应用程序给传输层的UDP什么样的数据,UDP不会对数据进行切分,只增加一个UDP头并交给网络层。
    在接收端,UDP收到网络层的数据报后,去除IP数据报头部后遍交给应用层,不会作任何拼接操作。

  4. UDP没有拥塞控制
    UDP始终以恒定的速率发送数据,并不会根据网络拥塞情况对发送速率作调整。这种方式有利有弊。
    弊端:网络拥塞时有些报文可能会丢失,因此UDP不可靠。
    优点:有些使用场景允许报文丢失,如:直播、语音通话,但对实时性要求很高,此时UDP还是很有用武之地的。

  5. UDP支持一对一、一对多、多对多、多对一通信
    而TCP只支持一对一通信。

  6. UDP首部开销小,只有8字节。
    而TCP头部至少由20字节,相比于TCP要高效很多。

 UDP数据包的结构

一个典型的udp数据报包含如下几个部分:以太网MAC首部+网络层IP数据报首部+传输层UDP首部+要传输的数据

1.以太网MAC头

以太网MAC头由14个字节构成,6个目的地址,6个源地址,2个类型字段,目的地址和源地址是指网卡的MAC地址,具有唯一性。协议是指数据包的高级协议,0X8000:IP协议,0X0806:ARP协议,0X8035:RARP协议

如你要发送的目的MAC地址是:00:1d:09:10:d1:9c 源MAC地址是:01:60:6e:11:02:0f,上层是IP层,标识符是0x0800,那么MAC头就是:00 1d 09 10 d1 9c 01 60 6e 11 02 0f 80 00

一般的以太网帧会有8字节的前导(用于帧同步),4字节的CRC(用于帧校验),这些由网卡芯片自动填充

2.IP数据头

ip数据报头如下:

0x45, 0x00, IPlenght_h, IPlenght_l,0x00, 0x00, 0x00, 0x00, 0x80, 0x11,IPchecksum4, IPchecksum5,IPsource_1, IPsource_2, IPsource_3, IPsource_4,IPdestination_1, IPdestination_2, IPdestination_3, IPdestination_4

  上面是一个简单的ip头的例子,下面一个个的来解释啊!

  0x45,其中的高位0x4,表示的是版本号,ipv4的意思,而后面低字节5表示的是指明IPv4协议包头长度的字节数包含多少个32位,这里是5,也就是说协议头是5*4=20个字节的大小。

  0x00,定义IP封包在传送过程中要求的服务类型,如果所有4bit均为0,那么就意味着是一般服务,具体如下:

    ◆000..... (Routine): 过程字段,占3位。设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)

    ◆...0....(Delay):延迟字段 ,占1位,取值:0(正常)1(期待低的延迟) 

    ◆....0...(Throughput):流量字段,占1位,取值:0(正常)1(期特高的流量) 

    ◆.....0..(Reliability) :可靠性字段,占1位,取值:0(正常)1(期特高的可靠性)

    ◆…..0.(ECN-Capable Transport):显式拥塞指示传输字段,占1位,由源端设置,以显示源端节点的传输协议是支持ECN(Explicit Cogestion Notifica tion,显式拥塞指示)的,取值:0(不支持ECN)1(支持ECN)

    ◆.......0(Congestion Experienced):拥塞预警字段,占1位,取值:0(正常,不拥塞)1(拥塞)

  IPlenght_h, IPlenght_l,表示的是包总长度=IP头长度+UDP头长度+数据长度,长度分为高8位和低8位。

  0x00, 0x00,是上面的标志位,16个字节。每一个IP封包都有一个16位的唯一识别码,当程序产生的数据要通过网络传送时都会被拆散成封包形式发送,当封包要进行重组的时候这个ID就是依据了。

  0x00, 0x00这16位是由两部分组成,包括3bit的标记位和13bit的分段偏移量。

    这是当封包在传输过程中进行最佳组合时使用的3个bit的识别记号,占3位,

    ◆000(Reserved Fragment):保留分段,当此值为0的时候表示目前未被使用

    ◆.0.(Don't Fragment):不分段,当此值为0的时候表示封包可以被分段,如果为1则不能被分割

    ◆..0( More Fragment):更多分段,当上一个值为0时,此值为0就示该封包是最后一个封包,如果为1则表示其后还有被分割的封包

    IP协议头格式规定当封包被分段之后,由于网路情况或其它因素影响其抵达顺序不会和当初切割顺序一至,所以当封包进行分段的时候会为各片段做好定位记录,以便在重组的时候就能够

    对号入座,值为多少个字节,如果封包并没有被分段,则FO值为0,占13位 

  0x80表示生存时间。生存时间字段设置了数据报可以经过的最多路由器数,表示数据包在网络上生存多久,TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1,当该字段的值为0时,数据报就被丢弃,并发送ICMP消息通知源主机,这样当封包在传递过程中由於某些原因而未能抵达目的地的时候就可以避免其一直充斥在网路上面,占8位

  0x11表示的是传输层的协议。如下表所示:

  IPchecksum4, IPchecksum5这两个是头校验和的高8位和低8位。

  指IPv4数据报包头的校验和,这个数值用来检错用的,用以确保封包被正确无误的接收到,当封包开始进行传送后,接收端主机会利用这个检验值会来检验余下的封包,如果一切无误就会发出确认信息表示接收正常,与UDP和TCP协议包头中的校验和作用是一样的,占16位,

  首部检验和字段是根据IP首部计算的检验和码,不对首部后面的数据进行计算,ICMP,IGMP,UDP和TCP协议在它们各自的首部中均含有同时覆盖首部和数据检验和码

  IP协议头格式规定了:计算一份数据报的IP检验和,首先把检验和字段置为0,然后,对首部中每个16位进行二进制反码求和(整个首部看成是由一串16位的字组成),结果存在检验和字段中,当接收端收到一份IP数据报后,同样对首部中每个16 位进行二进制反码的求和,由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1,如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报,但是不生成差错消息,由上层去发现丢失的数据报并进行重传

  ICMP,IGMP,UDP和TCP都采用相同的检验和算法,尽管TCP和UDP除了本身的首部和数据外,在IP首部中还包含不同的字段,由于路由器经常只修改TTL字段(减1),因此当路由器转发一份消息时可以增加它的检验和,而不需要对IP整个首部进行重新计算

   IPsource_1, IPsource_2, IPsource_3, IPsource_4,IPdestination_1, IPdestination_2, IPdestination_3, IPdestination_4这两个就表示了源IP和目标IP。

2.UDP数据头

UDP数据头如下:0x04, 0x00,0x04, 0x00, lenght_h, lenght_l, 0x00, 0x00  

  0x04, 0x00表示的是UDP的源端口,这里为1024;

  0x04, 0x00表示的是UDP的目标端口,这里为1024;

  lenght_h, lenght_l,为整个数据包的长度,包括MAC头+ip头+UDP头+校验位。

  0x00, 0x00这些是UDP协议的选项和填充位。

  这两个选项较少使用,只有某些特殊的封包需要特定的控制才会利用到�1�7这些选项通常包括:

  ◆安全和处理限制:用于军事领域

  ◆记录路径:让每个路由器都记下它的IP地址

  ◆时间戳:让每个路由器都记下它的IP地址和时间

  ◆宽松的源站选路:为数据报指定一系列必须经过的IP地址

  ◆严格的源站选路:与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址

  以上这些选项很少被使用,而且并非所有的主机和路由器都支持这些选项

如何查看tcp建立连接的次数

内容: 当有一个TCP连接,你要判断是长连接还是刚建立的连接时,可以查看他的建立时间得知

步骤一:查看需要的TCP连接,获取端口号

 netstat -nap | grep "a.out"
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:55555           0.0.0.0:*               LISTEN      3717/./a.out        
tcp        0      0 127.0.0.1:55555         127.0.0.1:47248         ESTABLISHED 3717/./a.out        

这里得到的端口号是:55555

步骤二:根据端口号找到此连接对应的fd在进程空间中的值和进程pid

luzejia@ubuntu:~$ lsof -i:55555
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
a.out   3717 luzejia    3u  IPv4  63923      0t0  TCP *:55555 (LISTEN)
a.out   3717 luzejia    4u  IPv4  63924      0t0  TCP localhost:55555->localhost:47248 (ESTABLISHED)

可以看到处于ESTABLESHED的那条连接的fd值是4,pid是3717

步骤三:根据fd值和进程pid查看TCP连接建立时间

luzejia@ubuntu:~$ ls -l /proc/3717/fd/4
lrwx------ 1 luzejia luzejia 64 May 28 19:58 /proc/3717/fd/4 -> 'socket:[63924]'

可以看到建立时间是:May 28 19:58

TCP特点

  1. TCP是面向连接的
    通信前需要建立连接,通信结束需要释放连接。

  2. TCP提供可靠交付服务
    所谓『可靠』指的是:TCP发送的数据无重复、无丢失、无错误、与发送端顺序一致。

  3. TCP是面向字节流的
    所谓『面向字节流』指的是:TCP以字节为单位。虽然传输的过程中数据被划分成一个个数据报,但这只是为了方便传输,接收端最终接受到的数据将与发送端的数据一模一样。

  4. TCP提供全双工通信
    所谓『全双工通信』指的是:TCP的两端既可以作为发送端,也可以作为接收端。

  5. 一条TCP连接的两端只能有两个端点
    TCP只能提供点到点的通信,而UDP可以任意方式的通信。

TCP数据包由首部和数据组成,

每行4个字节(32位)

其中首部最少20个字节(5行),最多60个字节(15行),选项部分是可选的;

TCP首部并没有字段表明整个数据包的长度,是因为TCP数据包是包含在IP数据包中的,而IP数据包已有长度字段,除去IP首部和TCP首部,剩余部分就是TCP包的净荷数据。

面向报文
面向报文的传输方式是应用层交给UDP多长的报文,UDP发送多长的报文,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。

面向字节流
虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应该程序传送的数据块太长,TCP就可以把它划分短一些再传送。

tcp的同步连接和异步连接

所谓同步连接,就是一个服务器与第一个请求建立连接并通信后,第二个请求将会被阻塞。

所谓异步连接,就是一个服务器可以同时响应多个请求。

3.三次握手四次挥手

具体过程如下:

第一次握手:建立连接。客户端发送连接请求报文段,并将syn(标记位)设置为1,Squence Number(数据包序号)(seq)为x,接下来等待服务端确认,客户端进入SYN_SENT状态(请求连接);

第二次握手:服务端收到客户端的 SYN 报文段,对 SYN 报文段进行确认,设置 ack(确认号)为 x+1(即seq+1 ; 同时自己还要发送 SYN 请求信息,将 SYN 设置为1, seq为 y。服务端将上述所有信息放到 SYN+ACK 报文段中,一并发送给客户端,此时服务器进入 SYN_RECV状态。(SYN_RECV是指,服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态。再进一步接收到客户端的ACK就进入ESTABLISHED状态。)

第三次握手:客户端收到服务端的 SYN+ACK(确认符) 报文段;然后将 ACK 设置为 y+1,向服务端发送ACK报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED(连接成功)状态,完成TCP 的三次握手。

第一次挥手:客户端设置seq和 ACK ,向服务器发送一个 FIN(终结)报文段。此时,客户端进入 FIN_WAIT_1 状态,表示客户端没有数据要发送给服务端了。

第二次挥手:服务端收到了客户端发送的 FIN 报文段,向客户端回了一个 ACK 报文段。

第三次挥手:服务端向客户端发送FIN 报文段,请求关闭连接,同时服务端进入 LAST_ACK 状态。

第四次挥手:客户端收到服务端发送的 FIN 报文段后,向服务端发送 ACK 报文段,然后客户端进入 TIME_WAIT 状态。服务端收到客户端的 ACK 报文段以后,就关闭连接。此时,客户端等待 2MSL(指一个片段在网络中最大的存活时间)后依然没有收到回复,则说明服务端已经正常关闭,这样客户端就可以关闭连接了。

注意:如果有大量的连接,每次在连接,关闭都要经历三次握手,四次挥手,这显然会造成性能低下。因此。Http 有一种叫做 长连接(keepalive connections) 的机制。它可以在传输数据后仍保持连接,当客户端需要再次获取数据时,直接使用刚刚空闲下来的连接而无需再次握手。

常见的一些关于3次握手4次挥手的问题

问题1:为什么要3次握手?

为了防止已失效的连接请求报文突然又传送到了服务端,因为产生错误。

具体解释: “已失效的连接请求报文段”产生情况:

client 发出的第一个连接请求报文段并没有丢失,而是在某个网络节点长时间滞留,因此导致延误到连接释放以后的某个时间才到达 service。如果没有三次握手,那么此时server收到此失效的连接请求报文段,就误认为是 client再次发出的一个新的连接请求,于是向 client 发出确认报文段,同意建立连接,而此时 client 并没有发出建立连接的情况,因此并不会理会服务端的响应,而service将会一直等待client发送数据,因此就会导致这条连接线路白白浪费。

如果此时变成两次挥手行不行?

这个时候需要明白全双工与半双工,再进行回答。比如:

第一次握手: A给B打电话说,你可以听到我说话吗?
第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗?
第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦!
在三次握手之后,A和B都能确定这么一件事: 我说的话,你能听到; 你说的话,我也能听到。 这样,就可以开始正常通信了,如果是两次,那将无法确定。
问题2:为什么要四次挥手?

TCP 协议是一种面向连接,可靠,基于字节流的传输层通信协议。TCP 是全双工模式(同一时刻可以同时发送和接收),这就意味着,当主机1发出 FIN 报文段时,只是表示主机1已结没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回 ACK报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会中断这次TCP连接。
问题3:为什么要等待 2MSL

MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间

1、为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。

2、防止已失效的连接请求报文段,出现在本连接中,对服务器造成干扰,客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。

问题4:3次握手了 会发生什么:?

答:当client与server的第三次握手失败了之后,即client发送至server的确认建立连接报文段未能到达server,server在等待client回复ACK的过程中超时了,那么server会向client发送一个RTS报文段并进入关闭状态,即:并不等待client第三次握手的ACK包重传,直接关闭连接请求,这主要是为了防止泛洪攻击,即坏人伪造许多IP向server发送连接请求,从而将server的未连接队列塞满,浪费server的资源。

HTTP1.0 HTTP 1.1 HTTP 2.0主要区别

(1)HTTP1.0和 HTTP 1.1

长连接


HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。

HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。


节约带宽


HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。

这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。


HOST域


现在可以web server例如tomat,设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。

HTTP1.0是没有host域的,HTTP1.1才支持这个参数。


(2)HTTP1.1 HTTP 2.0主要区别

多路复用


HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

关于多路复用,可以参看学习NIO 。


数据压缩


HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。


服务器推送


意思是说,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。

二.OSI七层模型

OSI七层  模型                                             

                               功能对应的网络协议TCP/IP四层概念模型
应用层文件传输,文件管理,电子邮件的信息处理——apduHTTP、TFTP, FTP, NFS, WAIS、SMTP,SNMP,DNS,RIP,TELNET应用层
表示层确保一个系统的应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密,最小单位——ppduTelnet, Rlogin, SNMP, Gopher
会话层负责在网络中的两节点建立,维持和终止通信,在一层协议中,可以解决节点连接的协调和管理问题。包括通信连接的建立,保持会话过程通信连接的畅通,两节点之间的对话,决定通信是否被终端一斤通信终端是决定从何处重新发送,最小单位——spduSMTP, DNS
传输层定义一些传输数据的协议和端口。传输协议同时进行流量控制,或是根据接收方接收数据的快慢程度,规定适当的发送速率,解决传输效率及能力的问题——tpdu  端到端之间(进程到进程之间的通信)TCP, UDP传输层
网络层控制子网的运行,如逻辑编址,分组传输,路由选择最小单位——分组(包)报文IP, ICMP, ARP, RARP, AKP, UUCP,IGMP网络层
数据链路层主要是对物理层传输的比特流包装,检测保证数据传输的可靠性,将物理层接收的数据进行MAC(媒体访问控制)地址的封装和解封装,也可以简单的理解为物理寻址。交换机就处在这一层,最小的传输单位——帧(点对点传输 帧)FDDI, Ethernet, Arpanet, PDN, SLIP, PPP,STP。HDLC,SDLC,帧中继数据链路层
物理层定义物理设备的标准,主要对物理连接方式,电气特性,机械特性等制定统一标准,传输比特流,因此最小的传输单位——位(比特流)IEEE 802.1A, IEEE 802.2到IEEE 802. ISO
  
第一层:物理层
第二层:数据链路层 802.2、802.3ATM、HDLC、FRAME RELAY 
第三层:网络层 IP、IPX、APPLETALK、ICMP 
第四层:传输层 TCP、UDP、SPX 
第五层:会话层 RPC、SQL、NFS 、X WINDOWS、ASP
第六层:表示层 ASCLL、PICT、TIFF、JPEG、 MIDI、MPEG 
第七层:应用层 HTTP,FTP,SNMP等

一些协议的功能解释:

ARP协议:根据IP地址获取MAC地址

RAPR协议:根据MAC地址获取IP地址

DNS协议:域名(主句名)映射至IP地址

DHCP:为接入网络设备动态分配IP地址(内网IP)

ICMP与IP位于同一层,它被用来传送IP的控制信息。它主要是用来提供有关通向目的地址的路径信息。PING是最常用的基于ICMP的服务。

ICMP协议:因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

TFTP协议:是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。

HTTP协议:超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

DHCP协议:动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。

NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,

DHCP协议:一个局域网的网络协议,使用UDP协议工作,用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
 

ping丢包的分析

https://blog.csdn.net/weixin_33721427/article/details/92661924

OSI和TCP/IP之间的关系图

三.IP地址的相关计算题

1.可用的主机范围192.168.0.1-192.168.0.254 网络地址为192.168.0.0广播地址192.168.255.255   (广播地址的主机号全为1)

2.总部给某分公司分配的网络地址是172.16.2.0/24,该分公司有三个部门,每个部门计算机不多于30台,在网络配置时,进行子网划分,可以使用的子网掩码是()

分公司的网络地址是172.16.2.0/24,子网掩码长度就是24位11111111.11111111.11111111.00000000(这个就不要问为什么了);

分公司3个部门,那么就用第25位和第26位来区分三个部门,11111111.11111111.11111111.00000000(00~11),直接排除A;

那么各个部门用来区分自己的子网掩码只剩下最后6位(27~32位)来表示了;

若用255.255.255.192,最后8位是11000000,只能表示11000000~11111111除去广播地址一共62台

若用255.255.255.224,最后8位是11100000,只能表示11100000~11111111除去广播地址一共30台

若用255.255.255.240,最后8位是11110000,只能表示11110000~11111111除去广播地址一共14台

A类地址私用地址范围:10.0.0.0-10.255.255.255 

B类地址私用地址范围:172.16.0.0-172.31.255.255

C类地址私用地址范围:192.168.0.0-192.168.255.255  

3.合法的主机地址指的是A、B、C类IP地址,

A类地址以0开头

B类地址以10开头

C类地址以110开头

D类地址以1110开头,D类地址用于IP多播

四.http下的状态码

1XX(信息状态码)接受请求正在处理
2XX(成功状态码) 请求正常处理完毕
3XX(重定向状态码) 需要附加操作已完成请求
4XX(客户端错误状态码) 服务器无法处理请求
5XX(服务器错误状态码) 服务器处理请求出错

101 切换协议
200 成功
301 永久重定向
302 暂时重定向
400 语法错误
403 没有足够的权限
404 找不到对应的资源 客户端出现问题
500 服务器内部错误
503 服务不可用

       401 (Unauthorized/未授权)

  401 (SC_UNAUTHORIZED)表示客户端在授权头信息中没有有效的身份信息时访问受到密码保护的页面。这个响应必须包含一个WWW-Authenticate的授权信息头。例如,在本书4.5部分中的“Restricting Access to Web Pages./限制访问Web页。”

  403 (Forbidden/禁止)

  403 (SC_FORBIDDEN)的意思是除非拥有授权否则服务器拒绝提供所请求的资源。这个状态经常会由于服务器上的损坏文件或目录许可而引起。

  404 (Not Found/未找到)

  404 (SC_NOT_FOUND)状态每个网络程序员可能都遇到过,他告诉客户端所给的地址无法找到任何资源。它是表示“没有所访问页面”的标准方式。这个状态码是常用的响应并且在HttpServletResponse类中有专门的方法实现它:sendError("message")。相对于setStatus使用sendError得好处是:服务器会自动生成一个错误页来显示错误信息。但是,Internet Explorer 5浏览器却默认忽略你发挥的错误页面并显示其自定义的错误提示页面,虽然微软这么做违反了 HTTP 规范。要关闭此功能,在工具菜单里,选择Internet选项,进入高级标签页,并确认“显示友好的 HTTP 错误信息”选项(在我的浏览器中是倒数第8各选项)没有被选。但是很少有用户知道此选项,因此这个特性被IE5隐藏了起来使用户无法看到你所返回给用户的信息。而其他主流浏览器及IE4都完全的显示服务器生成的错误提示页面。可以参考图6-3及6-4中的例子。

 500 (SC_INTERNAL_SERVER_ERROR) 是常用的“服务器错误”状态。该状态经常由CGI程序引起也可能(但愿不会如此!)由无法正常运行的或返回头信息格式不正确的servlet引起。

  501 (Not Implemented/未实现)

  501 (SC_NOT_IMPLEMENTED)状态告诉客户端服务器不支持请求中要求的功能。例如,客户端执行了如PUT这样的服务器并不支持的命令。

  502 (Bad Gateway/错误的网关)

  502 (SC_BAD_GATEWAY)被用于充当代理或网关的服务器;该状态指出接收服务器接收到远端服务器的错误响应。

  503 (Service Unavailable/服务无法获得)

  状态码503 (SC_SERVICE_UNAVAILABLE)表示服务器由于在维护或已经超载而无法响应。例如,如果某些线程或数据库连接池已经没有空闲则servlet会返回这个头信息。服务器可提供一个Retry-After头信息告诉客户端什么时候可以在试一次。

  504 (Gateway Timeout/网关超时)

  该状态也用于充当代理或网关的服务器;它指出接收服务器没有从远端服务器得到及时的响应。该状态是新加入 HTTP 1.1的。

  505 (HTTP Version Not Supported/不支持的 HTTP 版本)

  505 (SC_HTTP_VERSION_NOT_SUPPORTED)状态码是说服务器并不支持在请求中所标明 HTTP 版本。该状态是新加入 HTTP 1.1的。

HTTP与服务器交互的

四种方法: PUT、DELETE、POST、GET 对应:增、删、改、查

五.HTTP和HTTPS的相关知识

有关http相关面试问题https://blog.csdn.net/weixin_38051694/article/details/77777010

(1)HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

(2)HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

(3)HTTP是无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

1.概念

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。HTTP基于TCP/IP通信协议来传递数据。HTTP基于客户端/服务端(C/S)架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

2.区别

 1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

 4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

六.子网掩码

 子网掩码是由连续的1加连续的0组成。

七.网络连通的检测

ifconfig          查看网络情况

ping                测试网络连通

netstat          显示网络状态信息

nslookup         可以指定查询的类型,可以查到DNS记录的生存时间还可以指定使用哪个DNS服务器进行解释

ipconfig /all     显示本机TCP/IP配置的详细信息

八.TCP协议-如何保证传输可靠性

TCP协议保证数据传输可靠性的方式主要有:

  • 校验和
  • 序列号
  • 确认应答
  • 超时重传
  • 连接管理
  • 流量控制
  • 拥塞控制

九.网络中的一些连接状态

1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN.
    /* The socket is listening for incoming connections. 侦听来自远方TCP端口的连接请求 */

2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT.
    /*The socket is actively attempting to establish a connection. 在发送连接请求后等待匹配的连接请求 */

3)、SYN_RECV:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV
    /* A connection request has been received from the network. 在收到和发送一个连接请求后等待对连接请求的确认 */

4)、ESTABLISHED: 代表一个打开的连接,双方可以进行或已经在数据交互了。
    /* The socket has an established connection. 代表一个打开的连接,数据可以传送给用户 */

5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态.
    /* The socket is closed, and the connection is shutting down. 等待远程TCP的连接中断请求,或先前的连接中断请求的确认 */

6)、CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT.
    /* The remote end has shut down, waiting for the socket to close. 等待从本地用户发来的连接中断请求 */

7)、FIN_WAIT2:主动关闭端接到ACK后,就进入了 FIN-WAIT-2 .
    /* Connection is closed, and the socket is waiting for a shutdown from the remote end. 从远程TCP等待连接中断请求 */

8)、LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK .
    /* The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原来发向远程TCP的连接中断请求的确认 */

9)、TIME_WAIT:在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态。
    /* The socket is waiting after close to handle packets still in the network.等待足够的时间以确保远程TCP接收到连接中断请求的确认 */

10)、CLOSING: 比较少见.
    /* Both sockets are shut down but we still don’t have all our data sent. 等待远程TCP对连接中断的确认 */

11)、CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束.
    /* The socket is not being used. 没有任何连接状态 */

12)、UNKNOWN: 未知的Socket状态。
    /* The state of the socket is unknown. */
SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。
FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。

十。路由器和交换机的区别

(1)路由器可以给你的局域网自动分配IP,虚拟拨号,交换机只是用来分配网络数据的。

(2)路由器在网络层,路由器根据IP地址寻址,路由器可以处理TCP/IP协议,交换机不可以。交换机在中继层,交换机根据MAC地址寻址。

(3)路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。交换机可以把很多主机连起来,这些主机对外各有各的IP

(4)路由器提供防火墙的服务,交换机不能提供该功能。

网关和路由器最大的区别是是否连接相似的网络。如果连接相似的网络,则称为路由器。而连接不相似的网络,称为网关。
 

十一.Socket与长短连接

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

短连接
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。

长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,处理时直接发送数据包就OK了,不用建立TCP连接。数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。
 

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值