网络由下往上分为
物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,socket则是对TCP/IP协议的封装和应用(程序员层面上)。
了解3个东西:
1. TPC/IP协议是传输层协议,主要解决数据如何在网络中传输
2. HTTP是应用层协议,主要解决如何包装数据。
我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。
3. socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
函数有create、listen、connect、accept、send、read和write等等。
比喻:
HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
区别:
1. Http是短链接,http协议打开一个信息点的时候,信息读取完毕双方会自动断开。
socket是长链接,也就是说除非双方主动断开,否则,他不会自动断开。(一直不断也不好,有些死链接是问题。为了保持服务器资源的最大利用率,通常我们会要求双方通过定时的心跳方式来确认长链接的有效性.只要心跳不存在,服务器就可以及时剔除掉这些死链接。)
2. http只能走tcp,socket不仅能走tcp,而且还能走udp,这个是socket的第一个特点。
TCP连接的三次握手:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
TCP和UDP的区别:
1. TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;
2. UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。