1、开放系统互连参考模型
2、通信协议详解
TCP/IP协议
TCP/IP 是一个协议族,也是按照层次划分。共四层:应用层,传输层,互连网络层,网络接口层。 OSI网络协议模型七层,是一个参考模型,而TCP/IP协议是事实上的标准。TCP/IP协议和OSI模型并不冲突,TCP/IP协议中的应用层协议,就对应于OSI中的应用层,表示层,会话层。TCP/IP中有两个重要的协 议,传输层的TCP协议和互连网络层的IP协议,因此就拿这两个协议做代表,来命名整个协议族了,在说TCP/IP协议时,是指整个协议族。
TCP传输控制协议
1、建立连接,形成传输数据的通道
2、在连接中进行大数据传输(数据大小不做限制)
3、通过三次握手完成连接,是可靠协议,安全送到
4、必须连接,效率会稍低
- TCP的三次握手
三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息。在Socket编程中,客户端执行connect()时,将触发三次握手。
注:
SYN(synchronous)是同步标志
ACK (Acknowledgement)是确认标志
Seq是序列号
第一次握手:客户端发送一个TCP的SYN标志位置1的包,指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号字段里。
第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号设置为客户的序列号加1以,即X+1。
第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写序列号的+1。
- TCP的四次挥手
当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都
- TCP客户端-服务器程序设计基本框架
UDP 用户数据报协议
1、将数据及源和目的封装成数据报,不需要建立连接
2、每个数据报的大小限制在64K之内
3、因为无需连接,所以是不可靠传输协议
4、不需要建立连接,速度快
- UDP客户端-服务端程序设计基本框架
UDP是面向无连接的协议,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。比如,主机A向发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一起,这样的数据是没有意义的。
端口号
TCP和UDP都是IP层面的传输协议,是IP与上层之间的处理接口。TCP和UDP端口号被设计来区分运行在单个设备上的多重应用程序的IP地址。由于同一台计算机上可能会运行多个网络应用程序,所以计算机需要确保目标计算机上接收源主机数据包的软件应用程序的正确性,以及响应能够被发送到源主机的正确应用程序上。该过程正是通过使用TCP或UDP端口号来实现的。
--即每一个应用都会在网卡上注册一个端口号用来区分同一台设备上应用的之间的通信
在TCP和UDP头部分,有“源端口”和“目标端口”段,主要用于显示发送和接收过程中的身份识别信息。IP 地址和端口号合在一起被称为“套接字”。TCP端口比较复杂,其工作方式与UDP端口不同。UDP端口对于基于UDP的通信作为单一消息队列和网络端点来操作,而所有TCP通信的终点都是唯一的连接。每个TCP连接由两个端点唯一识别。由于所有TCP连接由两对 IP 地址和TCP端口唯一识别(每个所连主机都有一个地址/端口对),因此每个TCP服务器端口都能提供对多个连接的共享访问
再看一下IP数据包和TCP/UDP的数据包:
http 协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
http协议规定了客户端和服务器之间的数据传输格式.
特点:
1、简单快速:
http协议简单,通信速度很快;
2、灵活:
http协议允许传输任意类型的数据;
3、短连接:
http协议限制每次连接只处理一个请求,服务器对客户端的请求作出响应后,马上断开连接.这种方式可以节省传输时间.
- http请求
http协议规定:一个完整的http请求包含'请求行','请求头','请求体'三个部分;
1、请求行:包含了请求方法,请求资源路径,http协议版本. "GET /resources/images/ HTTP/1.1"
2、请求头:包含了对客户端的环境描述,客户端请求的主机地址等信息.
Accept: text/html ( 客户端所能接收的数据类型 )
Accept-Language: zh-cn ( 客户端的语言环境 )
Accept-Encoding: gzip( 客户端支持的数据压缩格式 )
Host: m.baidu.com( 客户端想访问的服务器主机地址 )
User-Agent: Mozilla/5.0(Macintosh;Intel Mac OS X10.10 rv:37.0) Gecko/20100101Firefox/37.0( 客户端的类型,客户端的软件环境 )
3、请求体:客户端发给服务器的具体数据,比如文件/图片等.
- http响应:服务器返回客户端想要的数据
http协议规定:一个完整的http响应包含'状态行','响应头','实体内容'三个部分;
1、状态行:包含了http协议版本,状态吗,状态英文名称.
"HTTP/1.1 200 OK"
2、响应头:包含了对服务器的描述,对返回数据的描述.
Content-Encoding: gzip(服务器支持的数据压缩格式) Content-Length: 1528(返回数据的长度)
Content-Type:application/xhtml+xml;charset=utf-8(返回数据的类型)
Date: Mon,15Jun201509:06:46GMT(响应的时间) Server: apache (服务器类型)
3、实体内容:服务器返回给客户端的具体数据(图片/html/文件...).
-
http方法
http协议定义了很多方法对应不同的资源操作,其中最常用的是GET和POST方法。
eg:GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
增:PUT
删:DELETE
改:POST
查:GET
因为GET和POST可以实现上述所有操作,所以,在现实开发中,GET和POST方法使用的最为广泛,除此以外HEAD请求使用频率也比较高;
1、GET请求
在请求URL后面以?的形式跟上发给服务器的参数,参数以"参数名"="参数值"的形式拼接,多个参数之间用&分隔;
GET的本质是从服务器得到数据,效率更高.并且GET请求可以被缓存.
注意:GET的长度是有限制的,不同的浏览器有不同的长度限制,一般在2~8K之间;2、POST请求
POST的本质是向服务器发送数据,也可以获得服务器处理之后的结果,效率不如GET.POST请求不可以被缓存,每次刷新之后都需要重新提交表单.
发送给服务器的参数全部放在'请求体'中;
理论上,POST传递的数据量没有限制.
注意:所有涉及到用户隐私的数据(密码/银行卡号等...)都要用POST的方式传递.3、HEAD请求
HEAD方法通常用在下载文件之前,获取远程服务器的文件信息!相比于GET请求,不会下载文件数据,只获得响应头信息!
一般,使用HEAD方法的目的是提前告诉用户下载文件的信息,由用户确定是否下载文件!所以, HEAD方法,最好发送同步请求!
https协议
简单来说,HTTPS就是安全版的HTTP,并且由于当今时代对安全性要求更高,chrome和firefox都大力支持网站使用HTTPS,苹果也在ios 10系统中强制app使用HTTPS来传输数据
- http和https的区别
1、HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
2、HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
3、HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。