网络基础
计算机网络共分为五层:
应用层
运输层 >>通过端口把数据传到目的主机的目的进程,来实现进程和进程之间的通信
网络层 >> 负责根据IP找到目的地址的主机
数据链路层
物理层
端口号(PORT)
端口号规定为16位,即允许一个IP主机有2的16次方65536个不同的端口
其中 :0 ~ 1023 分配给系统的端口号(我们不能乱用)
:1024 ~ 49151 登记端口号,主要是供第三方应用使用
:49152 ~ 65535 短暂端口号,是留给客户进程选择暂时使用,一个进程使用完就可以 供其他进程使用
(在socket使用时,可以用1024 ~ 65535 的端口号)
C/S结构
定义:即客户端/服务器结构,是软件系统体系结构。
作用:充分利用两端硬件环境的优势,将任务合理分配到Cliect端和Server端来实现,降低系统的通讯开销
从下面图片可以看出,Socket使用可以基于TCP或者UDP协议
TCP协议
定义:Transmission Control Protocol,即传输控制协议,是一种传输层通讯协议。
"基于TCP应用层协议有:FTP,Telent,HTTP,POP3,DNS"
特点:
面向连接:指要使用TCP传输协议,必须先建立TCP连接,传输完成后释放连接,就 像打电话一样必须先输号建立一条连接,打完后挂断释放连接。
面向字节流:流,指的是流入到进程或从进程流出的字符序列。
全双工通信:一但建立TCP连接,通信双方可以在任意时候发送数据。
可靠:指通过TCP间接传输的数据,无差错、无丢失、不重复,并且按序到达。
TCP建立间接:
必须进行三次握手,如A与B进行连接,则必须
第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后客户端进入SYN_SEN状态,等待服务端确认。即A发送 信息给B。
第二次握手:服务端收到客户端的SYN报文段,需要对这个SYN报文段进行确认。即B收 到连接信息向A返回确认信息。
第三次握手:客户端收到服务器的(SYN+ACK)报文段,并向服务器发送ACK报文段。 即A收到确认信息后再向B返回确认连接信息。
至此A告诉自己上层连接建立;B收到连接信息后告诉上层连接建立。
UDP协议
定义:User Datagram Protocol,即用户数据报协议,是一种传输层通讯协议。
“基于UDP的应用层协议有TFTP,SNMP,DNS”
特点:
无连接的:和TCP建立连接不同,UDP传输数据不需要建立连接,就像写信在信封写 上收件人名字,地址交给邮局发送就可以了。至于能不能到剩下就看邮局 的了。
不可靠的:因为UDP发出去的数据包发出去就不管了,所以很可能出现丢包现象,使 传输的数据出错。
面向报文:数据报文,相当于一个数据包,应用层交给UDP多大的数据包,UDP都照 常发送,不会像TCP那样拆分。
没有拥塞控制:拥塞,是指到达通信子网中某一部分的分组数量过多,使得该部分网 络来不及处理,以至引起这部分乃至整个网络性能下降的现象,严重 时甚至会导致网络通信业务陷入停顿,即出现死锁现象。
应用场景:
很多实时应用(如IP电话,实时视频会议等)要求源主机以很定的速率发送数据,并且允许网络发生拥塞时丢失一些数据,但是要求不能有太大的延迟,UDP就刚好适合这种要求,所以只有不适合的技术,没有正真没用的技术
Socket
定义
即套接字,是一个对TCP/IP协议进行分装的编程调用接口(API)
通过socket,我们才能在android平台上通过TCP/IP协议进行开发
socket不是一种协议,而是一个编程调用接口(api)属于传输层
成对出现,一对套接字
Socket = {(IP地址1,RORP端口号), (IP地址2,RORP端口号)}
原理
socket的使用类型主要有两种
流套接字(streamsocket):基于TCP协议,采用流的方式提供可靠的字节流服务
数据报套接字(datagramsocket):基于UDP协议,采用数据报文提供数据打包发送的服务
“原理如下”
Socket与Http的对比
Socket属于传输层,因为TCP/IP协议属于传输层,解决的是数据如何在网络中传输的问题
Http协议属于应用层,解决的是如何包装数据
http:采用请求 - 响应方式
1、建立网络连接后,当客户端向服务端发送请求,服务端才能向客户端返回数据
2、可以理解为,是客户端有需要才会进行通信
Socket:采用服务器主动发送数据的方式
1、即建立网络以后,服务器可主动发送消息给客户端,而不需要客户端向服务器发送请求
2、可以理解为,是服务器有需要才会进行通信