TCP/IP、Http、Socket的区别?
发布网友
发布时间:2024-09-29 13:56
我来回答
共0个回答
热心网友
时间:2024-11-16 10:37
首先介绍一下七层网络模型!
网络自下而上分为七层模型,即OSI(Open System Interconnection)模型,包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。这些层涉及到所有通信过程,以下图片展示了各层对应的协议和硬件。
应用层主要包括HTTP、SMTP、DNS、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP等协议,规定数据的传输协议。
TCP协议(传输控制协议)负责对数据传输进行控制,数据报文格式如图所示,关于TCP头部信息详细数据可以参考链接:(传输层)TCP协议。面试中,计算机网络的TCP三次握手和四次挥手是常见问题,面试官更希望听到怎样的回答?详细程度如何?
TCP(传输控制协议)面向连接,传输可靠、有序,传输大量数据。速度慢,对系统资源要求多,程序结构复杂。每条TCP连接只能是点到点,首部开销20字节。
UDP(用户数据包协议)面向非连接,传输不可靠,无序,传输少量数据。速度快,对系统资源要求少,程序结构简单,UDP支持一对一、一对多、多对一、多对多的通信方式,首部开销8字节。
TCP协议:数据在网络中的传输;对应于传输层;IP协议:对应网络层;数据在网络中的传输;TCP/IP:解决数据如何在网络中传输;HTTP:如何包装数据;Socket是对TCP/IP协议的封装,本身不是协议,而是调用接口(API),通过Socket,我们才能使用TCP/IP协议。
Http连接:http连接就是所谓的短连接,客户端向服务器发送一次请求,服务器端响应后连接即会断掉。
应用程序要网络通信,就得利用套接字,设置对端的IP地址+端口号(IP和端口就是Socket的基本规则),实现数据的发送与接收。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个Socket。例如,主机A要连主机B,主机A就要设置主机B的IP+端口。
什么是TCP连接的三次握手?TCP提供了连接的一端结束发送后,还能接收来自另一端数据的能力,也就是所谓的半关闭。
TCP是全双工的,客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息。半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不能给A发,即不同时,为半双工。单工为只能A给B发,B不能给A发;或者是只能B给A发,不能A给B发。
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
我们假设A和B是通信的双方。我理解的握手实际上就是通信,发一次信息就是进行一次握手。
在三次握手之后,A和B都能确定这么一件事:我说的话,你能听到;你说的,我也能听到。这样,就可以开始正常通信了。
PS:这里补充一下TCP三次握手和四次挥手的详解。
三者从本质上来说没有可比性!TCP是网络传输协议,HTTP是超文本传输协议;HTTP是应用层协议,定义的是传输数据的内容以及格式的规范,主要解决如何包装数据。
TCP是底层通讯协议,定义的是数据传输和连接方式的规范,也可以说,TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,TCP对应与传输层,而HTTP对应于应用层,所以HTTP协议是建立在TCP协议之上的~Socket可以支持不同的传输层协议(TCP或UDP),socket则是对TCP/IP协议的封装和应用(程序员层面上)。当使用TCP协议进行连接时,该Socket连接就是一个TCP连接,Socket是发动机,提供了网络通信的能力。
HTTP底层是利用TCP/UDP协议传输的,所以支持HTTP也就一定支持TCP/UDP;HTTP是无状态的短连接,而TCP是有状态的长连接。
PS:TCP/IP、HTTP、Socket的面试题TCP握手为什么刚好是三次?TCP建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号。序列号能够保证数据包不重复、不丢弃和按序传输。
不使用「两次握手」和「四次握手」的原因:
两次握手:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠地同步双方序列号;
四次握手:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。
了解WebSocket吗?长轮询和短轮询,WebSocket是长轮询。
具体比如在一个电商场景,商品的库存可能会变化,所以需要及时反映给用户,所以客户端会不停地发请求,然后服务器端会不停地去查变化,不管变不变,都返回,这个是短轮询。
而长轮询则表现为如果没有变,就不返回,而是等待变或者超时(一般是十几秒)才返回,如果没有返回,客户端也不需要一直发请求,所以减少了双方的压力。
参考链接HTTP协议包括哪些请求什么是TCP的保活机制?定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP保活机制会开始作用,每隔一个时间间隔,发送一个探测报文,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的TCP连接已经死亡,系统内核将错误信息通知给上层应用程序。
PS:1个很有意思的问题~
首先,我们要知道TCP是全双工的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息。而半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不能给A发,即不同时,为半双工。单工为只能A给B发,B不能给A发;或者是只能B给A发,不能A给B发。