1.tcp,udp的区别
TCP是面向连接的,udp发送数据之前不需要建立连接;
Tcp提供可靠的交付,无差错,不丢失,不重复,按序到达;udp尽最大努力交付,不可靠;
Tcp面向字节流,udp面向报文;
tcp是支持一对一通信;udp支持一对一,一对多,多对一,多对多的交互通信;
udp没有拥塞控制机制,无状态协议;
tcp首部开销20字节;udp开销小,8字节。
TCP协议(传输控制协议):HTTP,HTTPS,FTP,Telnet,SMTP(电子邮件)
UDP协议(用户数据报协议):TFTP,SNMP(简单网络管理协议),NFS(网络文件系统),DNS
2.tcp三次握手机制,拥塞控制机制
第一次握手:客户端向服务器发送连接请求包SYN,等待服务器回应;
第二次握手:服务器端接收到客户端SYN请求,返回两个包给客户端,确认自己收到其连接请求的确认包ACK,与向客户端发送连接询问请求包SYN,询问客户端是否已经准备好建立连接进行数据通信;
此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的ACK和SYN包后,知道了服务器同意建立连接,此时需要发送连接以建立的消息给服务器,向服务器发送连接建立的确认包ACK,回应可以建立通信;
服务器接收到ACK包后,服务器与客户端进入established状态,开始进行数据传送。
第三次握手的必要性:
防止已经失效的请求报文突然又传到了服务端而产生连接的误判。
缺陷:
可能会给SYN攻击可趁之机
(TCP释放连接需要四次挥手:TCP半关闭特性,数据在两个方向能同时传递,因此每个方向必须单独关闭)
TCP拥塞控制机制:
我们知道TCP通过一个定时器(timer)采样了RTT并计算RTO,但是,如果网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,然而重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这就导致了恶性循环,最终形成“网络风暴” —— TCP的拥塞控制机制就是用于应对这种情况。 首先需要了解一个概念,为了在发送端调节所要发送的数据量,定义了一个“拥塞窗口”(Congestion Window),在发送数据时,将拥塞窗口的大小与接收端ack的窗口大小做比较,取较小者作为发送数据量的上限。
慢开始:TCP开始时设置拥塞窗口大小为1,从小到大逐渐增大拥塞窗口的大小。为了防止cwnd增长过大引起网络拥塞,设置一个慢开始门限。小于:慢开始算法;大于:拥塞避免算法。
拥塞避免:拥塞避免阶段将拥塞窗口控制为按线性规律增长,每经过一个往返时间RTT就把发送方的拥塞控制窗口加一。无论是在慢开始还是在拥塞避免阶段,只要发送方的网络出现拥塞,就把慢开始门限设置为出现拥塞时发送窗口大小的一半。然后把拥塞窗口置1,执行慢开始算法。
快重传:要求接收方在收到一个失序的报文后就立即发出重复确认,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
快恢复:当发送方收到三个重复的确认时,就执行乘法减小策略;但是接下来将拥塞窗口设置为慢开始门限的大小,然后执行拥塞避免机制。
TCP如何保证可靠传输?
确认和重传机制,接收方收到报文就会确认,发送方发送一段时间没有收到确认就重传。
数据校验
数据合理分片与排序
流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。
拥塞控制
3.TCP滑动窗口机制?-流量控制
发送方有一个发送窗口,只有落在发送窗口中的桢才会被发送;同时接收方也维护一个接收窗口,通过调整发送窗口与接收窗口可以实现流量控制。
TCP滑动窗口机制通过动态改变窗口大小调节两台主机之间的数据传输。当接收方设备要求降低或者增大网络流量时,可以对窗口大小进行减小或者增加。
当接收方设备要求窗口大小为0,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求暂停发送。发送方接收到携带窗口号为0的确认,停止这一方向的数据传输
发送端根据接收端返回的ACK可以得到两个重要的信息:一是接收端期望收到的下一个字节序号;二是当前的窗口大小
4.udp传输不确定的原因
接收端处理时间长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完再次调用recv方法,在这二次调用的时间里,发过来的包可能丢失。(可以修改接收区,接收到的包先存入缓冲区)
发送的包巨大,超过接收者的缓存导致丢包(切割发送包)
发送包的频率过快
5.链表和数组的区别
数组:数组是一块连续的区域,需要预留空间,使用前需要先申请内存的大小,可能会浪费内存空间;插入和删除数据的效率比较低;随机读取的效率比较高。
链表:内存中可以存在任何地方,不要求连续;每一个数据都保存了下一个数据的内存地址;增加和删除数据比较容易;查找数据时效率低。
6.sockect套接字
socket是应用层与TCPIP协议族通信的中间软件抽象层,它是一组接口。
套接字工作流程,服务器端先初始化socket,然后与端口绑定,对端口进行监听,调用accept阻塞,等待客户端连接。在这时如果有一个客户初始化一个socket,然后连接服务器,如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,然后关闭连接。
7.http协议
http请求报文:请求行包含请求方法,URI,HTTP版本信息
响应报文状态行包括:Http版本,状态码,状态码原因短语。
向浏览器输入网址后解析的全过程与涉及到的各层协议
8.计算机的组成TCP/IP协议每一层
应用层:http, ftp, smtp, telnet(远程登录协议), tftp(简单文件传输协议),dhcp
传输层:tcp, udp,rtp,pptp
网络层:IP,OSPF,RIP
网络接口层:ARP(地址解析协议),RARP(逆地址解析协议)
9.RIP和OSPF的区别?
RIP(routing information protocol):分布式基于距离向量的选择协议;仅与相邻的路由器交换状态,交换的信息是当前路由器知道的所有信息,即路由表;按固定时间间隔交换路由信息;每一个路由器只知道到所有路由器的距离以及下一跳,不知道全网拓扑,发生网络故障时需要较长的时间才能将消息传递给所有路由器。
Ospf(open short path first):基于链路状态;向本AS内所有的路由器发送信息,发送的是与本路由器相邻的所有路由器的链路状态;只有当网络状态发生改变时才会发生;每一个路由器都能建立一个链路状态数据库,能够较快进行更新。
10.网络性能的五项指标?
可用性
响应时间
网络利用率
网络吞吐量
网络带宽容量
11. HTTP和HTTPS的区别?
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
https的缺点?
虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:
(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
12. ARP解析过程
将IP地址解析为MAC地址的协议
在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。APR就是实现这个功能的协议。
(1) 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B
(2) 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
(3) 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
(4) 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。
13. DNS解析过程
1) 浏览器缓存
当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);
2) 系统缓存
当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;
3) 路由器缓存
当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;
4) ISP(互联网服务提供商)DNS缓存
当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;
5) 根域名服务器
当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;
6) 顶级域名服务器
顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;
7) 主域名服务器
主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;
8)保存结果至缓存
本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。