网络编程基础

网络通信需要通过协议来完成,目前所使用的网络通信协议主要由两种模型体现。

因特网模型【五层】
应用层 → 运输层 → 网络层 → 链路层 → 物理层

OSI/ISO模型【开放式系统互联 七层】
应用层 → 表示层 → 会话层 → 运输层 → 网络层 → 链路层 → 物理层

简化五层 → TCP/IP模型【最常见 四层】
应用层 → 运输层 → 网络层 → 网络接口层

五层模型概述(不考虑物理层)

应用层
HTTP协议存在这一层(除此之外还有TELNET、FTP、SNMP、TFTP、NTP几种模型),位于应用层要传递的信息称为报文。

传输层
TCP、UDP协议存在于这一层,这两种协议把应用层的报文封装成一个新的结构,叫做报文段,在两个程序之间传递。

网络层
IP协议存在于这一层,网络层把传输层的报文段封装成一个叫做数据报的数据结构,把这个数据结构从一台主机移动到另一台主机上。

链路层
在一层把网络层的数据报再次封装,叫做帧。这一层把帧从当前节点移动到下一个节点,如从主机传输到路由器。

应用层概述(HTTP协议)

应用层目前主要使用两种体系结构,C/S结构(客户端/服务端结构),P2P结构(对等体系结构)。

HTTP协议,存在于应用层,契合C/S结构。用于将数据封装成请求报文发送。

请求报文,主要四部分组成:请求行,请求头,空行,请求体。

请求行:由三个部分组成,请求方法+URL+协议版本,请求方法:GET、POST、PUT等共八种;URL是一个统一资源标识符(如www.baidu.com等);协议版本(如HTTP/1.1)。

请求头:键值对的形式,每行一对,关键字和值用英文冒号分隔,请求头通知服务器有关于客户端请求的信息。参考资料

空行符:分割请求头和请求体的作用。

请求体:以GET方法和POST方法来解释:当请求方法为POST时,客户端需要填写相关的表单,与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length。GET通常不需要请求体。
响应报文,与请求报文对应,是服务端返回给客户端的请求结果。

响应报文由四个部分组成:状态行,响应头,空行,响应体。

状态行:包含了状态码(状态码自行查询含义)。

响应头:参考资料

响应体:服务器返回的文本信息。

传输层概述(UDP/TCP协议)
在网络通信的传输层,存在两种运输协议,UDP(用户数据报协议),TCP(传输控制协议)。两种协议都可以传递应用层中的请求报文。

UDP(用户数据报协议)特点

无连接的通讯协议

传输数据有大小限制,每个被传输的数据限定在64KB之内

是一个不可靠协议,不能保证数据传输的完整性与次序

传输速度快开销较小

支持一对一、一对多、多对一、多对多通信

TCP(传输控制协议)特点

面向连接的协议

只支持点对点的通信

传输的数据没有大小限制

是一个可靠的协议,可以保证数据传输的完整性与次序

耗时较多开销较大

TCP连接相关的报文相关缩写:SYN(同步标志synchronous)、ACK(确认标志Acknowledgement)、ACK序号(Acknowledgment Number)、SEQ(序列号Sequence Number)、FIN(结束标志final)

TCP建立连接的过程(三次握手)

第一次握手:客户端发送一个请求报文段,将报文段首部的一个标志位SYN设置为1,同时,客户端会把报文段的序列号SEQ设置为一个随机值x。这个时候,客户端进入到SYN_SEND状态,等待服务器确认。

第二次握手:服务器收到报文段,对齐进行确认。把这个收到的报文段的ACK序号设置为x + 1;同时,向客户端发送一个响应请求报文段,讲这个请求的SYN标志位设置为1,序列号SEQ设置为一个随机值y。然后服务器将上述信息整合成一个报文段,一并发送给客户端,此时服务器进入SYN_RECV状态。

第三次握手:客户端收到整合后的报文段,将这个报文段的ACK序号设置为y + 1,并将ACK报文段发送给服务器进行连接确认,服务器接收到这个报文段后,客户端与服务器都进入ESTABLISHED状态。建立连接以后,SYN被置为0,接下来就可以进行数据传输了。

TCP关闭连接的过程(四次挥手)

第一次挥手:客户端向服务器发送一个特殊的报文段,这个报文段的首部标志位FIN设置为1,这个时候客户端进入FIN_WAIT_1状态,表示客户端没有数据要发送给服务器了。

第二次挥手:服务端收到客户端发送的报文段后,向客户端发送了一个ACK报文段,客户端收到后进入FIN_WAIT_2状态,服务器告诉客户端,同意关闭请求。

第三次挥手:服务器再次向客户端发送一个FIN报文段,FIN标志未设置为1,请求关闭连接,同时服务器进入LAST_ACK状态;

第四次挥手:客户端收到这个FIN报文段后,向服务器发送AKC报文段,客户端此时进入TIME_WAIT状态。服务器收到这个ACK报文段后,就关闭连接。此时客户端等待2ms后没有收到回复,说明服务器已经关闭连接,那么客户端也关闭连接。

Socket

Socket是处于应用层与运输层【TCP/IP模型】中间一组接口(API),TCP/IP协议只是理论,需要通过Socket来实际编码使用。Android与IOS都提供了相关的Socket类,这些类提供了一系列的方法,来实现网络连接的各种操作。

Socket封装了网络通信的五个部分:

连接使用的协议(TCP或者UDP)

本机主机的IP地址

本地主机进程的协议端口

远程主机的IP地址

远程主机进程的协议端口

简单来说,Socket确定协议,确定客户端与服务端的IP地址与端口后,可以使用其提供的方法来进行网络的相关操作。

HTTP与HTTPS

HTTP协议模型
HTTP → TCP → IP

HTTPS协议模型:
HTTP → SSL/TLS → TCP → IP

HTTP与HTTPS的区别:

使用HTTP协议的客户端,会打开一条服务端端口为80的连接,并发送老的HTTP请求。使用HTTPS协议的客户端,会打开一条服务端端口为443连接,然后与服务器进行SSL握手。以二进制格式与服务器交互一些SSL的安全参数,附上加密的HTTP请求。

HTTPS协议需要用到CA申请证书。

HTTP是明文传输,HTTPS是SSL加密传输。

HTTPS协议的工作流程:

. 客户端发起HTTPS的请求,携带了客户端支持的加密算法和SSL协议版本号,连接到服务器的443端口。如果是HTTP连接到80端口。

配置服务器,采用HTTPS的服务器需要申请一套数字证书(数字证书的本身其实是一对公钥和私钥)。服务器收到请求之后,从加密算法中挑选一种,同时将自己的数字证书以及公钥发送给客户端(私钥自己保留)。

客户端验证数字证书,生产一个用于加密传输握手消息的密钥,并使用服务器端传来的公钥对此密钥进行加密。 SSL握手的大致内容【具体细节】

交换协议版本号

选择一个客户端与服务端都了解的密码

对两端的身份进行验证

生产临时的会话密钥以便加密信道

服务器使用保留的私钥对加密的密钥进行解密,得到密钥信息(完成非对称交换密钥)。

使用刚才得到的密钥信息,加密握手信息,发送给客户端,客户端使用相同密钥进行解密验证,完成握手(完成对称加密信息)。

进行加密信息传输。

GET/POST
GET与POST请求方式的区别:

1.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),POST把提交的数据则放置在是HTTP包的包体中。

2.GET的URL会有长度上的限制,则POST的数据则可以非常大。

3.POST比GET安全,因为数据在URL上不可见,非明文传输。

4.GET传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比POST好;而POST方式传递的数据量相对较大,它是等待服务器来读取数据。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值