TCP三次握手四次挥手,https,websoket相关理解

这周又看了一下TCP/IP协议相关的东西,杂七杂八的也算是明白了一些

下面写出我个人对TCP三次握手相关的理解

首先先从头来,我们打开一个网页,DNS先解析成IP地址,然后nginx进行负载均衡分配到真正的服务器上,

再然后我们进行TCP链接开始三次握手

这个行为是我们(客户端)发起到服务器的,

第一次握手我们开始组建数据包并带上了一个SYN(同步序列号)码,SYN可以等于1可以等于2等等,和一个SEQ(顺序码),SEQ和SYN其实意思差不多,但是SEQ代表的是数据包本身的序列号,我们记为x,把这个包发到了服务器,我们的状态变为(SYN_SEND)。

第二次握手,服务器接受到了我们的数据包,一切ok啊~我可以和你链接 服务器也组建了一个数据报,上边带着ASK=1(确认码),ask=x+1(确认收到了SEQ的值在顺序码上加一),一个SYN码(随便),一个SEQ=y,发给了我们,服务器状态变为(SYN_RECEVED)。

第三次握手,我们收到了服务说的一切ok,需要告诉服务器我们也收到了并可以开始愉快的交流了,我们的数据包上也需要一个确认码ASK=1,ask=y+1,和一个SEQ=(第一次握手的SEQ)+1,我们的状态变为(ESTABLISH),服务器收到也变成了(ESTABLISH)。

三次握手完成,可以进行HTTP通信了。

 

在一顿交流过后,我们怎么说再见呢。。

说再见的行为可以由客户端发起,也可以由服务器发起。我们以客户端为例

我想要停掉现在在传输的文件,

第一次挥手组建数据包,把FIN置为1(也是随便,类似于握手的SYN),把SEQ填为x,发送给服务器,此时我们的状态变为(FIN_WAIT)。

第二次挥手,服务器收到了我们再见的请求,组建数据包,SEQ=y,ASK=1,ask=x+1,服务器状态变为(CLOSE_WAIT),我们收到了他们的信号,我们的状态变为(FIN_WAIT2)。

第三次挥手,服务器继续组件数据包,SEQ=z,ASK=1,ask=x+1,FIN=1(状态边为LAST_ACK)。

第四次挥手,我们也收到啦,我们继续发数据包,上边写着(ASK=1,ask=z+1,seq=x+1),此时我们的状态变为(TIME_WAIT)在经过两个报文有效时间后,状态变成(CLOSED),发到服务器后服务器状态变成(CLOSED)。

挥手结束

可是为什么我们握手是三次挥手却是四次呢

在我们握手时,请求即是请求(我也不知道怎么解释...当我没说),SYN可以和SEQ一同发到服务器,因为请求只需要一次 

挥手时我们有可能并没有把话说完,还有部分数据未完成传输,在第二次挥手仅仅是告诉对方我一会可以断开,现在估计不行,等我完了告诉你。(大概就是这么个意思。。。) 

 

 

 

继续说一下HTTP和HTTPS,如果我们想访问一个页面,在我们进行了三次握手TCP链接好了之后,我们发送HTTP请求给服务器,服务器返回了HTML,浏览器渲染,页面呈现到了我们眼前。

之前的文章讲过HTTP协议是明文传输,不安全,我可以看,可以改,服务器也能不确定拿到的数据就是完整未经修改的,然后出现了HTTPS

HTTPS就是HTTP的基础上加了SSL(安全套接层)或者TLS(传输安全协议),并不是一个全新的协议,HTTP就像一根苹果数据线,我们为了保护数据线装了个保护层,这个数据线+保护套就叫HTTPS。

概念讲完说一下它是如何工作的

在我们进行完三次握手之后,客户端再发送请求数据包,里面带着SSL的版本以及加密组件(里面有加密算法,密钥长度等等吧),并发送一个随机数

服务器收到了我们的请求,觉得ok,发回一个数据包,带着确认的SSL版本和确认的加密组件,还有最重要的密钥证书(是公开密钥的容器,里面装着公开密钥),和一个随机数。

我们收到之后发送一个经过加密的新的随机数。

服务器确认了,可以秘密谈话了。

HTTPS交流开始。之前文章里有说过,https是用了对称加密(共享)和非对称加密(公开),在我们刚才的握手里用了非对称,在我们接下来的交流里

取了我们传输用的三个随机数,作为共享秘钥进行对称加密传输。

 

 

最后说下websoket,它是全双工通信,服务器可以主动发送消息给我们(客户端),在此之前,我们与服务器进行的通信都是应答形式,问一句答一句

如果并发量很大的话是非常耗费资源的(比如某某直播,弹幕什么的),每次请求都会带着重复的请求头,做不到实时反馈

websoket解决了我们的难题,它是一种协议,更像是一种HTTP协议的大补丁,让服务器的反馈不再是一问一答形式。

那么它走起来是怎么样的时序呢

在tcp三次握手之后,我们该进行http通信,当我们发送请求时,请求里多了

Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

这就是websoket的核心了,告诉客户端链接方式是要升级的!我要全双工通信!

下面三个就是密钥协议和版本了,服务器收到后返回如下

Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Accept是服务器确认且加密过的Sec-WebSocket-Key
完成。
一次握手,天下我有。。。。

转载于:https://www.cnblogs.com/locim/p/9273846.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值