Socket

网络基础

计算机网络共分为五层:

应用层

运输层            >>通过端口把数据传到目的主机的目的进程,来实现进程和进程之间的通信

网络层             >> 负责根据IP找到目的地址的主机

数据链路层

物理层

端口号(PORT)

端口号规定为16位,即允许一个IP主机有2的16次方65536个不同的端口

其中 :0 ~ 1023 分配给系统的端口号(我们不能乱用)

        :1024 ~ 49151 登记端口号,主要是供第三方应用使用

        :49152 ~ 65535  短暂端口号,是留给客户进程选择暂时使用,一个进程使用完就可以                                            供其他进程使用

(在socket使用时,可以用1024 ~ 65535 的端口号)

C/S结构

定义:即客户端/服务器结构,是软件系统体系结构。

作用:充分利用两端硬件环境的优势,将任务合理分配到Cliect端和Server端来实现,降低系统的通讯开销

从下面图片可以看出,Socket使用可以基于TCP或者UDP协议

Socket_第1张图片

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收到连接信息后告诉上层连接建立。


Socket_第2张图片

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_第3张图片

Socket与Http的对比

Socket属于传输层,因为TCP/IP协议属于传输层,解决的是数据如何在网络中传输的问题

Http协议属于应用层,解决的是如何包装数据

http:采用请求 - 响应方式

1、建立网络连接后,当客户端向服务端发送请求,服务端才能向客户端返回数据

2、可以理解为,是客户端有需要才会进行通信

Socket:采用服务器主动发送数据的方式

1、即建立网络以后,服务器可主动发送消息给客户端,而不需要客户端向服务器发送请求

2、可以理解为,是服务器有需要才会进行通信

你可能感兴趣的:(Socket)