一TCP和UDP比较
是否面向连接 是否提供可靠交付 实时性 工作效率 安全性
UDP(用户数据报协议),是一种面向无连接的传输方式,不提供复杂的控制机制,如果传输过程中出现丢包,UDP也不负责重发,甚至包到达顺序乱是也没有纠正的功能。由于UDP面向无连接,所以可以随时发送数据,UDP本身的处理简单又高效,常用在一下几个方面
-
包总量较少的通信(DNS)
-
视频、音频等媒体通信(即时通信)
-
限定于LAN等特定网路咯中的应用通信
-
广播通信(广播、多播)
TCP(传输控制协议),是一种面向连接的通信服务,只有在确认通信对端存在时才会收发数据, 从而可以控制通信流量的浪费. TCP 提供了数据传输时的各种控制功能, 丢包时可以进行重发控制, 还可以将次序乱掉的分包进行顺序控制。TCP最大的特点就是可靠传输:
-
应答机制:对方收到消息底层会回复
-
超时重传:给对方发送一个数据,如果一段时间内对方没有接收,会隔一段时间给对方再次发送,如果一直没有回复,会认为对方掉线了
-
错误校验:如果接收的数据包序号发生了错乱,TCP会自动排序,保证数据的有序性,如果有重复数据包,会删除重复的数据包
-
流量控制:数据发送在网卡缓存区达到一定上限,对方不会一直发送数据,需要等待对方接收数据,网卡缓存区有空间再发送,保证网卡缓存不会超出
TCP与UDP的适用场景
TCP:
对数据传输的质量有较高要求,但对实时性要求不高。比如HTTP,HTTPS,FTP等传输文件的协议以及POP,SMTP等邮件传输的协议,应选用TCP协议。
UDP:
只对数据传输的实时性要求较高,但不对传输质量有要求。比如视频传输、实时通信等,应选用UDP协议。
TCP协议滑动窗口,拥塞控制
-
差错控制:TCP协议通过滑动窗口机制来跟踪和记录字节的状态,实现差错控制功能
-
滑动窗口大小:接收端通知发送端,下次最多可以发送多少字节的报文
-
TCP使用两个窗口和两个缓存来控制字节流的输入
-
发送窗口的值是根据接收窗口的值确定的,发送窗口不能大于接收窗口
-
-
选择重传:有拉回方式和选择重传方式
-
流量控制:是为了控制发送端的发送速率,使之不超过接收端的接收速率,防止接收端还未来得及处理而导致报文丢失
-
拥塞控制:拥塞控制防止过多的报文进入网络,而造成路由器和链路过载
-
拥塞控制是网络报文总量的全局控制
-
拥塞窗口:发送端根据拥塞情况确定的窗口值,是TCP实现拥塞控制的最基本手段,发送端再确认窗口大小后,就可以采用慢开始计算方法和拥塞避免方法
-
什么情况下是拥塞?
-
如果一次往返异常,(没有接受到发送端的确认报文),说明出现拥塞
-
一次往返为:发送端发送报文给接收端,接收端在规定时间内发送确认报文
-
二 网络七层协议
-
物理层
-
物理层确保了原始数据可在各种物理媒体上传播
-
物理层记住两个设备:中继器 和 集线器
-
-
数据链路层
-
帧是数据链路层的传输单位
-
该层的作用:物理寻址,数据成帧,流量控制,数据检错,重发
-
该层的协议:以太网协议
-
两个设备:交互及和网桥
-
ARP协议 地址解析协议
-
根据IP地址获得物理地址的一个TCP/IP协议
-
主机发送信息时,将包含目标ip地址的ARP请求广播到网络上所有的主机,并接收返回的信息,以此确定目标的物理地址
-
收到返回信息后将ip地址和物理地址保存在ARP缓存中,并保留一段时间,下次请求时直接查询ARP缓存以节约资源
-
地址解析协议是建立在网络中各个主机相互信任的基础上,网络上的主机可以自主发送ARP应答消息,其他主机不会检查是否真实,就会将其记入缓存中,但是会造成伪ARP欺骗,攻击者会发伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机。
-
-
RARP 逆地址解析协议
-
将网络中某个主机的物理地址转换为iP地址
-
只知道物理地址,而不知道ip地址,就会通过RARP协议发出征求自身ip地址的广播请求,然后由RARP服务器解答
-
-
-
网络层
-
基本数据单位为IP数据报
-
网络层的目的:实现两个系统间的数据透明传送
-
具体功能包括寻址和路由选择,连接的建立、保持和终止等,他提供的服务使传输层不用了解网络中的数据传输和交换技术。
-
IP协议:
-
提供不可靠,无连接的传送服务
-
无连接数据报传输,数据报路由选择和差错控制
-
-
RIP协议
-
OSPF协议
-
NAT协议
-
是一种将私有地址转换为合法IP地址的转换技术
-
NAT不仅完美的解决了IP地址的不足,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机
-
-
重要设备:路由
-
-
传输层
-
信息传送的协议数据单元成为:报文或段
-
传输层负责将上层数据分段并提供端到端的,可靠地或不可靠的传输以及端到端的差错控制和流量控制问题
-
主要协议:TCP协议 UDP协议
-
TCP协议:面向连接的,可靠地字节流服务
-
UDP协议:面向无连接的通讯协议
-
-
-
会话层
-
会话层管理主机间的会话进程,即负责建立,管理,终止进程之间的会话
-
-
表示层
-
表示层对上层数据或信息进行变换以保证一个主机应用程序可以被另一个主机的应用程序理解
-
-
应用层
-
为操作系统或者网络应用程序提供网络服务的接口
-
TCP协议:
-
FTP协议(文件传送协议) Telnet(远程登录协议) DNS协议(域名解析协议) SMTP(邮件传送协议) HTTP协议 POP3协议
-
-
UDP协议:
-
TFTP(简单文件传输协议) SNMP(简单网络管理协议) DNS(域名解析协议) NFS BOOTP协议
-
-
三:三次握手
-
Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
-
Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
-
Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了
四:四次挥手
-
客户端发送FIN,进入FIN_WAIT1状态
-
服务端收到FIN,发送ACK,进入CLOSE_WAIT状态,客户端收到这个ACK,进入FIN_WAIT2状态
-
服务端发送FIN,进入LAST_ACK状态
-
客户端收到FIN,发送ACK,进入TIME_WAIT状态,服务端收到ACK,进入CLOSE状态
-
TIME_WAIT就是主动断开的一方,发送完最后一次ACK之后进入的状态,并且持续时间较长。客户端的TIME_WAIT持续2倍MSL时长,在linux中大概是60s,转换成CLOSE状态
-
MSL报文最大生存时间,他指的是任何报文在网络上存在的最长时间
-
RTT很小的分组,客户端到服务端往返的时间
-
TTL生存时间,域名解析记录在DNS服务器上缓存时间
-
TIME_WAIT:是主动关闭连接时形成的,等待2MSL时间,约四分钟,主要是防止最后一个ACK丢失,由于TIME_WAIT时间较长,所以server端应该尽量减少主动关闭连接
-
CLOSE_WAIT:是被动关闭连接时形成的,服务端收到客户端的FIN,将发送ACK,因此进入CLOSE_WAIT状态,但是如果服务端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在很多CLOSE_WAIT状态的连接,系统可能处于读写操作,未将已收到FIN的连接进行close,此时,recv/read已收到FIN连接的socket,会返回0
-
为什么需要TIME_WAIT状态?
-
假设最终的ACK丢失,server将重发FIN,client将维护TCP状态信息以便可以重发最终的ACK,否则会发送RST,结果server认为发生错误,TCP实现必须可靠地终止连接的两个方向(全双工关闭),client必须进入 TIME_WAIT 状态,因为client可能面 临重发最终ACK的情形。
-
-
为什么 TIME_WAIT 状态需要保持 2MSL 这么长的时间?
-
如果 TIME_WAIT 状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。第二个拥有相同相关五元组的连接出现,而第一个连接的重复报文到达,干扰了第二个连接。TCP实现必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT状态保持时间足够长(2MSL),连接相应方向上的TCP报文要么完全响应完毕,要么被 丢弃。建立第二个连接的时候,不会混淆。
-
-
一次完整的HTTP请求过程
-
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户
-
-
DNS域名解析流程
-
浏览器会检查缓存中是否有这个域名解析过的IP地址,如果有,这个解析过程就结束
-
如果没有,浏览器会查找操作系统缓存中是否有这个域名解析过的IP地址
-
前两个无法解析时,就要用到本地区 的域名服务器,它们一般都会缓存域名解析结果,所以LDNS主要承担了域名解析的工作
-
如果LDNS没有,则到ROOT Server域名服务器请求解析
-
根域名服务器返回给本地域名服务器一个所查询的主域名服务器地址(gTLD Server)
-
本地域名服务器会向上一步返回的gTLD 服务器发送请求
-
主域名服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是用户注册的域名服务器
-
域名服务器会查询存储的域名和IP的映射关系表,在正常情况下都根据域名得到目标IP地址,连同一个TTL值返回给LDNS Server域名服务器
-
返回该域名对应的IP和TTL值,LDNS会缓存这个域名和IP的对应关系,缓存时间由TTL值控制
-
把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束
-
-
第三次握手失败时发生什么?
-
当失败时,服务器并不会重传ack报文,而是直接发送RST报文段,进入CLOSED状态,这样做的目的是防止SYN洪泛攻击
-
三:HTTP1.0和1.1的区别
-
HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
-
HTTP 1.1则支持持久连接, 并且默认使用长连接,在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头
-
HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。**HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
-
请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
-
在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。
-
HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。
-
HTTP/1.1在1.0的基础上加入了一些cache的新特性
-
HTTP/1.1中引入了Chunked transfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。
四:URI和URL的区别
-
URI:统一资源标识符,用来唯一的标识一个资源,URI由三部分组成:访问资源的命名机制;存放资源的主机名;资源自身的名称,由路径表示,着重强调于资源。
-
URL:统一资源定位符,它是一种具体的URI,用来描述信息资源的字符串
-
由三部分组成:协议
-
存有该资源的ip地址
-
主机资源的具体地址,
-
五:HTTPS和HTTP的区别:
-
https协议需要到CA申请证书,一般免费证书很少,需要交费。
-
http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协 议。
-
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
-
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
六:https是如何保证数据传输的安全
https实际就是在TCP层与http层之间加入了SSL/TLS来为上层的安全保驾护航,主要用到对称加密、非对称加密、证书,等技术进行客户端与服务器的数据加密传输,最终达到保证整个通信的安全性。
SSL/TLS协议作用:
1.认证用户和服务器,确保数据发送到正确的客户机和服务器;
2.加密数据以防止数据中途被窃取
3.维护数据的完整性,确保数据在传输过程中不被改变