握手协议

UNP——第二章,TCP握手与挥手分析

痞子三分冷 提交于 2020-01-16 01:45:36
1.握手 说明:   下面涉及 FIN,SYN,ACK之类数据时,都是由TCP服务收发,   涉及 accept, listen 之类api,都是 应用进程 完成。   都统一使用 客户端,服务端描述,请自行分辨。 (1)首先描述下3次握手,TCP协议做了什么。 客户端,主动打开,发送自己的序列号SYNj,并期待对方回复ACKj+1 服务端,被动打开,接送自己的序列号SYNk和ACKj+1,并期待对方回复ACKk+1 客户端,接收对方ACK,己方打开完成,接收对方SYN,发送ACKk+1 服务端,接收对方ACK,己方打开完成。 分析下:   首先打开分为,被动打开和主动打开。   当接收到对方的ACK,则己方打开完成,则可以使用socket进行读写操作,但并不保证正常。 (2)结合 系统调用分析三次握手 客户端,listen,进行被动打开 服务端,connect ,进行主动打开,发送SYNj(如果乙方此时没有listen 完成,则connect 失败) 客户端,回复SYNk + ACKj+1, 应用层无任何变化。 服务端,收到 ACKj+1 + SYNk,并回复 ACKk+1, 甲方打开完成,connect 返回。 客户端,收到ACKj+1,可以进行 read,write。 服务端,accept,如果乙方没有收到 SYNj 则会阻塞,否则返回 服务端,收到ACKk+1,可以进行

webSocket协议与Socket的区别

人盡茶涼 提交于 2020-01-15 07:39:30
WebSocket介绍与原理 WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。 ——百度百科 目的:即时通讯,替代轮询 网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。 HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。 缺点:会导致过多不必要的请求,浪费流量和服务器资源,每一次请求、应答,都浪费了一定流量在相同的头部信息上 然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。 原理 WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。 连接过程 —— 握手过程 1. 浏览器

WebSocket

南楼画角 提交于 2020-01-14 00:03:54
什么是WebSocket?看过html5的同学都知道,WebSocket protocol 是HTML5一种新的协议。它是实现了浏览器与服务器全双工通信(full-duplex)。HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。现在我们来探讨一下html5的WebSocket 概念 HTML5作为下一代WEB标准,拥有许多引人注目的新特性,如Canvas、本地存储、多媒体编程接口、WebSocket 等等。今天我们就来看看具有“Web TCP”之称的WebSocket. WebSocket的出现是基于Web应用的实时性需要而产生的。这种实时的Web应用大家应该不陌生,在生活中都应该用到过,比如新浪微博的评论、私信的通知,腾讯的WebQQ等。让我们来回顾下实时 Web 应用的窘境吧。 在WebSocket出现之前,一般通过两种方式来实现Web实时用:轮询机制和流技术;其中轮询有不同的轮询,还有一种叫Comet的长轮询。 轮询:这是最早的一种实现实时 Web 应用的方案。客户端以一定的时间间隔向服务端发出请求,以频繁请求的方式来保持客户端和服务器端的同步。这种同步方案的缺点是,当客户端以固定频率向服务 器发起请求的时候,服务器端的数据可能并没有更新,这样会带来很多无谓的网络传输,所以这是一种非常低效的实时方案。 长轮询:是对定时轮询的改进和提高

SSL协议握手过程中的报文解析

拜拜、爱过 提交于 2020-01-13 01:24:02
SSL建立握手连接目的: 1.身份的验证,client与server确认对方是它相连接的,而不是第三方冒充的,通过证书实现 2.client与server交换session key,用于连接后数据的传输加密和hash校验 简单的SSL握手连接过程(仅Server端交换证书给client): 1.client发送ClientHello,指定版本,随机数(RN),所有支持的密码套件(CipherSuites) 2.server回应ServerHello,指定版本,RN,选择CipherSuites,会话ID(Session ID) 3.server发送Certificate 4.Server发送ServerHelloDone 5.Client发送ClientKeyExchange,用于与server交换session key 6.Client发送ChangeCipherSpec,指示Server从现在开始发送的消息都是加密过的 7.Client发送Finishd,包含了前面所有握手消息的hash,可以让server验证握手过程是否被第三方篡改 8.Server发送ChangeCipherSpec,指示Client从现在开始发送的消息都是加密过的 9.Server发送Finishd,包含了前面所有握手消息的hash,可以让client验证握手过程是否被第三方篡改

为什么HTTPs比http慢

百般思念 提交于 2020-01-11 14:57:01
首先我解释一下,为什么HTTPs链接比较慢。 HTTPs链接和HTTP链接都建立在TCP协议之上。HTTP链接比较单纯,使用三个握手数据包建立连接之后,就可以发送内容数据了。 上图中,客户端首先发送SYN数据包,然后服务器发送SYN+ACK数据包,最后客户端发送ACK数据包,接下来就可以发送内容了。这三个数据包的发送过程,叫做TCP握手。 再来看HTTPs链接,它也采用TCP协议发送数据,所以它也需要上面的这三步握手过程。而且,在这三步结束以后,它还有一个 SSL握手 。 总结一下,就是下面这两个式子。 HTTP耗时 = TCP握手 HTTPs耗时 = TCP握手 + SSL握手 所以,HTTPs肯定比HTTP耗时,这就叫SSL延迟。 命令行工具 curl 有一个w参数,可以用来测量TCP握手和SSL握手的具体耗时,以访问支付宝为例。 $ curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}\n" -so /dev/null https://www.alipay.com TCP handshake: 0.022, SSL handshake: 0.064 上面命令中的w参数表示指定输出格式,time_connect变量表示TCP握手的耗时,time

