前端浅谈---协议相关(TCP连接)
TCP连接
http的描述里面,我弱化了交互过程的描述,因为它相对复杂.所以我在此单独描述.客户端和服务端传递数据时过程相对谨慎和复杂,主要是开始和结束的过程.而这整个过程就是TCP连接.连接流程大体包括:
三次握手
握手是见面时建立信任的过程.其主要目的是确认彼此的身份和明确是确认有需求而不是来找茬的.所以这里需要几个关键词:
请求/响应方的身份证:seq(客户端/服务器的标记序号)
标志位:SYN/FIN/ACK等等
确认信息内容:ack(seq+ACK)
这里要强调一下标志位,它相当于行业黑化,有几个固定的值,双方看到其中一个基本就知道干嘛的了.我们主要说其中正常TCP过程会有的
SYN:新建一个连接请求
ACK:确认序号有效
FIN:释放一个连接
1.握手过程
因为互联网上,一个客户端可能同时对接多个服务器.服务器也是同样.所以,可以理解在互相接通之前大家都是看不见对方在网上聊天室里喊话.
第一次握手:我,shyno,(老爸)打钱. (因为有ip定位,客户端是能直接向指定服务器发送请求的.并不是谁听到谁回复.并且会带上自己的seq序号,同时发送SYN=1,
告诉服务端我希望建立一个连接请求). 客户端------SYN=1,seq=x------>服务端
第二次握手:你是shyno啊?我听到了.我是ShyNo,你爸,你是希望我给你打钱是吧?(确认序列号是否有效,即ACK=1,然后申明自己是你希望找的人,自己的seq,接着跟你确认
你之前的信息,ack=seq(shyno)+ACK(确认)) 服务端----->SYN=1,seq=y,ack=x+1---->客户端
第三次握手:哦,ShyNo确实是我爸.你收到我的请求了吧?那我现在希望ShyNo,赶紧给shyno打钱(收到服务端的请求之后要确认服务器确实收到了我的要求,然后才明确本客
户端(,带序号,而且已确认),向目标客户端(带序号,已确认)发送连接请求.) . 客户端----->seq=x+1,ack=y+1------>服务端
总结一下,TCP握手过程分三次.然后前两次是确认双方身份以及确认大家还是在同一个需求上进行交流,最后一次才是真正的发送连接请求. 第一次,SYN=1,加上客户端seq,让服务端确认.第二次,SYN=1,服务端的seq,再加上服务端的确认结果.最后一次是已确认过的双方身份,正式发请求.而确认结果是通过ACK来表示的,seq后面加上ACK=1.
2.为什么要三次握手?
最主要的目的是"试触".假如我直接让服务器给我连接,很有可能就像我上来就让老爸打钱.他不知道我的号是不是被盗了,我也不知道你现在是不是在看手机.其结果就是我得一直等着他.什么事都干不了.所以我得先让他知道我没被盗号,并且我希望和他说个事(第一次握手目的).然后,如果老爸看到了信号,会回复我,一方面是确认我是不是被盗号了,另一方告诉我,现在是我老爸在回复我,而不是老妈在用他手机回复我,另一方面是想知道过去了这几分钟了,你是不是还想要打钱(第二次握手目的).我告诉他,是的,我还想要钱.这条消息不是群发的,你可以准备给我打钱了(第三次握手的目的)
因为在客户端等待的期间,有可能超过了它设定的时间,那它会断开连接,重新发起一个新的请求.比如我等了几分钟发现老爸不回我了,我觉得还是算了.于是我又说,那我给你转点钱吧(断开旧请求,打开新请求了).可对于服务端,他可能这时候收到前一个请求.直接给我转钱了.跟我想要的目的不一样,我明明不要钱了,他还给我.造成这种情况的主要原因,一方面是请求的时候信息可能会丢失,另一方面信息传递和响应过程都有延迟.一步步确认以保证准确性
数据交换
握手结束后正式互相传递数据.
四次挥手
这里有三个流程是跟握手是一样的.也就是说请求新建连接的过程和要求断开连接的过程是查不多的.他们唯一的区别是,客户端找服务器的时候直接上来就行.但是断开连接的时候是需要对方准备好的.为啥,因为断开之前客户端一直在给你传输数据,万一你直接断开,他还没转完咋办?
1.挥手过程
第一次挥手:我,shyno,要挂了. 客户端-----FIN=1,seq=o---->服务器
第二次挥手:你老爸我知道了,你shyno想挂了是吧? 服务器-----eq=p,ack=o+1---->客户端
且慢,我问问你老妈还有没有啥跟你说的.
第三次挥手:我,你老妈,没啥好跟你说的了,我们全家都没啥说的了,你挂吧(ACK=1,这个跟之前提到的ACK不一样,之前的ACK是表明确认身份,而这里是表示服务器是否可断开
的状态的) 服务器-----FIN=1,seq=q,ack=o+1,ACK=1----->客户端(多出的一步)
第四次挥手,:那,我,shyno,要挂断了,老妈.(挂断) 客户端-----seq=o,ack=q+1-------->服务器
然后就可以各自做各自的事情去了.
2.什么时候加标志位
最后再理解一下标志位啥时候加啥时候不加,一般,最后一次客户端向服务端发请求的时候不加.为啥?因为在之前的"试触"或者说认证的过程中就已经明白你这次请求的性质是啥了,最后一次你直接说事就行.另外,"性质不纯"的不加.比如第二次挥手,目的并不是告诉你可以断开了,而是告诉你要等等.所以,就算要加,也应该加一个标志等等的标志位,目前没有.所以,不加FIN.
3.是不是每次都需要三次握手和四次挥手?
首先,一个http连接必定会经过三次握手和四次挥手.但是http连接分为可持续性连接和非持续性连接.如果是持续性连接,只要保持连接,就不需要每次都三次握手和四次挥手.请求报文里可进行设置,告诉服务器需不需要保持连接.Connection:Keep-Alive或者Connection:close.
前端浅谈---协议相关(TCP连接)的更多相关文章
- 前端浅谈-协议相关(http/https)
当DNS工作完之后得到了一个网址 https//192.168.1.255/index.html 这个并不符合标准的请求路径.接下来就是https的功能了.讲https前先讲讲它的前身http协议 H ...
- 前端浅谈-协议相关(DNS协议)
从应用层到实体层的协议太多了,我们并不能一一涉及,目前来说就打算整理可能会与前端相关的协议. 前端面试常会问到一个问题-"从输入一个url到页面渲染经历了哪些过程".这其实是一个相 ...
- FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接
一.为什么写这个 昨天遇到个ftp相关的问题,关于ftp匿名访问的.花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问. 期间不会弹出输入用户 ...
- OSI七层协议与TCP连接
概述 为了追求效率,我们写代码,不可能去关注底层知识,但往往到出了问题,或者性能调优.我们就会速手无策,仔细为自己查缺补漏,总结知识点. 网络协议 互联网的本质就是一系列的网络协议,让不同计算机能够互 ...
- 浅谈HTTP和TCP的理解
TCP协议对应于传输层,而Http协议对应于应用层,Http协议是建立在TCP协议之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.HTTP会通过TCP建立一个连接通道,当HTT ...
- 【网络协议】TCP连接的建立和释放
转载请注明出处:http://blog.csdn.net/ns_code/article/details/29382883 TCP首部格式 先看TCP报文段的格式,例如以下; TCP报文段首部的前20 ...
- 浅谈Http、TCP、UDP和 IP 的的区别
应用层:Http,超文本传输协议(HyperText Transfer Protocal):利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议.客户端使用Web浏览器发起HTTP请求 ...
- 智能车学习(二十)——浅谈C车硬连接与软连接
一.为何要追求软连接? 车子进行软连接之后,可以达到一种效果,就是在高速过程中,车子如果快要发生侧翻的时候,只会跳一个后轮,且只是轻微,而前轮如果进行的内倾,就可以让前轮最大面积接触,增大 ...
- 浅谈协议(四)——wireshark强力解析视频流协议
参考链接: https://wenku.baidu.com/view/460f016e49d7c1c708a1284ac850ad02de800722.html https://wenku.baidu ...
随机推荐
- Matplotlib(嵩老师.)
Matplotlib 库的使用 Matplotlib 库有各种可视化类构成,内部结构复杂,受Matlab启发 matplotlib.pyplot是绘制个类可视化图形的命令子库相当于快捷方式 imp ...
- java中static关键字的解析
静态的特点: A:随着类的加载而加载 B:优先于对象而存在 C:静态是被所有对象共享的数据 这也是我们来判断是否使用静态的标准 D:静态的出现,让我们的调用方式多了一种 类名.静态的内容 非静态的内容 ...
- 听说你想把对象存储当 HDFS 用,我们这里有个方案...
传统的大数据集群往往采用本地中心化的计算和存储集群.比如在谷歌早期的[三驾马车]中,使用 GFS 进行海量网页数据存储,用 BigTable 作为数据库并为上层提供各种数据发现的能力,同时用 MapR ...
- IDEA生成doc文档-生成chm文档
首先,打开IDEA,并找到Tools -> Generate JavaDoc- 可供查询的chm比那些HTML页面好看多了. 如果您用过JDK API的chm文档,那么您一定不会拒绝接受其它第三 ...
- Elasticsearch分布式搜索和数据分析引擎-ElasticStack(上)v7.14.0
Elasticsearch概述 **本人博客网站 **IT小神 www.itxiaoshen.com Elasticsearch官网地址 https://www.elastic.co/cn/elast ...
- 通过Rainbond的团队管理去管理已有的组织架构
针对于多团队管理我先列举几个小问题,看看大家有没有共鸣,我们在刚刚接触并使用Rainbond的时候,仅仅创建一个团队,里面创建一大堆应用,看起来特别乱,进行管理的时候呢,也会非常麻烦,尤其是当团队需要 ...
- UE4打包启动失败:RunUAT.bat ERROR: AutomationTool failed to compile.
打包配置正常的情况下,出现下面Log: RunUAT.bat ERROR: AutomationTool failed to compile. 基本上,可以先排查下任务管理器中是不是有UE4Edito ...
- 学习java的第十天
一.今日收获 1.java完全学习手册第二章2.9程序流程控制中的选择结构与顺序结构的例题 2.观看哔哩哔哩上的教学视频 二.今日问题 1.例题的问题不大,需要注意大小写,新的语句记忆不牢 2.哔哩哔 ...
- accent, accept
accent A colon (:) is used to represent a long vowel, e.g. sheet /ʃiːt/ and shit /ʃit/. The word bed ...
- 26. Linux GIT
windows git 下载链接: Msysgit https://git-scm.com/download/win 1 进入git bash进行第一次配置 git config --global ...