网站定制开发加公众号,免费网站主机空间,知道域名怎么进入网站,手机端企业网站设计一、TCP/IP协议
作为一个小萌新#xff0c;当然我无法将tcp/ip协议的大部分江山和盘托出#xff0c;但是其中很多面试可能问到的知识#xff0c;我觉得有必要总结一下#xff01; 首先#xff0c;在学习tcp/ip协议之前#xff0c;我们必须搞明白什么是tcp/ip协议。
1、…一、TCP/IP协议
作为一个小萌新当然我无法将tcp/ip协议的大部分江山和盘托出但是其中很多面试可能问到的知识我觉得有必要总结一下 首先在学习tcp/ip协议之前我们必须搞明白什么是tcp/ip协议。
1、什么是tcp/ip协议
书本上的定义网络协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。 比如中国人之间交流使用汉语要遵循汉语的语法结构和发音那如果我们跟英国人交流的话就要使用英语的语法结构和发音人与人之间交流所用的语言就是一种协议。对于计算机来说两台机器之间的通信就要制定各种各样的协议例如文件传输使用TCP协议域名系统使用DNS协议。数据根据协议规定的内容进行传输这样就实现了两台机器之间的通信。 总的来说网络协议就是人为规定的一套通信规范只要双方都遵循这个规范就能实现交流。 TCP/IP具体含义从字面意义上讲可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。然而多数情况下它只是利用ip进行通信时所必须用到的协议群的统称。具体来说IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议因此有时也称 TCP/IP 为网际协议群。
2、tcp/ip协议的分层
TCP/IP协议族中有一个重要的概念是分层提到协议分层通常会联想到OSI的七层协议经典架构但是TCP/IP协议族的结构则稍有不同但是二者之间有一定联系如图所示
tcp/ip协议分为“应用层、传输层、网络层、数据链路层”。
2.1、应用层
顾名思义应用层就是我们应用和接触最多的层我们最常写的Java程序甚至QQ微信都是应用层的产物。 应用层决定这次通信的应用类型比如说FTP、DNS、SMTP等等同时HTTP协议也属于应用层的范围。通俗来讲应用层决定这一次通信要干嘛。
2.2、传输层
应用层把数据丢给传输层后传输层把数据进行一下包装包装纸上面写着“源端口、目的端口、序号、确认序号、检验和等TCP自身的数据 传输层提供两台计算机之间的数据传输传输层中包含着两个很吊的协议分别是TCP和UDP协议而且没有第三种协议可走。 TCP和UDP协议的区别 1、基于连接TCP与无连接(UDP)。 2、TCP要求系统资源较多UDP较少。 3、UDP程序结构较简单。 4、流模式TCP与数据报模式(UDP)。 5、TCP保证数据正确性UDP可能丢包。 6、TCP保证数据顺序UDP不保证。 7、TCP面向连接如打电话要先拨号建立连接;UDP是无连接的即发送数据之前不需要建立连接。 8、TCP提供可靠的服务。也就是说通过TCP连接传送的数据无差错不丢失不重复且按序到达;UDP尽最大努力交付即不保证可靠交付。 9、TCP面向字节流实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的没有拥塞控制因此网络出现拥塞不会使源主机的发送速率降低对实时应用很有用如IP电话实时视频会议等。 10、每一条TCP连接只能是点到点的;UDP支持一对一一对多多对一和多对多的交互通信。 11、TCP首部开销20字节;UDP的首部开销小只有8个字节。 12、TCP的逻辑通信信道是全双工的可靠信道UDP则是不可靠信道。 此外面试中经常提及的三次握手四次挥手就是TCP协议的部分内容 。
三次握手四次挥手 TCP有6种标志符 1、SYN(synchronous),建立联机2、ACK(acknowledgement),确认3、PSH(push),传输4、FIN(finish),结束5、RST(reset),重置6、URG(urgent),紧急1、三次握手
概念指在发送数据的准备阶段服务器和客户端之间需要三次交互 第一次握手建立连接时客户端向服务器发送一个SYN包并进入SYN_SENT状态等待服务器确认 第二次握手当服务器收到客户端的请求后此时要给客户端给一个确认信息ACK,同时发送SYN包此时服务器进入 SYN_RECV状态 第三次握手客户端收到服务器发的ACKSYN包后向服务器发送ACK,发送完毕之后客户端和服务器进入 ESTABLISHED(TCP连接成功)状态完成三次握手 2、四次挥手概念所谓四次挥手就是说关闭TCP连接的过程当断开一个TCP连接时需要客户端和服务器共发送四个包确认 第一次挥手客户端发送一个FIN,用来关闭客户端到服务器的数据传输客户端进入FIN_WAIT_1状态 第二次挥手服务器收到FIN后发送一个ACK给客户端确认序号为收到序号1与SYN相同一个FIN占用一个序号服务器进入CLOSE_WAIT状态 第三次挥手服务器发送一个FIN,用来关闭服务器到客户端的数据传输服务器进入LAST_ACK状态 第四次挥手客户端收到FIN后客户端进入TIME_WAIT状态接着发送一个AKC给服务器确认序号为收到序号1服务器进入CLOSED状态完成四次挥手 TCP四次挥手过程中通信双方状态解析
FIN_WAIT_1: 其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是
FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时它想主动关闭连接向对方发送了FIN报文此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后则进入到FIN_WAIT_2状态当然在实际的正常情况下无论对方何种情况下都应该马上回应ACK报文所以FIN_WAIT_1状态一般是比较难见到的而FIN_WAIT_2状态还有时常常可以用netstat看到。主动方FIN_WAIT_2实际上FIN_WAIT_2状态下的SOCKET表示半连接也即有一方要求close连接但另外还告诉对方我暂时还有点数据需要传送给你(ACK信息)稍后再关闭连接。主动方
CLOSE_WAIT:表示在等待关闭。当对方close一个SOCKET后发送FIN报文给自己你系统毫无疑问地会回应一个ACK报文给对方此时则进入到CLOSE_WAIT状态。接下来呢实际上你真正需要考虑的事情是察看你是否还有数据发送给对方如果没有的话那么你也就可以 close这个SOCKET发送FIN报文给对方也即关闭连接。所以你在CLOSE_WAIT状态下需要完成的事情是等待你去关闭连接。被动方
LAST_ACK: 被动关闭一方在发送FIN报文后最后等待对方的ACK报文。当收到ACK报文后也即可以进入到CLOSED可用状态了。被动方
TIME_WAIT: 表示收到了对方的FIN报文并发送出了ACK报文就等2MSL后即可回到CLOSED可用状态了。如果FIN WAIT1状态下收到了对方同时带FIN标志和ACK标志的报文时可以直接进入到TIME_WAIT状态而无须经过FIN_WAIT_2状态。主动方
CLOSED: 表示连接中断。
为什么要有TIME_WAIT这个状态
假设最终的ACK丢失主机2将重发FIN主机1必须维护TCP状态信息以便可以重发最终的ACK否则会发送RST结果主机2认为发生错误。TCP实现必须可靠地终止连接的两个方向(全双工关闭)主机1必须进入 TIME_WAIT 状态因为主机1可能面 临重发最终ACK的情形。
出现太多TIME_WAIT可能导致的后果
在高并发短连接的TCP服务器上当服务器处理完请求后立刻按照主动正常关闭连接。这个场景下会出现大量socket处于TIMEWAIT状态。如果客户端的并发量持续很高此时部分客户端就会显示连接不上。 我来解释下这个场景。主动正常关闭TCP连接都会出现TIMEWAIT。为什么我们要关注这个高并发短连接呢有两个方面需要注意
① 高并发可以让服务器在短时间范围内同时占用大量端口而端口有个0~65535的范围并不是很多刨除系统和其他服务要用的剩下的就更少了。
②在这个场景中短连接表示“业务处理传输数据的时间 远远小于 TIMEWAIT超时的时间”的连接。这里有个相对长短的概念比如取一个web页面1秒钟的http短连接处理完业务在关闭连接之后这个业务用过的端口会停留在TIMEWAIT状态几分钟而这几分钟其他HTTP请求来临的时候是无法占用此端口的。单用这个业务计算服务器的利用率会发现服务器干正经事的时间和端口资源被挂着无法被使用的时间的比例是 1几百服务器资源严重浪费。 说个题外话从这个意义出发来考虑服务器性能调优的话长连接业务的服务就不需要考虑TIMEWAIT状态。同时假如你对服务器业务场景非常熟悉你会发现在实际业务场景中一般长连接对应的业务的并发量并不会很高 综合这两个方面持续的到达一定量的高并发短连接会使服务器因端口资源不足而拒绝为一部分客户服务。
time_wait状态如何避免
首先服务器可以设置SO_REUSEADDR套接字选项来通知内核如果端口忙但TCP连接位于TIME_WAIT状态时可以重用端口。在一个非常有用的场景就是如果你的服务器程序停止后想立即重启而新的套接字依旧希望使用同一端口此时SO_REUSEADDR选项就可以避免TIME_WAIT状态。
2.3、网络层
应用层将数据丢给传输层进行包装网络层则是用来处理这些流动的数据包也就是如果把相应的数据包路由到指定的地点为通信时的网络传输选择传输路线。 就像送快递一样需要选择正确路线才能送到你家。
2.4、数据链路层
数据链路层包含了软件与硬件的接口部分以及各种网络设备的硬件也就是整个网络通信过程中最底层的基础设施。
一个HTTP请求的响应过程
简单了解了每一层的作用之后我们试着串起来摸索一下一次整体的http请求到响应的过程。 拿访问google做个例子 0.访问google.com按下回车。 1.应用层准备好请求报文通过DNS服务进行域名解析得到google的ip地址并将报文发到传输层。 2.传输层收到报文后会将请求的数据包进行拆分打包并对每个包裹打上tag。在请求报文的基础上加上一层TCP的首部信息然后发往网络层。 3.到了网络层以后IP协议就发挥了巨大的作用IP协议中需要两个比较重要的信息那就是ip地址和mac地址。ip已经在应用层通过dns解析出来了那mac怎么办。。。真尴尬然而这时ARP协议又冒了出来它可以根据ip地址反向查询到目标主机的mac地址。好了现在啥都有了打包带走把数据发到数据链路层。 4.终于走到基础设施这里了此时数据包就在一根根光纤中旋转跳跃的奔向目的地当然整个过程不一定是直达的可能需要经过各种中转站就跟坐火车转车一样的。 5.请求到达服务器后先从数据链路层往上走并验证消去以太网首部信息在网络层消去IP首部在传输层消去TCP首部就像剥洋葱一样一层一层去皮最后剩下的就请求报文。在应用层对请求做出处理之后需要对请求返回一个响应。而整个响应的传输过程就和请求一样一层一层的封装响应到达客户端时再一层一层的消去首部最后呈现响应的结果。 简而言之他们可以概括为一张这样的图
二、HTTP/HTTPS协议 在了解这两个之前我们先来看两张图 从这两张图片来看http协议和https协议有一个最显而易见的区别https比http要安全。
1、基本概念
1.1、http
HTTP是互联网上应用最为广泛的一种网络协议是一个客户端和服务器端请求和应答的标准基于TCP/IP协议用于从WWW服务器传输超文本到本地浏览器的传输协议它可以使浏览器更加高效使网络传输减少。
HTTP 是一个属于应用层的面向对象的协议HTTP 协议一共有五大特点 1、支持客户/服务器模式 2、简单快速 3、灵活 4、无连接 5、无状态。
其中我们主要了解一下无连接和无状态这两个特点
1、无连接 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后即断开连接。采用这种方式可以节省传输时间。
早期这么做的原因是 HTTP 协议产生于互联网因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问但每个客户端即浏览器与服务器之间交换数据的间歇性较大即传输具有突发性、瞬时性并且网页浏览的联想性、发散性导致两次传送的数据关联性很低大部分通道实际上会很空闲、无端占用资源。
因此 HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接以尽快将资源释放出来服务其他客户端。
但是随着时间的推移网页变得越来越复杂里面可能嵌入了很多图片这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来Keep-Alive 被提出用来解决这效率低的问题。 Keep-Alive 功能使客户端到服务器端的连接持续有效当出现对服务器的后继请求时Keep-Alive 功能避免了建立或者重新建立连接。市场上的大部分 Web 服务器包括 iPlanet、IIS 和 Apache都支持 HTTP Keep-Alive。对于提供静态内容的网站来说这个功能通常很有用。但是对于负担较重的网站来说这里存在另外一个问题虽然为客户保留打开的连接有一定的好处但它同样影响了性能因为在处理暂停期间本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时Keep-Alive 功能对资源利用的影响尤其突出。 这样一来客户端和服务器之间的 HTTP 连接就会被保持不会断开超过 Keep-Alive 规定的时间意外断电等情况除外当客户端发送另外一个请求时就使用这条已经建立的连接。 2、无状态 无状态是指协议对于事务处理没有记忆能力服务器不知道客户端是什么状态。
即我们给服务器发送 HTTP 请求之后服务器根据请求会给我们发送数据过来但是发送完不会记录任何信息。
HTTP 是一个无状态协议这意味着每个请求都是独立的Keep-Alive 没能改变这个结果。
缺少状态意味着如果后续处理需要前面的信息则它必须重传这样可能导致每次连接传送的数据量增大。另一方面在服务器不需要先前信息时它的应答就较快。
HTTP 协议这种特性有优点也有缺点
1、优点在于解放了服务器每一次请求“点到为止”不会造成不必要连接占用 2、缺点在于每次请求会传输大量重复的内容信息。
客户端与服务器进行动态交互的 Web 应用程序出现之后HTTP 无状态的特性严重阻碍了这些应用程序的实现毕竟交互是需要承前启后的简单的购物车程序也要知道用户到底在之前选择了什么商品。
于是两种用于保持 HTTP 连接状态的技术就应运而生了一个是 Cookie而另一个则是 Session。
3、Cookie和 Session
1、Cookie Cookie可以保持登录信息到用户下次与服务器的会话换句话说下次访问同一网站时用户会发现不必输入用户名和密码就已经登录了当然不排除用户手工删除Cookie。而还有一些Cookie在用户退出会话的时候就被删除了这样可以有效保护个人隐私。
Cookies 最典型的应用是判定注册用户是否已经登录网站用户可能会得到提示是否在下一次进入此网站时保留用户信息以便简化登录手续这些都是 Cookies 的功用。 另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品这些信息都会写入 Cookies以便在最后付款时提取信息。
2、 Session
它是通过服务器来保持状态的。
当客户端访问服务器时服务器根据需求设置 Session将会话信息保存在服务器上同时将标示 Session 的 SessionId 传递给客户端浏览器浏览器将这个 SessionId 保存在内存中我们称之为无过期时间的 Cookie。浏览器关闭后这个 Cookie 就会被清掉它不会存在于用户的 Cookie 临时文件。
以后浏览器每次请求都会额外加上这个参数值服务器会根据这个 SessionId就能取得客户端的数据信息。
如果客户端浏览器意外关闭服务器保存的 Session 数据不是立即释放此时数据还会存在只要我们知道那个 SessionId就可以继续通过请求获得此 Session 的信息因为此时后台的 Session 还存在当然我们可以设置一个 Session 超时时间一旦超过规定时间没有客户端请求时服务器就会清除对应 SessionId 的 Session 信息。
1.2、https
HTTPS是以安全为目标的HTTP通道简单讲是HTTP的安全版即HTTP下加入SSL层HTTPS的安全基础是SSL因此加密的详细内容就需要SSL。
那么https协议是怎么用SSL加密的呢 其实SSL也是一种协议SSL/TLS 在 TCP 之上加了一层加密等处理不影响原有的 TCP 和 HTTP上下都是透明的用来实现安全传输。 其过程如图所示
SSL/TLS 概述
1、主要功能
防冒充(pretending): 验证交互双方通常只是对服务端身份的真实性 防窃听(eavesdropping):对传输的数据进行加密即使被截获也无法被识别 防篡改(tampering):确保接收方收到的数据是原始未篡改过的若被篡改能识别出来并丢弃
2、SSL/TLS 交互过程加密过程 这里有个重要依据是RSA公钥加密算法
对于数据交换双方都拥有自身的公钥和私钥私钥都为自己私藏公钥都向对方公开同样一个数据发送方使用自身的私钥加密接收方收到后可以用发送方的公钥解密。
在连接的时候会有以下操作
服务端向客户端发送服务端证书(证书中包含服务端公钥)并向客户端索要客户端证书客户端收到服务端证书后验证其身份有效性(可信机构颁发、域名一致、未过期等)如验证失败则握手失败如成功则从中取出服务端公钥客户端向服务端发送客户端证书(证书中包含客户端公钥)服务端收到客户端证书后验证其身份真实性如验证失败则握手失败。
2、http和https的区别
由上图我们可以知道http和https最显而易见的区别就是一个安全一个不安全。
那么为什么他们会有这样的区别呢
答HTTP协议传输的数据都是未加密的也就是明文的因此使用HTTP协议传输隐私
信息非常不安全为了保证这些隐私数据能加密传输于是网景公司设计SSLSecure
Sockets Layer协议用于对HTTP协议传输的数据进行加密从而就诞生了HTTPS。简
单来说HTTPS协议是由SSLHTTP协议构建的可进行加密传输、身份认证的网络协
议要比http协议安全。HTTPS和HTTP的区别主要如下
1、https协议需要到ca申请证书一般免费证书较少因而需要一定费用。
2、http是超文本传输协议信息是明文传输https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式用的端口也不一样前者是80后者是443。
4、http的连接很简单是无状态的HTTPS协议是由SSLHTTP协议构建的可进行加密传输、身份认证的网络协议比http协议安全。
3、https的优缺点
3.1、https协议的优点
其实HTTPS也并非绝对安全。掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击但HTTPS仍是现行架构下最安全的解决方案主要有以下几个好处 1使用HTTPS协议可认证用户和服务器确保数据发送到正确的客户机和服务器 2HTTPS协议是由SSLHTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全可防止数据在传输过程中不被窃取、改变确保数据的完整性。 3HTTPS是现行架构下最安全的解决方案虽然不是绝对安全但它大幅增加了中间人攻击的成本。 4谷歌曾在2014年8月份调整搜索引擎算法并称“比起同等HTTP网站采用HTTPS加密的网站在搜索结果中的排名将会更高”。 3.2、https的缺点
虽然说HTTPS有很大的优势但其相对来说还是存在不足之处的 1HTTPS协议握手阶段比较费时会使页面的加载时间延长近50%增加10%到20%的耗电 2HTTPS连接缓存不如HTTP高效会增加数据开销和功耗甚至已有的安全措施也会因此而受到影响 3SSL证书需要钱功能越强大的证书费用越高个人网站、小网站没有必要一般不会用。 4SSL证书通常需要绑定IP不能在同一IP上绑定多个域名IPv4资源不可能支撑这个消耗。 5HTTPS协议的加密范围也比较有限在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的SSL证书的信用链体系并不安全特别是在某些国家可以控制CA根证书的情况下中间人攻击一样可行。