Socket、TCP/IP、UDP、HTTP认识及区别联系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33208896/article/details/79162002

socket:应用程序通过一个双向的通信连接实现数据的交换,每一个端口都叫socket。 socket又称”套接字”,应用程序通过”套接字”请求网络中的服务器或者响应网络中的服务器;
TCP/IP:Transmission Control Protocol / Internet Protocol,TCP–传输控制协议,IP–网际协议,他们在分布在网络层(IP)和传输层(TCP);
UDP :User Datagram Protocolm,用户数据包协议,和TCP同处于传输层;
HTTP:HyperText Transfer Protocol,超文本传输协议,所有WWW都必须遵守HTTP协议,分布在应用层;
(m:上面这几种都在OSI七层模型之中,OSI从下到上依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)
区别与联系:
先说一下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是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,
但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;
而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,
发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议
也正由于上面的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。

Socket是什么呢?Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,
Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象。

HTTP协议是建立在请求/响应模型上的。HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法,HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开销。

放一张图吧:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_33208896/article/details/79162002