这个技术时隶属于系统知识中的,目前 99.999% 的程序员的理解都很浅显。
但是这部分的知识是深入学习必备的原理知识之一。
学习资料
《TCP/IP 详解》
更易读的书籍:
《TCP/IP 网络编程》
《图解 TCP/IP》
《The TCP/IP Guide》
抓包相关的工具
《Wireshark 数据包分析实战》
这个技术时隶属于系统知识中的,目前 99.999% 的程序员的理解都很浅显。
但是这部分的知识是深入学习必备的原理知识之一。
《TCP/IP 详解》
更易读的书籍:
《TCP/IP 网络编程》
《图解 TCP/IP》
《The TCP/IP Guide》
《Wireshark 数据包分析实战》
TCP/IP 指传输控制协议/网际协议(Transmission Control Protocol / Internet Protocol)。
一、TCP 使用固定的连接
TCP 用于应用程序之间的通信。
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方握手之后,
TCP 将在两个应用程序之间建立一个全双工的通信。
最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。
再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用于以响应时间来限流的中间件。
更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。
本文中会出现一些缩写,因为篇幅问题,无法每个都进行解释,如果你不明白它的含义,请自己去搜索了解,做一个主动寻求知识的人。
TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制。
Loopback Interface 是回环接口,可允许运行在同一台主机上的程序和服务器程序通过TCP/IP进行通讯。
loopback 口是给路由器赋予一个具有IP地址的逻辑接口,这个接口的特点是总是up,不会随着物理接口的状态而变化。
一个路由器有两个Token ring口,路由器启动了DLSw与远方路由器通信。
DLSw需要穿过WAN建立一条隧道传输用户数据,在路由器上要定义这条隧道的local ip address和remote ip address。
在定义local ip地址时,选用任何token ring接口地址都不是太好,因为物理接口可能由于各种原因down,这就影响了另外的token ring口通过DLSw的通信。所以,在这种情况下,用loopback口的IP地址作为local ip是很好的。
TCP 是一种提供可靠性交付的协议。
也就是说,通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。
但是在网络中相连两端之间的介质,是复杂的,并不确保数据的可靠性交付,那么 TCP 是怎么样解决问题的?
TCP 是通过下面几个特性保证数据传输的可靠性:
序列号和确认应答信号
超时重发控制
连接管理
滑动窗口控制
流量控制
拥塞控制
TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。
无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。
在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。
同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式,所以需要四次挥手关闭连接。
网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。
首部的结构由协议的具体规范详细定义。