1. OSI七层模型:物理层、数据链路层、网络层、运输层、会话层、表示层、应用层。
2. 五层网络架构:物理层、数据链路层、网络层、运输层、应用层。
3. TCP/IP协议族四层架构:数据链路层、网络层、运输层、应用层。
4. DNS递归查询和迭代查询,可以使用nslookup 或者dig查看:
a) 递归查询总会返回一个结果,本地DNS服务器如果没有主机地址,则会13个根DNS服务器查询结果,根DNS服务器一级一级往下查询,最后返回一个切确的结果给本地DNS服务器,这个结果可能是没有找到或者是找到了。
b) 迭代查询。本地DNS服务器从根域名服务器上获取顶级域名服务器,然后本地DNS域名服务器再对其中的一个进行查找,一级一级往下找,知道找到所在的主机地址,然后缓存,返回给客户。
5. 在浏览器中输入http://www.baidu.com发生的事情:
a) 用户输入一个地址,在浏览器缓存中查找有没有相关的主机信息,没有则进行下一步;
b) 客户机向当地的DNS服务器查询主机的ip地址,步骤如下:
(1) 当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。(如果只存有上级域名的信息就直接从上级域名查起)
(2) 如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
(3) 本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的下级域名服务器,如果没有该纪录,则返回相关的下级的域名服务器的地址。
(4) 重复上一步,直到找到所需的域名的地址。
c) 根据DNS找到的IP地址,依据ARP协议进行地址解析,得到服务器的mac地址;
d) 浏览器与找到的主机建立TCP链接,三次握手;
e) 浏览器发送http请求报文,获取目标网页文件;
f) 服务器响应请求报文,发送目标网页文件和响应报文;
g) 释放TCP;
h) 浏览器显示网页;
6. http 1.0与http1.1的主要区别是http1.1使用的是长链接,即http1.1的一个tcp链接可以传递多个web对象,但是http1.0使用的是非长久链接,一个TCP链接只能传递一个web对象。POST和GET的主要区别是POST传递参数是通过请求报文的数据部分表单提交的,GET则是通过在URL后面加参数;POST传递的数据量大小没有限制,GET则有限制;POST比GET要安全。
7. TCP/UDP的区别
面向链接,面向非链接;
可靠传输,不可靠传输;
速度快,速度慢;TCP有拥塞避免、慢启动、快速重传;TCP的首部为8个字节,TCP为20个字节;
8. TCP三次握手四次挥手:
第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
四次挥手
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次挥手”。
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:这个方向上已经没有数据了,我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。此时关闭方进入到TIME_WAIT状态,这个时间一般为2MSL。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
9. 为什么是三次握手四次挥手呢?
三次握手:如果服务器收到客户端的SYN即分配资源准备为客户端开始传输数据,那么有这么一种情况就是当客户端延迟到的SYN到达服务器后,服务器分配资源,但是此时客户端根本没有要求建立连接,此时就会导致服务器资源的浪费。
四次挥手:分别是客户端没有数据要发送和服务器没有数据要发送。为什么要有TIME_WAIT呢?① 如果客户端在进入FIN_WAIT2的状态的时候就关闭了,那么此时服务器的FIN达到的时候,便会发现端口已经关闭了,此时返回一个RST,服务器发现这个链接产生了错误,降低了可靠传输性能;② 如果TIME_WAIT不存在或者时间比较短的话,如果服务器对客户端发送了两次FIN,但是客户端只对其中的一个有回应,当在较短的时间内再次建立链接的时候FIN到达了客户端,客户端误以为服务器要断开链接,产生了错误的信号。2MSL可以保证2次TCP包在数据链路中的传输时间。
10. TCP保证可靠传输的机制.
将数据分割成TCP认为最合适发送的数据块;
设置定时器,超时重传;
到达确认;
检验和检验数据变化;
将数据包进行缓存,重新排序,将数据以正确的方式提交给应用层;
丢弃重复的数据;
提供流量控制,防止缓冲区溢出;
11. TCP滑动窗口机制
为了提高发送报文的速度,防止出现“等-停”现象,发送方在没有收到ack的条件下也可以发送其他的报文。但是为了防止发送方发送数据速度过快而导致接收方的缓冲区溢出,TCP提供了滑动窗口机制,即在接收方维护一个接受窗口,对应的是发送方有一个发送窗口。在每一次的TCP报文传输过程中,有一个窗口大小,发送方根据这个窗口大小来调整发送窗口的大小。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。当收到ack的时候,窗口向右滑动,进行下一步的发送操作,否则,则进行等待超时或者重传。
12. TCP拥塞控制——为了公平的使用互联网宽带,TCP提供了拥塞窗口,所以TCP首部的窗口大小是min{接收窗口,拥塞窗口}
慢启动;收到ack则拥塞窗口翻倍传输,超过ssthresh则拥塞窗口+1;发生超时则ssthresh/2,拥塞窗口=1
拥塞避免;超过ssthresh则拥塞窗口+1,避免过度占用网络;
快速重传;当连续收到三次同样的ack时,不等超时就重传;
13. ARP地址解析协议。ARP地址解析协议适用于局域网。
a) 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系,这张表示子网中的一些IP/MAC映射表。
b) 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
c) 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
d) 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。
PS:首先主机依据主机的子网掩码和目的IP地址,判断是否与主机在同一子网下,在同一子网下,则使用ARP协议在ARP缓冲表或者广播找到MAC地址。如果不是同一局域网下,则通过ARP协议在ARP缓冲表或者广播找到网关的MAC地址,将数据传到网关,再将数据报转发出去。
ARP协议并不只在发送了ARP请求才接收ARP应答。当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP 和MAC地址存储在ARP缓存中。因此,当局域网中的某台机器B向A发送一个自己伪造的ARP应答,而如果这个应答是B冒充C伪造来的,即IP地址为C的 IP,而MAC地址是伪造的,则当A接收到B伪造的ARP应答后,就会更新本地的ARP缓存,这样在A看来C的IP地址没有变,而它的MAC地址已经不是原来那个了。由于局域网的网络流通不是根据IP地址进行,而是按照MAC地址进行传输。所以,那个伪造出来的MAC地址在A上被改变成一个不存在的MAC 地址,这样就会造成网络不通,导致A不能Ping通C!这就是一个简单的ARP欺骗。