自下而上对各层的作用进行简单介绍:
(1) 建立TCP连接的目的:
为了准确无误的把数据送达目标处,TCP采用三次握手策略建立连接。
(2)具体过程:
?次握?: 客户端–> 发送带有 SYN 标志的数据包 –> 服务端
?次握?: 服务端–> 发送带有 SYN/ACK 标志的数据包 –> 客户端
三次握?: 客户端–> 发送带有带有 ACK 标志的数据包 –> 服务端
?
半连接队列:TCP握手中,当服务器处于SYN_RCVD
状态,服务器会把此种状态下请求连接放在一个队列里,该队列称为半连接队列。
?
SYN攻击:SYN攻击即是利用TCP协议的缺陷,通过发送大量的半连接请求,占用半连接队列,耗费CPU和内存资源。优化方式:(1)缩短SYN Timeout时间; (2)记录IP,若连续受到某个IP的重复SYN报文,从这个IP地址来的包会被一概丢弃。
?
(3)为什么要三次握手,而不是两次或者四次?
答:TCP采用的是全双工的通信方式,三次握手最主要的目的就是通信双方确保自己与对方发送与接收数据的过程是正常的,只有两次的话,客户端这边没有问题,但是服务器端只知道对方发送正常,自己接收正常,不知道客户端接收正常不正常。三次能到达互相确认的目的,因此不需要第四次握手。每一次握手能够到达的效果是:
** 第?次握?:Client什么都不能确认;Server确认了对?发送正常,??接收正常。
第?次握?:Client 确认了:??发送、接收正常,对?发送、接收正常;Server 确认了:对?发送正常,??接收正常。
第三次握?:Client 确认了:??发送、接收正常,对?发送、接收正常;Server 确认了:??发送、接收正常,对?发送、接收正常。
所以三次握?就能确认双发收发功能都正常,缺?不可。
(4)为什么要传回SYN?
答: 接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号。
(5)传了SYN,为啥还要传ACK? (这个回答就和为什么不是两次握手差不多)
答: 双?通信?误必须是两者互相发送信息都?误。传了 SYN,证明发送?到接收?的通道没有问题,但是接收?到发送?的通道还需要 ACK 信号来进?验证。**
(1) 具体过程
(2)为什么要四次挥手?
答:任何??都可以在数据传送结束后发出连接释放的通知,待对?确认后进?半关闭状态。当另??也没有数据再发送的时候,则发出连接释放通知,对?确认后就完全关闭了TCP连接,因此四次挥手是为了确保通信双方都释放连接。
举个例?:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B可能还会有要说的话,A 不能要求 B 跟着??的节奏结束通话,于是 B 可能?巴拉巴拉说了?通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
(3)为什么还要等待2MSL(最长报文段寿命)?
答:MSL表示报文最大生存时间,等待2MSL主要是:(1)为了确保客户端A发给服务器B的最后一个ACK报文能够到达服务器B,客服端发送给服务端的ACK可能会丢失,服务器收不到ACK会在发送一个FIN给客户端,如果客户端关闭了,服务端永远收不到ACK,就不能正常关闭。(2) 可以保证上一次连接的报文已经在网络中消失,不会出现与新TCP连接报文冲突的情况。
(1)TCP是面向连接的可靠传输,保证数据的正确性和顺序性,传输效率慢,以字节流的形式传输,TCP通过三次握手和四次挥手建立和释放连接,TCP通过校验和、流量控制和拥塞控制实现可靠传输,主要用于文件和邮件传输,在传输层采用TCP的应用层协议主要有FTP、SMTP、HTTP,另外TCP报文的首部的固定部分为20个字节。
(2)UDP 在传送数据之前不需要先建立连接,不提供可靠交付,传输效率快,以报文形式传输,虽然 UDP 不提供可靠交付,但在QQ 语?、 QQ 视频 、直播等即时通信场景中 UDP 却是?种最有效的?作?式。在传输层采用UDP的应用层协议主要有DNS、TFTP、DHCP和SNMP,另外UDP的首部只有8个字节,分别是源端口、目的端口、长度、校验和
。
(1)检验和:通过检查校验和,确认在传输过程中没有发生差错。
(2)流量控制:发送方的发送速度太快了,接收方来不及接受,利用滑动窗口来实现流量控制,控制数据发送速度,防止分组丢失。
(3)拥塞控制:根据网络的拥塞程度来调整拥塞窗口的大小,当网络发生拥塞时,减小拥塞窗口的大小,减少数据发送,避免网络负载过大。TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。 慢开始:发送方刚开始不知道网络的拥塞情况,先试探一下,由小到大的增加拥塞窗口。拥塞避免:缓慢增加拥塞口,每经过一个往返就加一。快重传和快恢复:快速恢复丢失的数据包。避免要求重传时的暂停。
(4)ARQ协议 :停止等待ARQ:发送端在发送一个分组之后就停止,等待返回来的确认,如果等待一段时间没有收到就重发。连续ARQ:发送方维护一个发送窗口,连续发送窗口的分组,接收方等待最后一个分组发送过来,再发送确认。
(5)超时重传:当 TCP 发出?个段后,它启动?个定时器,等待?的端确认收到这个报?段。如果不能及时收到?个确认,将重发这个报?段。
TCP是面向流的协议,发送的单位是字节流,因此会将多个小尺寸数据被封装在一个tcp报文中发出去的可能性。 可以简单的理解成客户端调用了两次send,服务器端一个recv就把信息都读出来了。
?TCP利?滑动窗?实现流量控制。流量控制是为了控制发送?发送速率,保证接收?来得及接收。 接收?发送的确认报?中的窗?字段可以?来控制发送?窗???,从?影响发送?的发送速率。将窗?字段设置为 0,则发送?不能发送数据。发送窗口的大小由拥塞窗口和接收窗口的较小值决定。
所谓“拥塞”指的是,在某段时间,网络中某一资源的需求超过了该资源能提供的可用部分,使得网络性能发生变化的情况。拥塞控制有四种方法:慢开始、拥塞避免、快重传、快恢复。
为了进行拥塞控制,TCP发送方会维持一个叫拥塞窗口(cwnd)的状态变量。为避免一开始就将大量数据注入网络引起网络拥塞,因此在开始传数据时,使用慢开始算法,它会从小到大的逐渐增大拥塞窗口的数值,cwnd初始值为1,每经过一个轮次,cwnd就加倍;直到cwnd >= sssthresh(设定的窗口阈值),就转而执行拥塞避免算法,每经过一个轮次,cwnd加1;在传输过程中,如果遇到了超时重传,判断网络出现了拥塞,则将ssthresh阈值设定为原来的一半,将拥塞窗口cwnd设置为1,重新开始使用慢开始算法。如果遇到了3-ACK(收到3个重复确认)的情况,则判定分组丢失,使用快重传算法,重传丢失报文,并转而执行快恢复算法, 将ssthresh阈值设定为原来的一半,将拥塞窗口cwnd的值设置为ssthresh阈值,继续执行拥塞避免算法。快重传算法:如果在超时重传定时器溢出之前,接收到连续的三个重复冗余ACK,发送端便知晓哪个报文段在传输过程中丢失了,于是重发该报文段,不需要等待超时重传定时器溢出再发送该报文。
7.1. TCP短连接
模拟一下TCP短连接的情况:client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次请求就完成了。这时候双方任意都可以发起close操作,不过一般都是client先发起close操作。上述可知,短连接一般只会在 client/server间传递一次请求操作。
短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。
7.2. TCP长连接
我们再模拟一下长连接的情况:client向server发起连接,server接受client连接,双方建立连接,client与server完成一次请求后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
7.3. 长连接和短连接的优点和缺点
由上可以看出,长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可 以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。
长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择。
7.4. 长连接短连接操作过程
短连接的操作步骤是:
建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接
?
长连接的操作步骤是:
建立连接——数据传输...(保持连接)...数据传输——关闭连接
7.5. 什么时候用长连接,短连接?
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。
总体来说分为以下几个过程:
HTTP协议是超文本传输协议。它是基于TCP协议的应用层协议,即客服端和服务器段进行数据传输的一种规则。HTTP协议本身是一种无状态的协议。
HTTP协议本身是无状态的,为了使其处理更加复杂的逻辑,在HTTP1.1中引入了Cookie来保存状态信息。Cookie是由服务器端产生的,再发送给客户端保存,当客服端再次访问的时候,服务器根据cookie辨识客户端是那个,以此可以做个性化推送,免账号密码登录等。
Session用于标记特定客户端信息,存在服务器的一个文件里。一般客户端带Cookie对服务器进行访问,可以通过cookie中的session id 从整个session中查询服务器记录的关于客户端的信息。
Cookie 数据保存在客户端(浏览器端),一般用来保存用户信息,Session 数据保存在服务器端,主要通过服务器端记录用户的状态。
相对来说** Session 安全性更?**。如果要在Cookie 中存储?些敏感信息,不要直接写? Cookie 中,最好能将 Cookie 信息加密然后使?到的时候再去服务器端解密。
**提出多路复用**。多路复用前,文件时串行传输的,请求a文件,b文件只能等待,并且连接数过多。引入多路复用,a文件b文件可以**同时传输。 **<br />**引入了二进制数据帧**。其中帧对数据进行顺序标识,有了序列id,服务器就可以进行并行传输数据。
21: ftp–文件传输协议(FTP)
25: smtp–简单邮件传输协议(SMTP)
53: dns–域名服务
80: http–超文本传输协议
443: https
8080:tomcat
110: pop3–邮局协议版本3
GET和POST本质上就是TCP连接。一般在使用的时候,get方法将参数放在url中,post将参数放在request body当中。但是他们本质的区别(?并不是这样):GET产生一个TCP数据包;POST产生两个TCP数据包。
Get方法:把http header和data放在一起发送,服务器返回200.
Post方法:浏览器先发http header,服务器返回100 continue,浏览器再发送data,服务器返回200
分两步:
DNS协议是基于UDP的应用层协议,它的功能是根据用户输入的域名,解析出该域名对应的IP地址,从而给客户端进行访问。
迭代查询:
① 请求发起后,游览器首先会解析这个域名,首先它会查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。
② 如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS(域名分布系统)服务器 。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
③ 查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询
④ 根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到那个顶级域服务器上去继续查询,并给出顶级域服务器的地址。这种过程是迭代的过程
⑤ 本地DNS服务器继续向顶级域服务器发出请求,顶级域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你应该去找那个权限域名服务器?
⑥ 最后,本地DNS服务器向权限域名服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
原文:https://www.cnblogs.com/sinlearn/p/15100446.html