三次握手和四次挥手
TCP 是在互联网协议(IP)上的一种基于连接(面向连接)的传输层协议。数据通信的基本要素包括“所传输的数据”、“发送方”、“接收方“三个要素,还有保证所传输的数据是完好无损,正确无误的。这一普遍要求都是由TCP满足的,下面介绍TCP的三次握手和四次挥手过程。
三次握手:
1.客户端发送一个SYN包,表示要发起一个连接请求。
2.服务端收到客户端请求之后,向客户端发送一个SYN和ACK(同步+确认),表示确认收到请求并准备好连接。
3.客户端接收到服务端的响应之后,向服务端发回ACK,表示确认可以建立连接了。
这个时候客户端和服务端就建立起了连接,可以开始通信了。
注:其中SYN(同步),其中的seq = x ,x是一个序列号。
序列号是客户端和服务器分别选择一个初始序列号,并在握手过程中进行交换,要保证序列号的唯一性和有序递增,范围是从0到2^32-1(主机字节序),也就是0到4294967295,序列号的一旦连接建立,序列号会随着发送的数据而不断递增。当序列号达到最大值后,会从0重新开始。这样做是为了防止序列号空间耗尽。
客户端和服务器需要通过序列号同步来确保数据的有序传输。并提供可靠的数据传输。在数据传输过程中按照正确的顺序处理数据。
客户端发送的SYN包中的序列号(seq = x)要求服务器在回复的SYN+ACK包中确认(ack = x + 1)。这样客户端就知道服务器已经收到了自己的请求,并且客户端可以进一步确认服务器的响应。
四次挥手:
1.客户端发送一个FIN,表示要释放连接。
2.服务端接收到FIN之后,会回复一个ACK,表示确认收到。
3.服务端准备释放连接时,同样发送一个FIN给客户端。
4.客户端接收到服务端的FIN之后,会回复一个ACK,表示确认收到释放请求。
这个时候,客户端和服务端都释放了连接,连接断开。
总结:
1.三次握手是建立TCP连接的必要步骤,而四次挥手则是释放TCP连接的必要步骤。
2.三次握手和四次挥手的目的是确保数据传输的可靠性和正确性。
3.连接的释放过程比连接的建立过程要复杂,这是因为连接释放过程需要双方都知道连接已经释放,而连接建立过程只需要被请求方知道即可。
4.TCP协议的三次握手和四次挥手是TCP协议可靠性的重要保证,也是网络通信的必要约定。
可以通过查看端口号,来观察TCP连接的情况,使用cmd输入一下指令:
netstat -an|find /i 端口号
当没有服务端与端口连接时,不会出现任何响应
当我们使用提前写好的TCP服务端运行后,再次进行连接:
如果有其它客户端同时连接该服务端时,再次进行连接:
它也可以检测其他客户端与服务端的连接情况
如何构造自己的简易TCP服务端和客户端可参考这篇博文:
HTTP协议
HTTP协议的定义
-
网络协议
-
网络协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
-
-
HTTP协议
-
HTTP协议(超文本传输协议)是一种网络通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。默认端口:80
-
-
HTTPS协议
-
HTTPS协议是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。默认端口:443
-
-
HTTP协议的主要特点
-
支持客户/服务器模式
-
简单快速:客户向服务器发送请求时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
-
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
-
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
-
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
-
-
HTTPS协议的主要特点
-
内容加密:采用混合加密技术,中间者无法直接查看明文内容。
-
验证身份:通过证书认证客户端访问的是自己的服务器。
-
保护数据完整性:防止传输的内容被中间人冒充或者篡改。
-
SSL证书需要购买申请,功能越强大的证书费用越高。
-
SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
-
HTTPS连接缓存不如HTTP高效,流量成本高。
-
HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。
-
HTTP协议的组成
-
请求行
-
请求行由请求方法字段(GET/POST)、URL字段和HTTP协议版本组成。
-
-
URL字段
-
URL字段也称为请求地址
-
-
HTTP协议的请求方法
-
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
-
常用的方法:
-
GET方法:浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源。
-
POST方法:要求被请求服务器接受附在请求后面的数据,常用于提交表单。
-
-
-
GET和POST区别
-
从参数的传递方面来看,GET请求的参数是直接拼接在地址栏URL的后面,而POST请求的参数是放到请求体里面的;
-
从长度限制方面来看,GET请求有具体的长度限制,一般不超过1024KB,而POST理论上没有,但是浏览器一般都有一个界限;
-
从安全方面来看,GET请求相较于POST,因为数据都是明文显示在URL上面的,所以安全和私密性不如POST;
-
从本质上来说,GET和POST都是TCP连接,并无实质的区别.但是由于HTTP/浏览器的限定,导致它们在应用过程中体现出了一些不同.GET产生一个数据包,POST产生两个数据包.对于GET请求,浏览器会把http header 和 data 一并发出去,服务器响应200(返回数据).而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200
-
-
请求头部
-
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号 “ : ” 分隔。
-
请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
-
User-Agent:产生请求的浏览器类型。
-
Accept:客户端可识别的内容类型列表。
-
-
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
-
Content-Type:请求体的MIME类型。MIME类型:描述消息内容类型的因特网标准,常见的有application/json、image/jpeg、application/octet-stream等。
-
-
-
请求正文
-
请求正文向服务器提交的请求数据,GET请求的参数一般是放在请求行后的键值对,post请求的参数类型多样(表单、json、xml、图片等)
-
响应行
-
响应行由响应状态码、响应信息和HTTP协议版本字段3个字段组成
-
响应状态码
-
响应状态码由三位数字组成,第一个数字定义了响应的类别,且有五种类型
-
1xx:指示信息--表示请求已接收,继续处理
-
2xx:成功--表示请求已被成功接收、理解、接受
-
3xx:重定向--要完成请求必须进行更进一步的操作
-
4xx:客户端错误--请求有语法错误或请求无法实现
-
5xx:服务器端错误--服务器未能实现合法的请求
-
-
-
常见的响应状态码
-
200 - 请求成功,已经正常处理完毕
-
301 - 请求永久重定向,转移到其它URL
-
302 - 请求临时重定向
-
304 - 请求被重定向到客户端本地缓存
-
400 - 客户端请求存在语法错误
-
401 - 客户端请求没有经过授权
-
403 - 客户端的请求被服务器拒绝,一般为客户端没有访问权限
-
404 - 客户端请求的URL在服务端不存在
-
500 - 服务端永久错误
-
503 - 服务端目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
-
-
响应头
-
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
-
常见的响应头:
-
Content-Length:表示内容长度
-
Content- Type:表示后面的文档属于什么MIME类型
-
Server:服务器通过这个头告诉浏览器服务器的类型
-
-
-
响应正文
-
响应正文就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是图片就是图片等。
-