计算机网络中为什么在IP协议是无连接的前提下,TCP协议可以面向连接?
TCP报文段就包含在IP数据报的数据部分里面,怎么做到的?当一个个TCP报文从漫游的IP数据报身上金蝉脱壳的时候,它们之间的顺序等属性可能都变化了,它们又是如何维系协议规定的面向连接功能呢?
点对点通信P2P(Peer-2-Peer)
面向连接(Connection-Oriented)解决的是点对点通信,两者(Two Sides)之间的通信,或者单播(Unicast)通信。疫情期间,老王被封在1号楼,老婆被封在2号楼。为了防止老婆饿晕,在两楼之间甩一根绳子,老王将黄瓜、胡萝卜、土豆栓在绳上,输送给老婆。老婆有时也将可乐、香烟拴在绳子上运给老王,这是点对点通信。
点对多点通信P2MP(Peer-2-Multiple Peer)
无连接(Connectionless)解决的是点对多点的通信,通常称之为组播(Multicast)通信,广播(Broadcast)是一种特殊的组播,是组播的一个子集。老王家里没有吃的,饿得眼睛都绿了,拿起高音喇叭唱山歌,小区的邻居都可以听到,这是点对多点通信。
互联网世界的通信,看似繁复芜杂,其实就是以上两种通信的现实应用。
以上两种通信的应用,都由TCP/IP这个神奇的协议来承载运输。充分说明,TCP/IP既能实现点对点的通信需求,也能实现点对多点的通信需求。TCP/IP是通过什么组合来实现以上通信需求的呢?
无连接IP + 有连接TCP +无连接的应用
由于TCP只能提供P2P通信,所以这个组合只能提供P2P通信。这种组合占互联网通信的绝大多数。具体应用有各种APP,抢菜的、刷疫情数字的、刷小视频的、聊天的、理财的、股票交易的,太多了,不一一列举。
无连接IP + 无连接UDP +有连接的应用
由于三个组合有一个是有连接的,那么这个组合就是有连接的,而有连接只能提供P2P通信。具体应用有IP电话、微信视频/语音聊天、直播等。
无连接IP + 无连接UDP +无连接的应用
由于三个组合全部是无连接的,那么这个组合就是无连接的。无连接的组合不仅可以P2P通信,还可以P2MP通信。具体应用有IPTV、股市行情推送、ARP广播、DHCP广播、任何组播等。如果你有兴趣写一个这样组合的通信小程序,可以从一个主机A发消息给另外一台主机B。如果B开机就能收到,如果B关机,消息就消失在网络里。
上文的组合容易引起歧义,无连接的IP,是不是还有有连接的IP?
没有的,IP天生是无连接的。此外,TCP天生是有连接的,UDP天生是无连接的。只有应用不是天生的,可以有连接,也可以无连接。
无连接IP、UDP,最大的特征就是一锤子买卖,每一个报文只发一次,丢就丢了,不管,满脸写满暴躁。
有连接TCP、有连接的应用层,每发出一个报文,会耐心等待对方的确认。如果发一次没有收到对方的确认,会超时重新发送,直到收到对方确认,或者到达重传上限而放弃,然后通知客户连接断了。客户如果刷新,TCP开始新一轮的连接建立,重复上一个故事。如果客户不刷新,就躺平。
当TCP通信正在进行时,IP包的丢失,意味着TCP报文的丢失,发送方会用周期性的重传予以补偿,所以IP包的丢失没有什么可怕的,大不了传输效率下降,但是TCP连接依然健在。
但是,如果TCP通信正在进行,双方任意的一方IP地址发生变化、或者端口号发生变化,这个TCP连接还能通信吗?
不能了,TCP连接就会断开。
当然通信进行时,端口号通常是不会变化的,除非操作系统老爷爷脑子进水了,但是IP地址的变化是时有发生的。比如你的手机由于信号问题,从Wi-Fi切换到4G,那么IP地址就会从局域网的IP切换成4G网络的IP地址,那么你正在进行的任何TCP通信都会断开,这点你很难在APP上发现。因为APP会在断开的时刻,选择使用新的IP地址重连服务器,然后再打开要刷新的页面。
无论是移动通信的漫游,还是Wi-Fi的漫游,如果不想让电话中断、视频中断,最最核心的要素是保持手机IP地址的不变。如何保持IP地址不变?可以从大二层技术找到灵感。
作者|车小胖谈网络|公众号