TCP与UDP是属于第四层的运输层的协议,也是整个TCP/IP协议族的核心协议,并且TCP与UDP是同级的;
TCP是可靠发送数据,他本身是基于流的发送,并且为了安全他发送数据前会去创建连接,如果传输过程中有遗失,会自动重传遗失资料;
UDP是一层简单的封装,几乎不做任何处理,直接交给IP发送数据,所以他是基于报文形式的;
TCP与UDP是可以确定端口的服务,同时TCP与UDP的关口是平行的,TCP:80与UDP:80并不是一个进程;
TCP协议:
是一个运输协议,是属于很复杂的协议,他的功能主要是面向流,管理和创建链接,处理打包数据,属于可靠的传输协议,与UDP这个"大马虎"不同;
那么就从他的功能上来说, 面向流;
Java程序员都会知道流是什么,具体也不介绍他了,可能大家都知道Java上讲流是很底层的管道,但是这个管道究竟通道哪里,可能很少人会关心,
现在告诉大家他就是传到TCP协议这里,然后从改造成数据段的;
简单说下他的生命周期:
发出方: 程序:(发送流)-> TCP:(接收流) ->TCP:(改造成数据段) -> ip(接收数据段) -> ip(封装数据报并发出)
接收方: ip(提取出段)-> TCP:(提取出流) ->程序(接收流)
大约意思就是这样;
数据段:怎么说呢,大家知道流传递的是字节吧,TCP将他们按一定长度划分成数个或者是数十个报文,我们称之为段;
那么下一个就是谈论他的安全可靠,这个要从两方面来说;
第一个方面就是连接,大家知道TCP协议在传送数据前会先建立一个链接,然后如果正确的对应上,能够返回一个回应;
当然,连接并不是这么简单的东西,话说他很复杂,他甚至包括传输数据,而且一般来讲TCP管理的是多条连接,并且给每个连接一个标识,让我们来确定的知道每个连接的错做;
TCP协议管理着创建链接以及停止连接,如何建立连接刚才刚有说过,就说下终止连接:任何一方都可以关闭一个TCP连接,要求双方发送一个FIN信号关闭自己的通讯频道。一方可以在另一方之前关闭,或者双方同时关闭TCP连接。因此,当一方发送一个FIN信号时,另一方可发送“FIN+ACK”,开始关闭自己一方的通信并且确认收到了第一个FIN信号。发送第一个FIN信号的人接下来再发送一个“FIN+ACK”信息,确认收到第二个FIN信号。另一方就知道这个连接已经关闭了,并且关闭了自己的连接。发送第一个FIN的人没有办法收到最后一个ACK信号的确认信息。这时它会进入“TIME_WAIT”(等待时间)状态并启动一个定时器,防止另一方没有收到ACK信息并且认为连接仍是打开的。一般来说,这个状态会持续1至2分钟。
第二个方面就是PAR,重传确定协议
发报文时会起到定时器 ,如果对方数据丢失就会发不了关于定时器的回复,那么定时器超过时间被视为过期, 然后重传;
这属于简单的理解;
更有深度的就是通过字节数来判断,通过四种模式:1.已发送且得到确认的字节 2.已发送但尚未得到确认的字节 3.尚未发送但已做好准备接收
4.尚未发送但未准备接收;
这样可以计算出何时何段字节丢失,然后又将丢失的地方重传;
重传;
TCP/IP协议:TCP与UDP的理解
最新推荐文章于 2022-07-19 17:32:27 发布