网络协议的认识
网络协议
网络协议是计算机网络中,为了使两个进程可以互相通信、进行数据交换,而建立的规则、标准或约定的集合。它描述了进程之间如何进行信息交换数据。
协议分层
国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:
物理层(Physics Layer)
数据链路层(Data Link Layer)
网络层(Network Layer)
传输层(Transport Layer)
会话层(Session Layer)
表示层(Presentation Layer)
应用层(Application Layer)
【物理层】:以太网 、 调制解调器 、 电力线通信(PLC) 、 SONET/SDH 、 G.709 、 光导纤维 、 同轴电缆 、 双绞线等。
【数据链路层】:Wi-Fi(IEEE 802.11) 、 WiMAX(IEEE 802.16) 、ATM 、 DTM 、 令牌环 、 以太网 、FDDI 、 帧中继 、 GPRS 、 EVDO 、HSPA 、 HDLC 、 PPP 、 L2TP 、PPTP 、 ISDN、STP 等。
【网络层协议】:IP (IPv4 、 IPv6)协议(网际协议) 、 ICMP(Internet互联网控制报文协议)、IGMP (Internet组治理协议)、 ICMPv6、IS-IS 、 IPsec 、 ARP 、 RARP等。(高速公路)
【传输层协议】:TCP(传输控制协议) 、 UDP (用户数据报协议)、 TLS 、 DCCP 、 SCTP 、 RSVP 、 OSPF 等。(高速公路上的卡车)
【应用层协议】:DHCP 、DNS 、 FTP 、 Gopher 、 HTTP、 IMAP4 、IRC · NNTP 、XMPP 、POP3 、 SIP 、 SMTP 、SNMP 、 SSH 、TELNET 、 RPC 、 RTCP 、 RTP 、RTSP、 SDP 、 SOAP 、 GTP 、 STUN 、 NTP、 SSDP 、 BGP 、 RIP 等。(卡车携带的货物)
其中,TCP/IP 协议毫无疑问是最重要的一个,作为互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开TCP/IP协议。TCP/IP其实是个协议组,可分为三个层次:网络层、传输层和应用层。
在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。而另一方面, TCP在不可靠的IP层上提供了一个可靠的运输层。为了提供这种可靠的服务, TCP采用了超时重传、发送和接收端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。
具体如下图所示:
协议定义
【FTP】
FTP定义
【HTTP】
HTTP定义
HyperText Transfer Protocol 超文本传输协议,是建立在TCP协议之上的一种应用,HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。HTTP协议是建立在请求/响应模型上的。
工作流程
1、客户端与服务器建立连接;
2、建立连接后,客户端发送请求给服务器;
3、服务器收到请求后,给予相应的响应信息;
4、客户端收到服务器返回的信息后,断开连接。
总结
它属于应用层协议,其传输都是被包装成TCP协议(传输层),在两台电脑(通常是Web服务器和客户端)之间传输信息。可以用Socket实现HTTP。
【Socket】
Socket定义
“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。它是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
连接过程
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字连接步骤如下:
1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求;
2、客户端请求:客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求;
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
总结
Socket本身并不是协议,而是TCP/UDP传输层协议(通常情况下Socket连接就是指TCP连接)的API。Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。通过Socket,我们才能使用TCP/IP协议。
【TCP】
TCP定义
连接过程
第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开)。
【UDP】
UDP定义
连接过程
总结【TCP】和【UDP】的区别
虽然TCP和UDP都是用来传输其他协议的,但其实是存在区别的:
1、TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性。而且当多个数据报时,只有在接收方收到ACK确认以后,发送方才会继续传送其他信息,否则将一直等待直到收到确认信息ACK为止。
而UDP不提供数据传送的保证机制。UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,而且也当接受突发性的多个数据报时,UDP无法确保数据发送和接收的顺序;
2、因为不必进行收发数据的确认,所以UDP的开销更小,数据传输速率更高,实时性更好。
Socket连接与HTTP连接区别
Socket是对TCP/IP协议的封装和应用。或者说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输;HTTP是应用层协议,主要解决如何包装数据。
TCP/IP与HTTP协议的关系
WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。所以说,HTTP协议是基于TCP连接的。