控制计算机的运行,就看两个东西:1、每个cpu周期都是有意义且高效的吗?2、每个内存请求都能得到满足吗?
做到第一点就看程序写得怎么样算法怎么样会不会导致系统空转或低效。第二点就看内存规划使用得怎么样?说到底就是要控制系统的状态。不让系统失序,永远把它控制在受管理状态。所以要有状态机的思想。
Tcp有状态机,我们不用担心它的状态管理。我们需要担心的是我们自己的“状态”。比如网线断了系统会不会做出一些出格或离谱的举动。会不会影响数据安全?会不会影响业务安全?如果是医疗器械,会不会影响人身安全,如果是金融系统,会不会影响资金及银行,用户资料安全?我们需要严格控制程序只在它的自责范围内做事情。要严格限制程序的语义(后果),最小化程序的“职责”。不让它输出任何不是其职责范围的东西或影响。
我们需要关心的永远是程序的输出(特性)。这个是哲学,是正确的思维范式。绝不能为了小利丢了大局。抓了芝麻丢了西瓜。
Tcp的数据单元是数据段-segment。tcp基于这个做它的传输服务。一个数据段就是一个ip包。所以一个数据段相当于一个udp数据报。但是不能把它们等同于Ip包。因为ip包不是tcp/Udp层的处理对象。tcp,udp层的处理对象分别是segment与datagram,是自己的东西。滑动窗口,慢启动,一切流措施都是基于segment发明的,segment是基本的数据单元。是tcp的“原子”。
数据流向:线路比特->网卡数据帧(单元)->ip协议->tcp协议 |-> 进程(即用户区内存)。
Tcp具有非常强的流控制能力。要调整网络性能光调一端不行。主要是要处理它的错误。