初学TCP/IP

来源:互联网 发布:codeforces 知乎 编辑:程序博客网 时间:2024/06/02 00:58

写在最前

最近开始学习通信相关内容,在网络中收发信息时,对消息进行处理需要一定的格式,例如向服务器发送请求,有些是密码,有些是用户名,服务器会对收到的消息进行处理,提取出相应的内容。那大家所用的格式不同,就会造成消息传达不到位。不同的用户之间有不同的格式,是什么使得大家发送消息无障碍?协议就出现了。为了使数据在网络上从源到达目的,网络通信的参与方必须遵循相同的规则,如怎么样建立连接、怎么样互相识别等,这些规则,就是协议。
学习网络通信最开始接触的就是TCP/IP协议,刚开始学习,跟大家分享一下。

什么是TCP/IP协议?

TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

TCP/IP的分层

TCP/IP这个是个协议族,就说明有很多协议。每个协议有自己对应的工作,我们根据每个协议的工作范围来划分“层”,大致可分为四层
四个层分别是(由上到下):应用层、传输层、网络互连层、网络接口层。
分层将各个层的作用划分的很细,每一层只需要实现自己的功能,提供接口,为上层提供服务。当函数改变时,只要接口不变,就不会影响到上层,也便于管理。
具体功能如下图
这里写图片描述

TCP经典的三次握手和四次挥手

建立连接

为了确保信息准确到达,TCP采用了三次握手协议。
三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互。
1)客户端发送SYN(SEQ=x)报文给服务器端,等待服务器确认;
2)服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,回应可以接受的状态;。
3)客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,了解对方可以接受,发送数据。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

断开连接

所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:
这里写图片描述
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

TCP/IP协议的特点与不足

特点

(1)TCP/IP协议不依赖于任何特定的计算机硬件或操作系统,提供开放的协议标准,即使不考虑Internet,TCP/IP协议也获得了广泛的支持。所以TCP/IP协议成为一种联合各种硬件和软件的实用系统。
(2)TCP/IP协议并不依赖于特定的网络传输硬件,所以TCP/IP协议能够集成各种各样的网络。用户能够使用以太网(Ethernet)、令牌环网(Token Ring Network)、拨号线路(Dial-up line)、X.25网以及所有的网络传输硬件。
(3)统一的网络地址分配方案,使得整个TCP/IP设备在网中都具有惟一的地址
(4)标准化的高层协议,可以提供多种可靠的用户服务。

不足

(1)它在服务、接口与协议的区别上就不是很清楚。一个好的软件工程应该将功能与实现方法区分开来,TCP/IP恰恰没有很好地做到这点,就使得TCP/IP参考模型对于使用新的技术的指导意义是不够的。TCP/IP参考模型不适合于其他非TCP/IP协议簇。
(2)主机-网络层本身并不是实际的一层,它定义了网络层与数据链路层的接口。物理层与数据链路层的划分是必要和合理的,一个好的参考模型应该将它们区分开,而TCP/IP参考模型却没有做到这点。