今天我们就来谈谈关于TCP/IP的一些内容吧。
众所周知,网络的五层模型中,自上而下依次是应用层、传输层、网络层、数据链路层以及物理层。其中,应用层比较有代表意义的协议是HTTP协议,传输层又以TCP协议最有说服力,而网络层则是IP协议居之。
IP协议是Internet成为一个允许连接不同类型的计算机,和不同OS的网络。它只保证计算机能发送和接收分组数据。IP协议负责将message从一个主机传送到另外一个主机,这些message在传送的过程中,被分割成为一个一个的数据包。由于IP协议只负责传输数据,因此,它并不能够解决数据分组在传输过程中可能出现的一系列问题。
那么,又由谁来解决这其中的一些问题呢?对的,它来了。
TCP协议,即远程控制协议,顾名思义,它是端对端的协议。TCP协议,会让计算机之间建立连接,用于发送和接收数据的虚拟链路。TCP相对于UDP来说,它的一大优点在于提供了安全可靠的数据传输机制,它负责收集IP协议的数据包,并将其按适当的次序放好传送,接收端接收后,再将其正确的还原。
那么,TCP如何确保消息能够在通信实体之间数据不丢失呢?
这就要说到TCP中比较重要的消息重发机制了。当A通信实体发送一个消息给B通信实体后,A通信实体需要收到B通信实体的确认消息,如果没有收到B通信实体的确认消息,则会再次重发刚才发送的消息。
由此可见,TCP确保了数据传输的可靠性、完整性和正确性。连接上Internet的计算机,需要安装TCP来提供可靠且无差错的通信服务。
根据我们的老前辈们的总结,接下来,我给伙伴们见识一下建立一个TCP连接,需要经历的“三次握手”:
(1)第一次握手:客户端发送syn包,(syn=j)到服务端,并进入SYN_SEND状态,等待服务器确认。
(2)第二次握手:服务端收到syn包,必须确认客户端的syn(ack=j+1),同时,自己也发送一个syn包(syn=k),即SYN+ACK包,此时服务端进入SYN_RECV状态。
(3)第三次握手:客户端收到服务端的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务端进入ESTABLSHED状态。
至此,三次握手完毕。
(值得注意的是,握手过程中传送的包,并不包含数据,三次握手完毕后,客户端和服务端才正式开始传送数据。)
刚才有提及到UDP,索性在这里就和大家一起探讨吧。
UDP,全称为User Datagram Protocol,即用户数据报协议。主要用来支持那些需要在通信实体间传输数据的网络连接。多用于实时性很强的应用场景中,如网络游戏、视频会议等。有时候,UDP的快速在Internet中更具魅力。
和TCP有很大不同,UDP是一种面向非连接的协议。面向非连接是指在正式通信前,不必与对方先建立连接,它不需要管对方的状态就可直接发送。至于对方是否可以接收到这些数据内容,UDP无法控制。因此,UDP是一种不可靠的协议。
至此,伙伴们是否觉得UDP毫无用处呢?
其实不然,UDP主要是用来完成网络数据流和数据报之间的转换。在消息的发送端,UDP将网络数据流封装成数据报,然后将数据报发送出去;在信息的接收端,UDP将数据报转换成实际的数据报内容。UDP能够实时高效传输,在于它不需要维护状态,是不能产生数IO流。
UDP虽然在数据的可靠性有其缺陷,但它的面世的最终目的,却是更加讲究实时性。它更多的是适用于一次只传输少量数据,对可靠性不高的应用场景。UDP对传输速度很高的应用,如语音和实时视频传输,这些应用数据量很大,虽然在传输过程中存在少量的音节或像素错误,但由于传输速度非常快,以至于用户无法察觉,并可以接受。
关于TCP/IP的一些事儿
最新推荐文章于 2024-04-30 19:07:02 发布