socket实现TCP/IP通信

1.在开始之前

1.1 TCP/IP协议

1.1.1 TCP/IP概述

在互联网通信中,计算机之间的通信需要依赖互联网通信协议,常见的网络通信协议有TCP/IP协议、IPX/SPX协议、NetBEUI协议等。TCP/IP就是其中一个网络通信协议,而我们今天要利用的socket就是依赖TCP/IP完成通信的。

实际上,TCP/IP并不是单独一个协议,而是一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

在网络通信协议中,TCP/IP的优势在于具有很强的灵活性,支持任意规模的网络,几乎可连接所有服务器和工作站。在使用TCP/IP协议时需要进行复杂的设置,每个结点至少需要一个“IP地址”、一个“子网掩码”、一个“默认网关”、一个“主机名”。

1.1.2 TCP/IP协议组成

TCP/IP在一定程度上参考了OSI模型和DoD模型,所以其组成一定程度上与二者十分相似。而在TCP/IP中,分层被分为四个部分,分别是应用层、传输层、网络层和数据链路层。

下图展示了四个部分分别对应的TCP/IP协议簇中的几个不同协议

1.应用层

应用层是TCP/IP中的第一层,是直接为应用进程提供服务的。对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,比如邮件使用的SMTP协议,万维网的http协议。

应用层能加密、解密、格式化数据,还可以建立或解除与其他节点的联系,这样可以充分节省网络资源。

2.运输层

运输层是TCP/IP的核心层,TCP协议的UDP协议共同组成了TCP/IP的运输层

3.网络层

网络层:网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能

4.网络接口层

在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层。所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。

1.1.3 TCP协议

TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。为了保证传输的可靠性。

TCP协议在UDP基础之上建立了三次对话的确认机制,即在正式收发数据前,必须和对方建立可靠的连接。TCP数据包和UDP一样,都是由首部和数据两部分组成,唯一不同的是,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

1.2 socket套接字

1.2.1 socket概述

套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。

可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用这个相同的域互相之间用Internet协议簇来进行通信

1.2.2 socket工作流程

1.服务器监听

服务器首先启动监听端口动态,监听端口的连接请求

2.客户端发起请求

客户端将向目标Ip的指定端口发起请求。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端接字提出连接请求

3.连接确认,建立连接

当服务器端套接字监听到或者说接收到客户端套接字的连接请求,就会响应客户端套接字的请求,建立一个新的线程,并把服务器端套接字的描述发送给客户端。一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,接收其他客户端套接字的连接请求

1.2.3 socket()函数

对于C/C

你可能感兴趣的:(笔记,网络,python,socket,linux)