计算机网络七层模型
应用层
这一层是最靠近用户的,主要负责给用户提供网络服务
表示层
这一层主要负责数据的安全、压缩等,可以把数据加密或者解密,主要确保数据传输过后可以被目标主机读取。类似翻译官。
会话层
负责在两个主机之间建立、维持、断开通信。主要工作是发起会话请求,与目标主机建立通信。
传输层
专门负责数据传输的层,数据一旦离开网卡便进入了传输层。这一层主要有TCP、UDP等传输协议,定义了传输数据的协议端口号,并进行流量控制以及差错校验,是极其重要的一层。通常的工作是把数据进行分段传输,到达目的地之后再以正确的方式重组。
网络层
进行逻辑选址,选择最合适的路径进行传输。不同地理位置的两台主机之间,会存在不同的路径,就好像条条大路通罗马一样,所以就需要网络层进行逻辑选址,选择一条优先级最高的、质量最好的路径进行传输。
数据链路层
通常物理介质都是不可靠的,因为在传输的途径中难免会有损失,特别是长途传输。所以就需要数据链路层,这一层就是负责在不可靠的介质上进行可靠的数据传输。 它会把接收到的数据分割成帧,然后根据帧中包含的发送者与接收者的信息进行硬件寻址,并且可以检测发送的过程中是否有差错,如果有差错就通知发送方重传。
物理层
负责建立、维护、断开物理连接,代表着一系列物理设备比如:网卡、网线等,其作用就是为数据传输提供物理介质,在这一层主要传输的是比特流。
总结
当在广州的主机A想要给在深圳的主机B传输数据时,首先他们之间必须要有物理媒介,也就是网线网卡等物理层。然后再通过应用层发起网络服务,期间会话层会开启的通信窗口,之后数据通过表示层转换好,之后通过网络层选择合适的路径,并把数据传到数据链路层,确定发送方与接收方之后,通过传输层传输过去。
TCP三次握手、四次挥手
TCP协议是传输层的协议,是一个可靠的传输协议,在客户端与服务端建立连接的时候,就需要进行三次握手,才可以建立连接。而断开连接的时候,则需要四次挥手。
序列号seq
TCP协议会把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生。在给字节编上序号后,就给每一个报文段指派一个序号。而序列号指的就是报文段的第一个字节的数据编号。
确认号ack
表示期待收到对方下一个报文段的第一个数据字节的序号,一般来说就是序列号+1.
标志位
标志位的值要么是1,要么是0。 SYN:连接建立时用于同步序号。SYN=1表示这是一个连接请求,握手完成后SYN标志位被置0。 ACK:作为判定确认号是否有效的标志。为1则有效 FIN:用来释放一个连接。FIN=1表示此报文段的发送方的数据已经发送完毕,并要求释放连接。
三次握手
第一次握手
客户端发送请求,标志位SYN=1,seq=x,表示请求与服务端连接,进入SYN_SENT状态。
第二次握手
服务端确认接收到客户端的SYN请求,因此先发送ACK=1,ack=x+1,同时服务端向客户端发送SYN请求,seq=y。
第三次握手
客户端确认接收到服务端的SYN请求,发送ACK=1,ack=y+1,seq=x+1。自此握手结束,连接建立完成,客户端和服务端之间可以进行数据传输。
为什么需要第三次握手
如果没有第三次握手,在二次握手之后就建立了链接,那么假如发生网络延时,导致对于服务端来说,虽然服务端成功进行了第二次握手,并且开辟了端口,但是客户端却没有接收到确认请求,那么客户端便不会传输数据,而服务端就会一直处于等待传输数据的状态,浪费资源。且客户端之后会进行超时重连,此时服务端就相当于开辟了两个端口却只使用了一个。
四次挥手
第一次挥手
客户端发送FIN=1,seq=u的请求,表示想要断开连接
第二次挥手
服务端接收到客户端发送的断开连接的请求,但是因为此时可能还有数据正在传输,所以服务端会先发送ACK=1,seq=v,ack=u+1的确认请求,表示我接受到了客户端的断开连接的请求
第三次挥手
此时服务端已经完成了数据传输,就发送FIN=1,ACK=1,seq=w,ack=u+1的请求,表示已经发送完了数据,想要断开连接
第四次挥手
客户端发送ACK=1,ack=w+1,seq=u+1的报文,表示确认关闭连接。至此连接关闭。
为什么需要四次挥手
因为TCP是一个可靠传输协议,在断开连接之前必须确保数据全部传输完毕,所以就需要先确认接受请求,等到传输完毕之后在发送断开连接的氢气。
为什么TCP是可靠协议
连接和断开
需要三次握手以及四次挥手才能够连接或者断开
确认重传
发送数据的过程中,发送方发送的每一个数据,都需要收到接收方的确认,否则就会重新发送
流量控制
有时,发送方发送速率过快,而接收方无法准时接受导致数据丢失,从而经常引起重传机制,导致资源浪费。因此就需要使用流量控制,让发送方根据接收方的实际接受效率来发送数据。TCP使用滑动窗户机制,会把部分数据包分成一个窗口,这个窗口的大小由接收方决定,然后在这个窗口内的数据包可以连续发送,不用等待确认请求再发送,如果发生了超时会依然重传数据。然后知道窗口的数据都发送完,就组成下一个窗口
拥塞避免
拥塞避免主要是针对网络的问题。
慢开始
慢开始阶段指的是在刚开始传输数据的时候,先传输少数数据,随后慢慢增大数据传输量的阶段,从1、2、4开始呈指数增长,直到达到慢开始门限,就会进入拥塞避免
拥塞避免
通过慢开始之后,此时一次传输的数据量已经很接近当前网络的负荷量了,如果继续指数增大,很可能会导致网络崩溃。所以就实行加法增大,直到检测到拥塞。
拥塞检测
如果一次性接收到啊是那个确认重传请求,表示此时网络已经拥塞,那么就会把当前传输的数据量重置为1,把慢开始门限重置为当前拥塞的一半。随后执行慢启动算法,直到慢开始门限又继续拥塞避免。 eg: 慢开始门限为16 传输数据量从1—>2—>4—>8—>16,此时达到慢开始门限,进入拥塞避免阶段,16—>17—>18—>19—20,加入此时检测到拥塞,便会把慢开始门限设置为10,也就是出现拥塞时的一半,把数据传输量重置为0,然后重复
快速重传
意思就是发送方会持续发送数据,并不需要等待接收方的每一个确认,而但是如果收到了三个重传请求,就会重新传输数据。
快速恢复
有时候在发生了拥塞之后,并不会直接执行慢启动算法,而是直接执行拥塞避免算法,因为此时可能我们不希望数据流突然减少,并且仍然有数据流动。
TCP和UDP的区别
1、TCP是可靠传输协议,有三次握手和四次挥手确保连接与断开,而UDP没有,想连就连,想寄就寄。 2、TCP有确认重传,UDP没有,所以UDP容易掉包 3、TCP是一对一的,UDP可以多对一 4、TCP传输慢,但稳定,适合传输大量数据;UDP传输快,不稳定,适合传输少量数据。 5、TCP容易被攻击,UDP漏洞少,比较安全。
HTTP请求格式
1、请求行。 由方法+URL+HTTP协议版本组成 2、请求头 请求类型,一般是POST或者GET 3、空行 一个空格行示请求头到此为止 4、请求数据 如果是GET则为空,如果是POST则会放置提交的数据
HTTP相应格式
1、状态行 由HPPT版本+状态码+文本描述组成 2、响应头 为响应报文添加了附加信息 3、响应文 就是一些相应参数。
HTTP与HTTPS的区别
1、HTTPS实际上就是HTTP+SSL协议,更加耗费资源 2、HTTP的数据明文传输,安全性较差。HTTPS加密传输,比较安全。 3、申请HTTPS需要申请证书。 4、HTTP的响应速度比HTTPS快,因为HTTPS不仅要TCP三次握手,SSL协议也需要。 5、两者使用的连接方式不同,端口也不一样
HTTP状态码
100-199,信息响应,表示接收到了请求,需要继续响应。 200-299,成功响应,操作成功且被处理 300-399,重定向,网页可能被转移,需要进一步操作 400-499,客户端错误,请求的语法错误或者无法完成请求 500-599,服务端错误,服务端处理请求过程中发生错误。
GET和POST的区别
1、GET请求的数据会暴露出来,但是POST不会,所以POST比较安全 2、GET可以缓存,POST不可 3、GET传输的数据较少,POST传输的数据比较多
|