TCP/IP协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
- HTTP、TTTPS是在应用层。其他应用层协议有FTP、TELNET、SMTP、DNS等协议。
- TCP、UDP是在传输层。
- 而socket是一种连接模式,不是协议,socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)
-
网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
[1]
作用与关系
- TCP/IP是传输层协议,主要解决数据如何在网络中传输;而Http是应用层协议,主要解决如何包装数据。
- Http协议是基于TCP链接的。http协议是建立在TCP协议之上的一种应用。
传输层的任务就是负责主机中两个进程之间的通信,IP知道怎么把分组投递给哪个主机不知道怎么把它们投递给主机上的具体应用。简单的说,IP层提供主机到主机间的通信,UDP/TCP提供进程与进程之间的通信,应用层协议规定了进程通信时需遵守的规则和标准。UDP/TCP位于IP层的上层,应用协议的下层。
[2]
HTTP
HTTP全称是HyperText Transfer Protocal,即:超文本传输协议,HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
HTTP连接即是所谓的短连接。
a、在HTTP1.0中。客户端的每次请求都要建立一次单独的连接,在处理完成请求后,就自动释放连接。
b、在HTTP1.1中则可以在依次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后在发送下一个请求。
socket连接即是所谓的长连接
理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。
由于Http在么次请求结束之后都会主动释放连接,因此HTTp协议连接是一种短连接,要保持客户端程序的在线状态,需要不断的向服务器发起连接请求,通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”,若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已断开。
[3]
HTTPS通信原理
HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道
HTTPS是HTTP over SSL/TLS,HTTP是应用层协议,TCP是传输层协议,在应用层和传输层之间,增加了一个安全套接层SSL/TLS:
SSL (Secure Socket Layer,安全套接字层)
TLS (Transport Layer Security,传输层安全协议)
SSL使用40 位关键字作为RC4流加密算法
Https的作用
- 内容加密 建立一个信息安全通道,来保证数据传输的安全;
- 身份认证 确认网站的真实性
- 数据完整性 防止内容被第三方冒充或者篡改
[4]
Https和Http的区别
- https协议需要到CA申请证书。
- http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由- SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
- http默认使用80端口,https默认使用443端口
[5]
TCP和UDP
- TCP:传送控制协议(Transmission Control Protocol)
- UDP:用户数据报协议 (UDP:User Datagram Protocol)
TCP协议是基于连接的可靠协议,有流量控制和差错控制,也正因为有可靠性的保证和控制手段,所以传输效率比UDP低;UDP协议是基于无连接的不可靠协议,没有控制手段,仅仅是将数据发送给对方,因此效率比TCP要高。
TCP 和 UDP 的区别
- TCP 是面向连接的,UDP 是面向无连接的
- UDP程序结构较简单
- TCP 是面向字节流的,UDP 是基于数据报的
- TCP 保证数据正确性,UDP 可能丢包
- TCP 保证数据顺序,UDP 不保证
TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢),发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用),远程登录(TELNET SSH 对数据准确性有一定要求,有连接的概念)等等;UDP一般用于即时通信(QQ聊天 对数据准确性和丢包要求比较低,但速度必须快),在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等。
TCP三次握手
每一次TCP连接都需要三次握手:1.建立连接、2.数据传输、3.连接释放
第一次握手----客户端向服务器招手问你能收到吗?能的话回个话。:客户端首先向服务器发送SYN=1来创建一个主动打开,作为三次握手的一部分。客户端把这段连接的序号设定为随机数seq=client_isn=A;
第二次握手----服务器反馈说我能收到,你能收到吗?能的话回个话。:服务器收到连接后应当回应这次招手,给客户端返回一个SYN=1、ACK=A+1、SYN/ACK本身又有一个随机序号seq=server_isn=B;客户端收到服务器的反馈后,收到SYN=1、ACK=A+1、seq=server_isn=B,判断服务器能够正常回应。
第三次握手----客户端最后反馈说,我能收到:于是客户端又发送一个SYN=0、ACK=B+1、seq=A+2。当服务器端收到这个ACK的时候,知道了客户端能够正常发送信息,就完成了三次握手,并进入连接创建状态。
SYN攻击
在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接。此时服务器处于SYN_RECV状态。当收到ACK后,服务器转入ESTABLISHED状态。
SYN攻击(攻击客户端)就是在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
TCP四次挥手
为什么握手三次,挥手需要四次呢?因为TCP协议是全双工传输的,客户端和服务端可以同时双向传输,相当于两条通道,这是就需要双方互相通知关闭通道。
中断可以是客户端发出也可以是服务端发出。客户端先发起中断请求的话:
我要中断连接了:客户端发送FIN=1、ACK=z、发送序号是seq=x给服务器。
你要中断连接啊,我知道了:服务器发送ACK=x+1、seq=z给客户端。
服务器心想客户端可能不知道我已经知道了你的中断连接请求,那我就返回一个报文给你说一下:服务器主动发送一个FIN=1、ACK=x、seq=Y给客户端。
服务器收到这个报文之后,心里想告诉一下服务器,让它别担心:客户端给服务器发送了一个ACK=Y、seq=x的报文表示自己已经知道了。
[6]
socket原理
a、套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,他是网络通信过程中端点的抽象表示,他包含网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远程主机的IP地址,远地进程的协议端口。
应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序提供并发服务的问题,多个TCP连接多个应用程序进程可能需要通过同一个TCP协议端口传输数据,为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(socket)接口,应用层可以和传输层通过socket接口区分来自于不同应用进程或网络连接的通信,实现数据传输的并发服务。
b、建立socket连接
建立socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行与服务器,称为ServerSocket。
套接字之间的连接分为三个步骤:服务器监听、客户端请求、连接确认。
- 服务器监听:服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
- 客户端请求:至客户端的套接字提出连接请求,要练级的目标是服务器端的套接字,为此客户端的套接字必须首先描述他要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后向服务器端套接字提出连接请求。
- 连接确认:当服务器端套接字监听到或者说接收到客户端的套接字连接请求是,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式链接链接,而服务器端 套接字继续处于监听状态,继续接受其他客户端套接字的连接请求。
单工、半双工、全双工
根据通信双方的分工和信号传输方向可将通信分为三种方式:单工、半双工与全双工。
单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播。
半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。全双工数据通信允许数据同时在两个方向上传输,举例:电话通信。
c、socket连接与TCP连接
创建Socket连接时,可以指定使用的传输层协议,socket可以支持不同的传输层协议(TCP/UDP),当使用TCP协议进行连接时,该socket接连就是TCP链接。通常情况下Socket连接就是TCP连接
[7]
socket传输和http传输
Socket 传输的特点:
优点:
- 传输数据为字节级,传输数据可自定义,数据量小(对于手机应用讲:费用低)
- 传输数据时间短,性能高
- 适合于客户端和服务器端之间信息实时交互
- 可以加密,数据安全性强
缺点:
- 需对传输的数据进行解析,转化成应用级的数据
- 对开发人员的开发水平要求高
- 相对于Http协议传输,增加了开发量
基于Http协议传输特点
优点:
- 基于应用级的接口使用方便
- 程序员开发水平要求不高,容错性强
缺点:
- 传输速度慢,数据包大(Http协议中包含辅助应用信息)
- 如实时交互,服务器性能压力大。
- 数据传输安全性差
各数据传输方式的适用范围
- Socket传输适用范围
基于Socket传输的特点:Socket 传输方式适合于对传输速度,安全性,实时交互,费用等要求高的应用中,如网络游戏,手机应用,银行内部交互等
- 基于Http协议传输的适用范围
基于http协议传输的特点:基于http协议传输方式适合于对传输速度,安全性 要求不是很高,且需要快速开发的应用。如公司OA系统,互联网服务等。
-
作用与关系 ↩
-
HTTP ↩
-
HTTPS通信原理 ↩
-
Https和Http的区别 ↩
-
TCP和UDP ↩
-
socket原理 ↩
-
socket传输和http传输 ↩