计算机网络重要知识

目录

一、三次握手的过程

二、四次挥手的过程

 三、常见的问题

1、为什么不能用两次握手进行连接

2、为什么连接的时候是三次握手,关闭的时候却是四次握手

3、如果已经建立了连接,但是客户端突然出现故障了怎么办?

4、为什么不是四次握手?

5、四次挥手的最后,为什么发送端要等待2MSL时间才关闭?

6、TCP如何保证可靠性

四、Http和Https的区别

五、TCP和UDP区别


TCP是啥?

TCP是面向连接的,可靠的传输层通信信息。客户端和服务器端的通信。

一、三次握手的过程

  • 第一次握手:起初两端都处于CLOSED关闭状态,Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN-SENT状态,等待Server确认;
  • 第二次握手:Server收到数据包后由标志位SYN=1得知Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN-RCVD状态,此时操作系统为该TCP连接分配TCP缓存和变量;
  • 第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server就可以开始传输数据。

重要标志位的含义:

SYN(synchronous): 发送/同步标志,用来建立连接,和下面的第二个标志位ACK搭配使用。连接开始时,SYN=1,ACK=0,代表连接开始但是未获得响应。当连接被响应的时候,标志位会发生变化,其中ACK会置为1,代表确认收到连接请求,此时的标志位变成了 SYN=1,ACK=1。

ACK(acknowledgement):确认标志,表示确认收到请求。

FIN(finish):结束标志,用于结束一个TCP会话;

两个序号:

Sequence number :顺序号(seq),发送数据包中的第一个字节的序列号,一般为小写的seq。

Acknowledge number:确认号(ack),响应前面的seq,值为seq+1,可以理解为期望下次发出的序列号为seq+1;

二、四次挥手的过程

  • 1)A的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
  • 2)B收到连接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。
  • 3)A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
  • 4)B没有要向A发出的数据,B发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。
  • 5)A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。

 三、常见的问题

1、为什么不能用两次握手进行连接

答:如果是两次,你现在发了 SYN 报文想握手,但是这个包滞留在了当前的网络中迟迟没有到达,TCP 以为这是丢了包,于是重传,两次握手建立好了连接。

看似没有问题,但是连接关闭后,如果这个滞留在网路中的包到达了服务端呢?(已失效的连接请求报文段又到达了服务器端)这时候由于是两次握手,服务端只要接收到然后发送相应的数据包,就默认建立连接,发送确认报文段,但发送端没有连接请求,就忽略,导致服务器端一直等待发送端发送数据,白白浪费资源。如果是三次,上面的第二种情况,发送端忽略不会发送确认报文段,服务器收不到此确认,就知道了发送端没有连接请求。

2、为什么连接的时候是三次握手,关闭的时候却是四次握手

答:因为当客户端发起关闭连接的请求时,发出的FIN,仅代表客户端没有需要发送给服务器端的数据了。而如果服务器端如果仍有数据需要发送给客户端的话,响应报文ACK和结束报文FIN则就不能同时发送给客户端了。此时,服务器端会先返回一个响应报文,代表接收到了客户端发出的FIN请求,而后在数据传输完了之后,再发出FIN请求,表示服务器端已经准备好断开连接了。所以关闭连接的时候是四次握手。

3、如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接

注:三次握手和四次挥手以及TCP标志位的详细介绍 - JHCan333 - 博客园一、TCP标志位 在讲TCP三次握手和四次挥手之前,先说一下TCP标志位,方便后续的理解。 简单来说,TCP标志位的值代表了当前请求的目的。 标志位一共有6种,分别是: SYN(synchronoushttps://www.cnblogs.com/JHCan333/p/11808674.html

4、为什么不是四次握手?

因为传输既要保证可靠性,又要保证传输效率;四次当然可以,100次也可以,但是传输效率就低了。

5、四次挥手的最后,为什么发送端要等待2MSL时间才关闭?

2MSL,其中,MSL:报文的最长生存时间(2分钟,1分钟都有)

原因:防止第四次挥手失败,即:如果第四次失败了,服务器端不知道是否自己第三次发送的连词断开请求发送端是否收到,不可靠。此时,发送端在2MSL,就会再次收到服务器端就会超时重传自己的连接释放报文段,发送端再次发送确认,保证了服务端确实能关闭。

6、TCP如何保证可靠性

(1)序列号+确认号

seq+ack;ack = seq+1;序列号seq的作用:保证数据的顺序。图中的32+32位。

(2)流量控制

接收方每次返回给发送端自己可以缓冲区可以接受的数据量的大小,从而控制发送端发送数据的大小。图中的窗口大小16位

(3)校验和

主要目的:防止在传输过程中数据是否发生变化。如果校验和检验异常,TCP 将丢弃这个数据段并不返回 ACK。图中的校验和16位。

做法:发送方在发送数据前将整个数据段分为多个 16 位的段,对每个段进行反码相加运算,将计算结果保存在校验和字段中。接收方收到数据后用同样的方法进行计算,最终校验字段全为 1 说明数据正确、否则数据异常。

(4)拥塞控制

然而如果网络环境非常拥堵,再发送数据只会加剧网络负担,此时发送的报文很有可能丢失。

如何判断拥塞?出现了超时重传,即发送端没有收到应该收到的确认报文段。如,m1 m2 m3 m4,接收端收到的是m1 m3 m4,收到失序的报文段,一种方法是快重传,即:接受方接着发送三个m1的确认报文段,发送端就知道了,会再发没有确认的m2 m3 m4 信息。

四、Http和Https的区别

共同点:他们是应用层的协议,用于在 Web 浏览器和网站服务器之间传递信息

(1)HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。

(2)使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。

(3)HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。

(4)http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。

(5)HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

五、TCP和UDP区别


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部