一、TCP和UDP的区别?
- TCP是面向连接的,UDP是面向无连接的
面向连接:就是TCP传输之前是要先发送请求和应答包,确定双方能够正常传输后,才会进行数据传输
面向无连接:UDP在发送数据前,并不考虑对方是否能接收到,甚至目的地址可能是无效的
- TCP能保证可靠传输,UDP不能保证可靠传输
所谓可靠就是TCP能保证数据一定能送到目的地之,为了实现可靠性,TCP采用有连接的,超时重传,应答机制等。UDP没有采用,所以不能保证数据一定能送到
- TCP结构复杂,消耗资源多,建立过程较慢,较复杂;UDP结构简单,消耗资源少,建立过程较快
- TCP是基于流模式,UDP是基于数据报
TCP把数据报看成一连串无结构的字节流,没有边界,一段传输构成整个数据块,通过发送缓冲区和接收缓冲区来存储数据流;UDP是数据报模式,每一个数据报都是一个独立的对象,有指定的大小
- TCP连接只能是点到点,UDP可以是一对一,一对多,多对多
TCP只能点对点连接是因为TCP传输之前需要先建立连接,因此广播和多播采用UDP数据报的方式
- TCP有确认,重传,拥塞控制机制,UDP在没有建立连接或者对方已经退出的情况下仍会继续发送数据,会导致通信流量的浪费
二、TCP和UDP的用途?
7. TCP:用于实现可靠传输的情况,文件非常重要,对网络拥塞有较高的要求的情况
8. UDP:用于高速传输和实时性较高的场合(即时通信)对于UDP的实时视频通信,如果出现丢包,也会出现短暂的卡顿,但是如果采用TCP,丢包后需要重传,会造成长时间的卡顿
三、TCP是如何确保可靠传输的?
(1)连接管理:三次握手,四次握手
(2)丢包:应答和超时重传机制
(3)分片乱序:序列号
(4)拥塞控制:慢启动算法、拥塞窗口
(5)加快通信速度:快速重发,三次收到重大的消息,进行重发
(6)滑动窗口:提高发送效率,对发送端和接收端进行流量控制
四、如何使用UDP建立可靠的连接?
(1)将数据包进行编号,按照包的顺序接收并存储
(2)接收端收到数据包后,发送确认信息到发送端,发送端接收确认信息后,再继续发送下一个包,如果接收端收到的数据编号不是期望的编号,则要求发送端重新发送
五、TCP的三次握手
-
客户端发送请求包,告诉服务器需要进行通信,数据包中syn位置为1,假设其序列号为x,客户端状态变成SYN_SENT
-
服务器收到请求包后也会发送一个请求包,告诉客户端可以连接,数据包中syn的位置为1,假设序列号为y,但是这个应答包的32位应答号必须是x+1(因为客户端发送过来的包syn为被认为占了一个数据,因此告诉下一个包必须从x+1开始发),发送后服务器进入SYN_RCVD状态
-
客户端发送应答包,告诉服务器可以进行通信了,数据报应答号为y+1,客户端状态变为ESTABLISHED状态,即为可以传输状态;服务器接收到应答包后,状态变成ESTABLISHED
六、TCP为什么是三次握手?
因为信道是不可靠的,可能存在延时和丢包,而三次是满足可靠性的最小次数。
- 如果只有两次,假设主机A发送第一个请求包延时,主机A在等待一段时间后又重新发送一个请求包,完成数据连接并断开。这时上次发送的请求包才到达主机B,这时主机B认为又是一次连接,因此发送一个请求包给A,但是A并没有发出新的请求,因此丢失了该数据包,最后B一直等待A发送数据,浪费了资源。
- 除此之外,我认为三次握手更加安全,加大了攻击难度,如果是两次,一个发送,一个应答,那么攻击者可以采用IP欺骗,发动SYN洪水攻击,而且服务器端还是ESTABLISHER状态,不能进行防御,而三次握手可以限制半连接的数量来达到一个防御的作用。
七、TCP四次握手?为什么是四次?
(1) 客户端发送请求断开数据包,告诉服务器数据传输完了要断开,发送一个FIN包,序号为x+2,客户端进入FIN_WEIT_1状态
(2) 服务器发送应答包,告诉服务器接收到断开请求,应答号为x+3,服务器进入CLOSE_WAIT状态,客户端收到应答后,转为FIN_WAIT_2状态
(3) 服务器发送一个断开的数据包,告诉客户端既然已经完成,那这边也准备关了,序列号为y+1,发送完后进入LAST_ACK状态
(4) 客户端发送一个应答包,告诉服务器,好的,已经知道要断开了,应答号为y+2,客户端进入TIME_WAIT状态
TIME_WAIT状态又叫2MSL状态,MSL是系统中定义的最大报文生存时间,任何TCP报文在网络中的生存时间超过这个值都会将其丢弃。等待MSL的原因是防止ACK丢失后可以进行重发,如果ACK丢失后,服务器重发FIN
TCP通信是一种全双工的通信,可以进行半关闭,所谓瓣关闭就是指可以只关闭从A到B的方向,而B到A的方向可以继续传输,因此客户端和服务器分别进行关闭
八、TCP对应的协议?UDP对应的协议?
TCP:
(1)FTP:定义了文件传输协议,使用21端口
(2)Telnet:一种用于远程登录的协议,使用23端口,用户可以以自己的身份远程连接到计算机上
(3)SMTP:邮件传输协议,英语发送邮件,服务器开放的是25号端口
(4)POP3:是和SMTP对应,POP3用于接收邮件,POP3协议使用的是110端口
(5)HTTP:是从WEB服务器传输超文本到本地浏览器的传送协议,使用的是80端口
UDP:
(1)DNS:用于域名解析服务,将域名地址转换为IP地址,DNS用的是53号端口
(2)SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的,由于网络设备很多,无连接的服务就体现了优势
(3)TFTP:简单文件传输协议,该协议在69号端口上使用UDP服务
九、OSI(7层) 、TCP/IP(4层)、五层协议的体系结构,以及各层的协议
(一) OSI七层:每一层的作用和协议
(1)物理层:IEEE802,IEEE8902.2
作用:以二进制的数据形式在物理媒体上传输数据(中继器,网关,集线器)
(2)数据链路层:ARP,RARP,PPP,MTU
作用:传输有地址的帧,将比特组装成帧和点到点的传递,以及错误检测功能(网桥,交换机)
(3)网络层:IP,RIP,ICMP,IGMP,OSFP,ARP,RAR
作用:负责数据包从源到宿的传递和网际互联,寻址和路由选择(路由器)
(4)传输层:TCP,UDP
作用:提供端到端的可靠报文传递和错误恢复
(5)会话层:没有要求考的协议
作用:建立,管理,终止会话
(6)表示层:没有要求考的协议
作用:对数据进行翻译,加密和压缩
(7)应用层:DNS,HTTP,FTP,SMTP,TFTP
作用:文件传输,电子邮件,文件服务,虚拟终端,提供应用程序间的通信
(二)TCP/IP(4层)
(1)网络接口层(对应物理层和数据链路层)
(2)网际层(对应网络层)
(3)运输层(对应传输层)
(4)应用层(对应应用层和表示层)
(三)五层协议
(1)物理层
(2)数据链路层
(3)网络层
(4)运输层
(5)应用层
十、HTTP的主要特点?
(1) 简单快速:客户端向服务器发送请求时,只是简单的填写请求路径和请求的方法即可,然后可以通过浏览器或其他方式将请求发送就行了
(2) 灵活:HTTP协议允许客户端和服务器端传输任意类型,任意格式的数据对象
(3) 无连接:无连接的含义就是限制每次连接只处理一个请求。服务器处理完客户端的请求,并收到客户端的应答后,即断开连接,采用这种传输方式可以节省传输时间
(4)无状态:是指协议对于事务处理没哟记忆功能,服务器不知道客户端是什么状态,即客户端发送HTTP请求后,服务器根据请求,会给我们发送数据,发送完后不会记录信息(使用COOKIE可以保持SESSION,解决无状态的问题)
(5)支持客户/服务器模式
十一、HTTP和HTTPS的区别?
(1) HTTPS协议需要申请证书,一般免费的证书很少,需要交费
(2) HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性加密传输协议
(3) HTTP的连接是简单的,是无连接的
(4) HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,HTTP的端口号是80,HTTPS的端口号的443
(5) HTTPS协议是由ssl+HTTP协议构建的可进行加密的传输,身份认证网络的协议,要比HTTP协议安全的多
十二、HTTPS通信流程?为什么能保证通信安全?
(1) 客户端想服务端发送一个通信请求
(2) 服务器向客户端发送自己的数字证书。证书中有一个公钥用来加密的,私钥由服务器持有
(3) 客户端收到服务器证书后,回去验证这个数字证书到底是不是服务器的,如果数字证书没有什么问题,就说明数字证书中的公钥是服务器的,检查数字证书后,客户端会发送一个随机的字符串给服务器进行加密
(4) 服务器把加密的结果发送回给客户端
(5) 客户端用公钥解密这个返回结果。验证服务器身份之后,客户端生成一个对称加密算法和密钥。这个对称加密算法和密钥,客户端会用公钥加密后发送给服务器,别人截获也没用,因为只有服务器有解密的私钥,这样,后面服务器和客户端就可以用对称加密算法来加密和解密通信内容了。
十三、HTTP返回的状态码
(1) 200 :请求被正常处理
(2) 400: 请求报文语法错误,服务器无法识别
(3) 404: 服务器无法找到对应资源
(4) 500: 服务器内部错误
(5)503: 服务器正忙
(6)403:请求对应资源禁止访问
(7)401:请求需要认证
(8)204:请求被受理,但没有资源返回
十四、SESSION (有点口头的意思了)
解释SESSION:SESSION是一个存储在服务器上类似一个散列表格的文件,存有我们需要的信息,我们需要用的时候可以从里面取出,类似一个大号的MAP,里面的键存储的是用户的SESSIONID,用户向服务器发送请求的时候会带上这个SESSIONID,这时就可以从中取出对应的值。
SESSION的作用:
简单举例:在登录某些网站的时候,输入了用户名和密码,登录以后再打开新的页面时,自动显示的是已登录的状态,不需要再次重新登录。
SESSION的生命周期:
当SESSION超过一定时间(一般为30分钟)没有被访问时,服务器就会认为这个SESSION对应的客户端已经停止活动,然后将这个SESSION删除,用以节省空间。当用户关闭浏览器时,SESSIONID的信息会丢失,虽然服务器SESSION还在,依然无法访问到SESSION中的数据。
十五、Cookie机制、Cookie实现原理
Cookie是进行网站用户身份,实现服务端SESSION会话持久化的一种非常好的方式。
为什么需要Cookie?
HTTP是一种无状态的协议,客户端与服务器建立连接并传输数据,数据传输完之后,连接就会关闭,再次交互数据的时候需要重新建立连接,因此,服务器无法从连接上跟踪会话,也无法知道用户上一次做了什么。Cookie是解决HTTP无状态的有效手段,服务器可以设置或读取Cookie中包含的信息。当用户登录后,服务器会发送包含登录凭据的Cookie到用户浏览器客户端,而浏览器对该Cookie进行某种形式的存储,用户再次访问这个网站的时候,浏览器会发送该Cookie到服务器,服务器进行验证,合法时使用户不必输入用户名和密码可以直接登录。
Cookie实现原理
Cookie定义了一些HTTP请求头和HTTP响应头,通过这些HTTP头信息使服务器可以与客户进行状态交互。
客户端请求服务器后,如果服务器需要记录用户状态,服务器会在响应信息中包含一个Set-Cookie的响应头,客户端会根据这个响应头存储Cookie信息。再次请求服务器时,客户端会在请求信息中包含一个Cookie请求头,而服务器会根据这个请求头进行用户身份、状态等较验。
十六、GET和POST的区别?
(1) get是不安全的,因为URL是可见的,可能会泄露信息,如密码等。Post比get的安全性高
(2) get传输的数据量小,因为受URL长度的限制,但效率高。Post可以传输大量数据,所以上传文件时只能用post方式
(3) get重点是从服务器上获取资源,post重点是向服务器发送数据
(4) get传输数据是通过URL请求,以field(字段)=value的形式,置于URL后,并用“?”连接,多少请求数据间用“&”连接,这个过程用户是可见的。Post传输数据通过HTTP的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的
十七、IP地址的分类
IP地址由网络号和主机号组成,IP与子网掩码相与得到网络号,IP地址一共占4个字节。
(1) A类地址:网络号是前一个字节;起始位是0;第一个字节的范围:(0~127)(1.0.0.0-126.255.255.255)
(2) B类地址:网络号是前两个字节;起始位是10;第一个字节的范围:(128~191)(128.0.0.0-191.255.255.255)
(3) C类地址:网络号是前三个字节;起始位是110;第一个字节的范围:(192~223)(192.0.0.0-223.255.255.255)
(4) D类地址:不分网络地址和主机地址;起始位是1110;第一个字节的范围:(224~239)(224.0.0.0-239.255.255.255)
(5) E类地址:不分网络地址和主机地址;起始位是11110;第一个字节的范围:(240~255)(240.0.0.0-255.255.255.255)
十八、交换机,路由器,网关的作用
(1) 交换机:工作在数据链路层,交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习他的MAC地址,保存成一张ARP表,在今后的通讯中,发往该MAC地址的数据包将仅送往对应的端口,而不是所有的端口。因此交换机可用于划分数据链路层广播。
(2) 路由器:路由器是计算机网络设备,提供路由和转发两种重要机制,可以决定数据包从源端到目的端所经过的路由路径,这个过程称为路由。将路由器输入端的数据包移送至适当的路由器输出端,这称为转送,路由器工作在网络层
(3) 网关:网关连接两个网络设备。路由器就是工作在的三层的网关设备。而代理服务器(特定与一定的服务,譬如web服务。)就是应用层的网关。