浅谈TCP/IP协议
TCP/IP协议是一个在网络中使用广泛的协议,无论是局域网还是广域网,同时也是开放式的协议,几乎所有的网络设备都支持TCP/IP协议通信,甚至也可以使用高级语言通过Socket进行编程进行通信。无论是办公室的场合,还是工业现场都能看到TCP/IP通信的身影。
TCP/IP协议从字面上看分成两个协议,即TCP协议和IP协议,分别位于ISO/OSI参考模型的*4层和*3层,结构简单,但协议却不简单。因为我们都知道TCP是面向连接的,可靠的通信协议,然而IP协议却恰恰相反,它是不可靠的通信协议。这里需要强调一下,IP是网际协议Internet Protocol,而不能简单的理解成IP地址,因为对于大多数的工控工程师来说,IP地址是大家经常用到的,所以这样的想法是错误的。这里我就给大家解析以下,为什么两个看似矛盾的协议放在一起却出人意料的那么和谐!?
在ISO/OSI参考模型中,*三层IP的主要作用有两点,**点是选路,也就是我们常说的路由,帮助IP数据从一个网段路由到另一个网段,这时IP地址就有用了。*二点就是分片,作为工控工程师,我们在做以太网通信时,应该知道以太网数据帧的长度是46-1500Bytes,这是由以太网的物理特性决定的,通常1500Bytes被称为数据链路层的较大传输单元,即MTU。IP的数据报文从理论上较大可以传输64KB数据,但是在以太网上的传输数据长度却不能,所以IP数据报大于1500B时,即大于MTU,发送方的IP报文即会被分解成若干片,这样每一片都小于或等于MTU的大小。而接收方则对这些报文的分片进行重组。然而,由于可能网络中各种状况的出现,例如其中一片丢失,整个IP报就不能完成重组,整个IP报就会丢弃,所以IP报是不可靠的传输协议。
而TCP则时可靠的传输协议,在ISO/OSI参考模型中,TCP采用了尽量分片的方法,避免IP在MTU分片所造成的不可靠的数据传输,这样也就避免了IP分片所造成数传时的数据丢失,增加重传数据包的机率。我们都知道,TCP通信需要建立通信连接,也就是我们常说的3次握手,在握手的时候,双方就协商了MSS的大小,即Maximum Segment Size,也就是双方确定TCP较大分节长度。这个值用来告诉对方,能够发送TCP分节的大小。而这个值是取其链路层MTU大小减去TCP头部大小和IP头部大小,即MSS=MTU-TCP头部大小-IP头部大小。这样对于以太网的MSS的较大长度为1500-20-20=1460Bytes。这样TCP的数据每次发送都不会**过1460B,到了数据链路层不会**过MTU的大小,那么IP报自然不会进行分片传输,这样就减少了TCP重传的机率。
TCP可靠的数据传输,除了MSS的协商机制,那么还有一个重要的特性就是序列号确认机制,这两个特性基本上可以保证数据的可靠传输。在TCP分节报文中,包含顺序号和应答号的字段,数据重传和数据应答机制的基本前提就是对每个传输字节进行编号,即顺序号Sequence Number。顺序号表示发送方已发送字节流的计数,接收方在成功接收到一个有效数据包后,发送一个确认应答数据包给发送方,应答数据包中包含的应答号Ack Number即指已接收的数据长度+1,或者说已接收到的数据中的最后一个字节的序列号+1,表示已期望接收的下一个字节的序列号。这个机制可以解决诸如数据在传输过程中破坏的问题,处理接收重复数据的问题,数据丢失的问题,以及处理接收端数据乱序的问题等等来保证可靠的数据传输。具体的大家可以查看TCP的协议手册。
这样TCP使用MSS,不仅避免IP的不可靠的数据传输,而且使用序列号确认机制,可以的实现可靠的数据传输,而利用IP协议,可以完成数据在网络中的路由,实现数据在网络中自由穿梭,这样就实现了TCP和IP的**结合!
shtxjd.cn.b2b168.com/m/