python websocket学习使用

寵の児 提交于 2020-01-11 06:06:07
本文转载自: https://www.cnblogs.com/jinjiangongzuoshi/p/5062092.html 作者:jinjiangongzuoshi 转载请注明该声明。 前言 今天看了一些资料,记录一下心得。 websocket是html5引入的一个新特性,传统的web应用是通过http协议来提供支持,如果要实时同步传输数据,需要轮询,效率低下 websocket是类似socket通信,web端连接服务器后,握手成功,一直保持连接,可以理解为长连接,这时服务器就可以主动给客户端发送数据,实现数据的自动更新。 使用websocket需要注意浏览器和当前的版本,不同的浏览器提供的支持不一样,因此设计服务器的时候,需要考虑。 进一步简述 websocket是一个浏览器和服务器通信的新的协议,一般而言,浏览器和服务器通信最常用的是http协议,但是http协议是无状态的,每次浏览器请求信息,服务器返回信息后这个浏览器和服务器通信的信道就被关闭了,这样使得服务器如果想主动给浏览器发送信息变得不可能了,服务器推技术在http时代的解决方案一个是客户端去轮询,或是使用comet技术,而websocket则和一般的socket一样,使得浏览器和服务器建立了一个双工的通道。 具体的websocket协议在rfc6455里面有,这里简要说明一下

tcp三次握手、四次握手

只谈情不闲聊 提交于 2020-01-01 08:17:42
链接: https://www.nowcoder.com/questionTerminal/ec843c8a27c84a7693865f55a71a7e8c 来源:牛客网 三次握手: 1. 客户端发送SYN请求,进入SYN_SEND状态 2. 服务端收到SYN请求,并返回一个ACK应答,并发送一个SYN其请求,服务器进入SYN_RECV状态 3. 客户端收到服务端的SYN请求和ACK应答,发送ACK应答,客户端进入ESTABLISH状态,服务端收到应答后进入ESTABLISH。 如果没有收到应答,数据包都会根据TCP的重传机制进行重传。 四次挥手: 1. 客户端发送FIN包,请求断开连接,客户端进入FIN_WAIT1状态 2. 服务端收到FIN包后返回应答,进入CLOSE_WAIT状态 3. 客户端收到FIN的应答后进入FIN_WAIT2状态 4. 服务端发送FIN请求包,进入LAST_ACK状态 5. 客户端收到FIN请求包后,发送应答进入TIME_WAIT状态 6. 服务器收到ACK应答后,进入close状态。 链接: https://www.nowcoder.com/questionTerminal/ec843c8a27c84a7693865f55a71a7e8c 来源:牛客网 答:三次握手: 第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态

TCP协议三次握手过程分析

百般思念 提交于 2020-01-01 08:17:26
TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge number(确认号码) 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机; 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。 完成三次握手,主机A与主机B开始传送数据。 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接

TCP协议三次握手和四次握手

天大地大妈咪最大 提交于 2019-12-30 09:08:17
前言   先说一下IP协议和TCP协议,IP协议是无连接的通信协议,IP不会占用两个设备之间通信的线路,IP实际上主要负责将每个数据包路由至目的地,但是IP协议并没有能够确保数据包是否到达,传过去的数据包是否按照顺序排列,所以IP数据包是不可靠的。而解决数据不可靠的问题就是由TCP协议来完成,接下来就介绍TCP协议,是如何让这些数据可靠的。 TCP概念 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,前面的博客有介绍,在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内 另一个重要的传输协议。数据传输时,应用程序向TCP层发送数据流,TCP就会将接受到的数据流切分成报文段(会根据当前网络环境来调整报文段的大小),然后经过下面的层层传递,最终传递给目标节点的TCP层。为了防止丢包,TCP协议会在数据包上标有序号,对方收到则发送ACK确认,未收到则重传。这个步骤就是我们通常所说的TCP建立连接的三次握手。同时TCP会通过奇偶校验和的方式来校验数据传输过程中是否出现错误。下面来详细介绍三次握手的过程。 TCP报文中的6个标志位 先来简单介绍一下TCP报文 在这里主要介绍一下那6个标志位 URG:紧急指针标志,当为1时表示紧急指针有效,为0则忽略紧急指针

WebSocket握手总结

故事扮演 提交于 2019-12-29 15:41:55
网址:http://blog.csdn.net/edwingu/article/details/44040961 WebSocket protocol 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。 原理 以前网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每隔1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽。 在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。 握手协议 在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手” (handshaking)。 该方案处在草案阶段,目前在使用的有两个版本,一个是以chrome为首的使用的version 13(目前最新),该版本出现在RFC6455中。另一个是以safari(包括桌面和移动版本)为首的使用的draft-ietf