一、简述TCP\UDP的区别
UDP(User Datagram Protocol),用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事物的简单不可靠信息传送服务。UDP不提供数据包的分组、组装和不能对数据包进行排序的缺点,换言之,当报文发送之后,是无法得知其是否安全完整到达的。特点如下:
- 由于传输数据不建立连接,因此不需要维护连接状态,包括收发状态等,因此一台服务器可同时向多个客户机传输相同的消息。
- UDP信息包的标题很短,只有8个字节,开销较小。
- 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输宽带、源端和终端主机性能的限制。
- UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分也不合并,而是保留这些报文的边界,因此应用程序需要选择合适的报文大小。
TCP(Transmission Control Protocol),传输控制协议是为了在不可靠的互联网络上提供可靠的端到端字节流而设计的传输协议。具有如下规定:
- 数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组
- 到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认
- 超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重新分片
- 滑动窗口:TCP连接每一方的接收缓冲空间大小都是固定的,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出
- 失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层
- 重复处理:作为IP数据报来传输的TCP分片可能会发生重复,TCP的接收端必须丢弃重复的数据
- 数据校验:TCP将保持它的首部和数据的检验和,端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收的到的分片的检验和有差错,TCP将丢弃这个分片,并不确认收到次报文段导致对端超时并重发。
具有一下特点:
- 基于流的方式
- 面向连接
- 可靠的通信方式
- 在网络状况不佳的时候尽量降低系统由于重传带来的宽带开销
- 通信连接维护是面向通信的两个端点,而不考虑中间网段和节点
主要的区别大致如下:
- TCP是面向连接,UDP是面向非连接即发送数据前不需要建立连接
- TCP提供可靠的服务(数据传输),UDP是不可靠的传输
- TCP面向字节流,UDP面向数据报文
- TCP数据传输慢,UDP数据传输快
- TCP发送失败会重发,UDP不会重发
二、简单说一下了解的端口以及对应的服务?
三、描述TCP的三次握手和四次挥
三次握手建立连接:
- 客户端发送SYN(SEQ = x)报文给服务器端,进入SYN_SEND状态
- 服务端收到SYN报文,回应一个SYN(SEQ = y)ACK(ACK = x+1)报文,进入SYN_RECV状态
- 客户端收到服务端的SYN报文,回应一个ACK(ACK = y+1)报文,进入Established状态。
为什么要有三次握手?
第一次握手:Client什么都无法确认,Server确认了对方发送正常
第二次握手:Client确认:自己发送、接收正常,对方发送、接收正常;Server确认:自己接收正常,对方发送正常
第三次握手:Client确认:自己发送、接收正常,对方发送接收正常;Server确认:自己发送、接收正常,对方发送接收正常。
四次挥手:终止一个连接,这是由TCP的半关闭(half-close)造成的。
- 客户端发送一个FIN,用来关闭客户端到服务其的数据传送。(主动关闭)
- 服务器收到这个FIN,发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号
- 服务器关闭与客户端的连接没法送一个FIN给客户端
- 客户端发回ACK报文确认,并将确认序号设置为收到序号加1
为什么有四次挥手?
四、TCP的拥塞处理
什么是拥塞?计算机网络中的宽带、交换结点中的缓存以及处理机等都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况叫做拥塞。
拥塞控制?就是防止过多的数据注入网络中,这样可以使网络中的路由器或者链路不致过载。
主要方法:
- 慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,由小到大逐渐增加拥塞窗口的大小。
- 拥塞避免:拥塞避免算法让拥塞窗口缓慢增长
- 快重传:接收方在收到一个失序的报文段后就立即发出重复确认,让发送方及早知道有报文段没有发送成功,而不是等到自己发送数据时捎带确认。快重传算法规定:发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
- 快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半,但是接下去并不执行慢开始算法:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。
四、私有的保留地址
五、IP地址的分类
A类地址:以0开头,第一个字节为网络号,其余三个字节为主机号。地址范围:0.0.0.0 ~127.255.255.255
B类地址:以10开头,前两个字节为网络号,剩余两个字节为主机号。地址范围:128.0.0.0~191.255.255.255
C类地址:以110开头,前三个字节为网络号,最后一个字节为主机号。地址范围:192.0.0.0~223.255.255.255
D类地址:以1110开头,地址范围为:224.0.0.0~239.255.255.255,为组播地址,是一对多的通信
E类地址:以1111开头,地址范围为:240.0.0.0~255.255.255.255,保留地址,供以后使用
(ABC类有网络号和主机号之分,DE没有划分网络地址和主机地址)
1)网络地址:IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,即0,代表整个网络
2)广播地址:通常称为直接广播地址,是为了区分受限广播地址。广播地址中,主机号为全1,即255。当向某个网络的广播地址发送消息时,该网络内的上有主机都能收到该广播消息。
3)组播地址:D类地址
4)255.255.255.255:该IP地址指的是受限的广播地址。受限的广播地址与一般的广播地址的区别在于:受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可以用在本地广播,也可以跨段广播。(一般的广播地址能够通过某些路由器,而受限的广播地址不能通过路由器)
5)0.0.0.0:常用于寻找自己的IP地址。常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。
6)回环地址:127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1。
7)A、B、C类私有地址
私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。
A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
六、子网掩码
IPv4的弊端:网络号占位太多,主机号占位太少,其能提供的主机地址也越来越稀少。目前除了使用NAT在企业内部利用保留地址自行分配以外,通过对一个高类别的IP地址进行再划分,以形成多个子网,提供给不同规模的用户群使用。主要是为了在网络分段情况下有效的利用IP地址,通过对主机号的高位部分作为子网号,从通常的网络位界限中扩展或压缩子网掩码,用来创建某地址的更多子网。但在创建更多子网的同时,每个子网上的可用主机地址数目会比原先减少。
子网掩码:是标志两个IP地址是否属于同一个子网的,为32位二进制地址,其每一个1代表该位是网络位,为0代表是主机位。它的IP地址一样也是使用点式十进制表示,如果两个IP地址在子网掩码的按位与的计算下结果相同,表名它们属于同一个子网。
A类地址的子网掩码:255.0.0.0
B类地址的子网掩码:255.255.0.0
C类地址的子网掩码:255.255.255.0
例如,某个公司有一个C类IP网段,192.168.1.0,子网掩码/24。有四个部门,销售部59台主机,技术27台,业务121台,会计10台,要求每个部门划分到不同网络。
192.168.1.0划分为:192.168.1.0000 0000 (主机号第一位固定为0) 192.168.1.1000 0000 (主机号第一位固定为1),每个网络可以包括-2=126个主机,则其中一个网路可以被业务所用。再将192.168.1.1000 0000网络再分:192.168.1.1000 0000(第二位固定为0)和192.168.1.1100 0000(第二位固定为1),每个网络可以容纳-2=62个主机,其中一个可以被销售部所用。再将192.168.1.1100 0000(第二位固定为1)分为:192.168.1.1100 0000(第三位固定为0)和192.168.1.1110 0000(第三位固定为1),分别可容纳-2=30个网络,分别给技术部和会计部所用。
八、OSI七层模型
1、物理层
实际最终信号的传输是通过物理层实现的,通过物理介质传输比特流。物理层的传输介质主要有:集线器、中继器、调制解调器、网线、双绞线、同轴电缆等。
2、数据链路层
将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。数据链路层又分为2个子层:逻辑链路控制子层(LLC)和访问控制子层(MAC)
3、网络层
本层通过IP地址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换结点,正确无误地按照地址传送给目的端的运输层。就是常说的IP层,这层就是IP协议层,IP协议是Internet的基础。
4、传输层
传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层想高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP、UDP就是在这层。端就是端口号。
5、会话层
会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和相应组成。
6、表示层
表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另外一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。
7、应用层
OSI模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户提供各种网络服务。常见应用层的网络服务协议有:HTTP、HTTPS、FTP、POP3、SMTP等。
九、五层模型
九、TCP\IP四层模型
1、数据链路层:
作用:
- 实现网卡接口的网络驱动,以处理数据在以太网等物理媒介上的传输
- 网络驱动程序隐藏了不同物理网络的不同电气特征,为上层协议提供一个统一接口
协议应用:
- ARP和RARP(Reverse Address Resolve Protocol),即逆地址解析协议,该协议实现IP地址和物理地址(MAC地址)之间的转换。
2、网络层
作用:网络有分局域网(LAN)和广域网(WAN)。对于后者通常需要众多分级的路由器来连接分散的主机或者LAN,即通信的两台主机一般不是直接连接,而是通过多个中间节点(路由器)连接的,从而形成网络拓扑连接。
- 网络层的任务之一就是选择这些中间节点,以确定两台主机间的通讯路径
- 其次网络层对上层协议隐藏了网络拓扑连接的细节,在使得传输层看来通讯双方是直接连接的
协议应用:
- IP协议:(Internet Protocol)是网络层最核心的协议。它根据数据包目的IP地址来决定如何投递该数据包。若数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳路由器,并将数据包交付给该路由器去转发,如此循环直至到达目标主机或者发送失败而丢弃该数据包
- ICMP协议:(Internet Control Message Protocol,因特网控制报文协议)是IP协议的补充,用于检测网络的连接状态。
3、传输层
作用:
- 传输层的作用是为了应用程序提供端对端通讯的错觉,即应用程序隐藏了数据包跳转的细节、负责数据包的收发、链路超时重连等。
协议应用:
- TCP协议:
- UDP协议
- SCTP协议:(Stream Control Transmission Protocol,流控制传输协议)为了在因特网上传输电话信号而设计的。
4、应用层
作用:
- 应用层是在用户空间实现的,负责处理众多业务逻辑,如文件传输、网络管理等
协议应用:
- telnet协议:远程登陆协议,它使我们能咋本地完成远程任务
- OSPF协议:(Open Shorttest Path First,开放最短路径优先)是一种动态路由更新协议,用于路由器之间的通讯,以告知对方自身的路由信息。
DNS协议:(Domain Name Service,域名服务)提供机器域名到IP地址的转换,例如:百度的机器域名是www.baidu.com,对应的IP地址是:http://119.75.217.109/
十、ARP/RARP协议
ARP:Address Resolution Protocol,地址解析协议。RARP:Reverse Address Resolution Protocol 逆地址解析器。主要是实现IP地址和物理地址之间的相互转换。主机在发送信息时,将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址个物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误主机,这就构成一个ARP欺骗。ARP命令可以用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
ARP工作流程:以主机A和主机B通信为例说明
主机A--> IP地址:192.168.1.1 MAC地址:0A-11-22-33-44-01
主机B--> IP地址:192.168.1.2 MAC地址:0A-11-22-33-44-02
- 根据主机A上的路由表内容,确定主机B的IP地址。然后主机A在本地ARP缓存中根据主机B的IP地址确定是否有与之匹配的B的MAC地址
- 如果主机A的ARP缓存中没有缓存主机B的IP和MAC地址,则要去寻找主机B的MAC地址。需要将ARP请求帧广播到本地网络上的所有主机,主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都能接收到该ARP请求,并且检查与自己的IP地址是否匹配,若不匹配,则会将该ARP请求丢弃。主机B也会收到广播的ARP请求,发现IP地址与自己的IP地址匹配,就会将主机A的IP地址和MAC地址映射添加到本地的ARP缓存中。
- 主机B会将包含其MAC地址的ARP回复消息直接发给主机A。(可以直接发的原因是主机B的本地ARP缓存已经缓存了主机A的IP地址和MAC地址)
- 当主机A收到从主机B发来的ARP回复消息时,会在本地ARP缓存中更新主机BdeIP地址和MAC地址。主机B的MAC一旦确认,主机A就可以和主机B发送IP通信了。
(本地ARP缓存是有生命周期的,生存期结束后,将重复上面的过程)
RARP:逆地址解析协议。将某个主机的物理地址转换成IP地址。比如局域网中有一台主机只知道MAC地址,而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。
RARP协议工作流程:
- 给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址
- 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址。如果存在RARP服务器就给原主机发送一个响应数据包并将此IP地址提供给对方主机使用;如果不存在,RARP服务器就不做任何响应。
- 原主机收到RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。
十、HTTP协议
HTTP(HyperText Transfer Protocol),超文本传输协议,是互联网上应用最为广泛的一种网络协议。HTTP是一种通信协议,它允许将超文本标记文档(HTML)从web服务器传送到客户端的浏览器。详细的规定了浏览器和万维网(WWW=World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。浏览网页是HTTP的主要应用。HTTP的默认端口号是80.
特点:
- 无状态:协议对客户端没有状态存储,对事物处理没有记忆能力,比如访问一个网站需要反复进行登陆操作
- 无连接:每次请求需要通过TCP三次握手和三次挥手,和服务器重新创建连接。
- 基于请求和响应:基本的特性,由客户端发起请求、服务端响应
- 简单快速、灵活
- 通信使用明文,请求和响应不会对通信双方进行确认,无法保护数据的完整性。
工作流程:(事物,一旦那个步骤出现问题,就不会成功,且返还信息到客户机的屏幕)
- 首先客户机与服务器需要建立连接。(实际上只是单机某个超连接,HTTP的工作就开始了)
- 建立连接后,客户机发送一个请求给服务器,请求格式:统一资源标示符(URL)、协议版本号、后面是MIME信息,包括请求修饰符、客户机信息和可能的内容
- 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
- 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
请求方法:
- OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
- HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。
- GET:向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
- PUT:向指定资源位置上传其最新内容。
- DELETE:请求服务器删除Request-URI所标识的资源。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
- PATCH:用来将局部修改应用于某一资源,添加于规范RFC5789。
(最主要是GET和HEAD)
简述GET和POST的区别:
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
- GET提交的数据大小有限制,最多只能有1024字节(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
十一、Https
基于HTTP协议,通过SSL或者TLS提供加密处理数据、验证对方身份以及数据的完整性保护。
- 内容加密:采用的共享秘钥加密和公开秘钥加密的混合加密技术,中间者无法直接查看明文的内容
- 验证身份:通过证书认证客户端访问的是不是自己的服务器
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改
实现原理:
- client向server发送请求https://baidu.com,然后连接到server的443端口,发送的信息主要是随机值1和客户端支持的加密算法。
- server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集。
- 随即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。传送证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
- 客户端解析证书,这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值(预主秘钥)。
- 客户端认证证书通过之后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥。 让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
- 服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同。
- 客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。
- 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了。
(实际上就是让客户端和服务器拥有相同的秘钥,使用该秘钥对数据进行加密传输)
十一:Https与Http的区别
Http协议是运行在TCP之上,明文传输,客户端和服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。Https采用的加密机制是一种共享秘钥加密和公开秘钥加密并用的混合加密机制。主要不同:
- 端口不同:HTTP的端口为80,Https的端口为443
- 资源消耗不同:由于HTTPS会有加密和认证处理,需要消耗更多的CPU和资源
- 开销:HTTPS通信需要证书,而证书一般需要向认证机构购买。
十三: 对称加密和非对称加密
对称加密:加密和解密使用同一个秘钥。如何安全的传输秘钥是其关键。存在安全问题,但是速度快
非对称加密:使用一对非对称秘钥,即公钥和私钥,公钥可以随意发布,但是私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。可以保证安全性,但是速度慢。
十四:客户端不断进行请求连接会怎么样?什么是DDos(Distributed Denial of Service)攻击?
客户端不断的进行请求连接,那么服务端就会不断的向其发送确认连接的报文,等待客户端连接。
分布式拒绝服务攻击(DDos):处于不同位置的多个攻击者同时向一个或者数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的出发点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中攻击者可以有多个。
- 多个客户端向服务端发送连接请求
- 服务端向客户端发送确认连接
- 但是客户端不想服务端发送确认连接消息,让服务端一直处理等待的状态
DDos预防:
- 限制同时打开SYN半连接的数目
- 缩短SYN半连接的Time out的时间
- 关闭不必要的服务
未完待续。。。