快速理解TCP/IP协议

快速理解TCP/IP协议

为了弄清楚TCP/IP协议,相信大家已经阅读了不少博文与教程,这里不再继续去说那些让人头晕的原理与过程,只是以一种简单易懂的傻瓜方式教大家去理解TCP/IP协议,并学习怎么去一步步实现该协议。具体的理论与协议的详细过程请大家参考其他博文与教程。

首先大致说一下计算机与计算机之间的通信过程。计算机之间的通信是通过一条通信线路实现相互之间的信息传输与数据交换。最早的计算机与计算机之间的通信是通过有线传输,后来发展到无线传输。发展到今天,不管有线还是无线,其基本的通信原理还是不变的。

对比人与人之间的交流,计算机之间的交流其实与人也一样。某一台计算机要想实现与另外一台计算机的交流,首先需要找到该计算机。就像一个人与另一个人交流,首先需要定位到该人物,我们通常通过姓名、外观、体征等各种信息来定位和判断我们要交流的对象。在计算机的世界里,我们通过IP地址来定位某一台计算机,因为全世界范围内所有的IP地址都是唯一的,例如192.168.13.12,对于我们来说,这个IP就是小段数字和字符的集合,但是,对于计算机来说,这就是唯一的标识,就像指纹一样,独一无二。定位到了计算机,接下来就是实现交互。注意,计算机与外界的所有的交互信息的发出都是通过端口完成。一台计算机的信息通过IP找到另一台计算机,然后通过另一台计算机的某一个端口进入到另一台计算机。

至此,对于理解TCP/IP协议所需要了解的基本信息就已经足够。总结出计算机通信的关键两点:IP和端口。

接下来就是程序实现,咱们先从服务器开始,所用的编程语言时JAVA,服务器的作用简单来说就是接受客户端访问并给予相应的响应,所以,服务器端的编辑就很简单了,两步:
1、绑定端口
2、监听端口
具体如下:
快速理解TCP/IP协议
接下来用TCP测试工具测试:
快速理解TCP/IP协议
该工具左边是客户端,用于测试服务器,右边相反。IP地址(IP Address)为localhost或者127.0.0.1都可以,端口(port)为绑定的6066。然后先运行程序:
快速理解TCP/IP协议
如下图,控制台没有任何反应,原因是当程序运行到s.accept()时,如果端口没有计算机来访问,将一直处于端口监听状态,不会往下执行,接下来我们启动客户端访问,看看有什么变化,点击测试工具的connect按键:
快速理解TCP/IP协议
看到了吗?程序执行完成了。这就是服务器端接受客户端访问的过程。但是这么看不够明显,接下来,我们把程序稍作修改,让他更加直观一些:
快速理解TCP/IP协议
启动程序:
快速理解TCP/IP协议
在客户端访问之前,端口将一直处于监听状态。接下来启动测试工具:
快速理解TCP/IP协议
控制台输出结果如下:
快速理解TCP/IP协议
不断点击connect和disconnect,直到循环结束,关闭接口,我们同时打印出了服务器端口内容如:Socket[addr=/127.0.0.1,port=60068,localport=6066]
这里的中括号里面的addr是客户端主机的IP,port是客户端主机端口,localport是服务器的端口。

以上就是服务器端的过程。接下来演示一下客户端过程,在这之前,先回顾一下服务器TCP过程:绑定端口、监听端口。
同服务器一样,客户端也是两步:
1、获取服务器IP和端口
2、绑定服务器IP和端口
如下:
快速理解TCP/IP协议
设置测试工具的服务器端口:
快速理解TCP/IP协议
运行程序:
快速理解TCP/IP协议
接下来,修改程序,向服务器发送一些数据(数据量不要太大,防止内存溢出!!!),让过程更直观:
快速理解TCP/IP协议
重新运行程序:
快速理解TCP/IP协议
至此,TCP/IP协议过程演示结束,后边更加复杂的操作都是在此基础上的改造。