网络七层由上往下分别为 物理层,数据链路层,网络层,传输层,会话层,表示层和应用层,其中物理层,数据链路层和网络层通常被称为媒体层,是网络工程师所研究的对象;传输层,会话层,表示层,应用层被称为主机层,是用户所面向和关心的内容。
三者本质上没有什么可比性。http协议是基于tcp连接的。tcp/ip是传输层协议,主要解决数据如何在网络中传输,而http是应用层协议,主要解决如何包装数据。我们在传输数据时,可以只使用传输层tcp/ip,那样的话,由于没有应用层,便无法识别数据内容,如果想要传输的数据由意义,就必须使用应用层协议,应用层协议有很多,有http, ftp,telnet等等,也可以自己定义应用层协议。web使用http做应用层协议,以封装http文本信息,然后使用tcp/ip做传输层协议将它发送到网络上。 socket是对tcp/ip协议的封装,socket本身并不是协议,而是一个调用接口,通过socket,我们才能使用tcp/ip协议
http 对应应用层
tcp/udp 协议对应传输层
ip协议对应网络层
一 什么是socket
socket 又称之为套接字 ,是系统提供的用于网络通信的方法。他的本质上并不是一种协议,没有规定计算机应当怎么样来传递信息,只是给程序员提供了一个发送消息的接口,程序员使用这个接口提供的方法,发送于接收消息
socket描述了一个ip,端口对。他简化了程序员的操作,知道对方的IP和port就可以给对方发送消息,再由服务器端来处理这些发送的消息。所以,socket一定包含了通信的双方,即客户端和服务端。
二 tcp
tcp是面向连接的,传输可靠(保证数据正确性和数据顺序),用于传输大量数据(流模式)速度慢,建立连接需要开销较多时间,系统资源
tcp是一种流模式的协议,是面向连接的也就是所,在持续连接的过程中,socket中收到的数据都是由同一台主机发出的,劫持什么的不考虑,因此知道保证数据是有序的到达就行了,至于每次读取多少数据并不关心
三 tcp 三次握手
所谓三次握手,是指建立一个tcp连接的时候,需要客户端和服务器总共发送3个包。3次握手的目的是连接服务器指定端口,建立tcp连接,并同步连接双方的序列号和确认好并交换tcp窗口大小信息。在socket编程的时候,客户端执行connect()时,将会出发三次握手
第一次握手 :客户端发送一个tcp的SYN标志位置为1的包,指定客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号字段里
第二次握手 : 服务器发挥确认包(ACK),即SYN标志位和ACK标志位都是1同时将确认序号设置为客户的序列号加1, 即X+1
第三次 : 客户端再次发送确认包 (ACK)SYN标志都是0 ,ACK标志为1,并且把服务器发来的ACK的序列号+1 ,放在确认字段中发送给对方 ,并且在数据段放写序列号+ 1
可以理解为
喂喂喂,能听到吗?
没问题,能听到就回一声
没问题
四 tcp 四次挥手
当service端收到client端的SYN连接请求报文后,可以直接发送SYN+ACK报文,其中ACK报文时用来应答的。SYN报文时用来同步的,但是关闭连接的时候,当service端受到Fin报文的时候,很可能不会立即关闭socket,所以只能先回复一个ACK报文,告诉client端,你打的FIN报文我收到了,只有等到我Service端的所有报文发送完了,我才能发送Fin报文,因此不能一次一起发送。故需要四步握手
五 udp
udp是面向无连接,传输不可靠的,用于少量数据(数据包模式),速度快的传输层协议。注意,udp传输的是数据报包,而tcp是流
udp是面向无连接的协议,只要知道接收端的ip和端口号,且网络是可达的,任何主机都可以向接受端发送数据。这时候,如果一次能够读取一个报文的数据就回乱套,
六 socket的通信过程
每一个应用或者说服务都有一个端口,比如dns的端口号为53, http的端口号80 都是对应一个应用或者服务的端口。我们能由DNS请求查询到信息,就是因为dns服务器时时刻刻都在监听53端口, 当收到我们的查询请求之后,就能够返回我们想要的信息,所以从程序设计上来说,应当包含以下步骤
1 , 服务器利用socket监听端口
2, 客户端发起连接
3, 服务返回信息建立连接,开始通信
4 客户端,服务端断开连接
七 socket原理
套接字socket是通信的基础。是支持tcp/ip协议的网络通信的基本操作单元,他是网络通信过程中端点的抽象表示,包含网络通信必须的五种信息:连接使用的协议,本地主机的ip地址,本地进程的协议端口, 远地主机的ip地址,远地进程的协议端口
应用层通过传输层进行数据通信的时候,tcp会遇到同事多个应用程序进程提供并发服务的问题,多个tcp连接或者应用程序进程可能需要同一个tcp协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
八 Socket连接
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。
套接字之间的连接过程分为三个步骤:
服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求
客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求
连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求
参考文章:http://www.jianshu.com/p/06f8b9111a56