计算机网络(十三):TCP&UDP编程

1、TCP套接字编程

即解决网络应用程序如何实际编写的问题。
网络应用程序的核心是由一对程序(客户机程序和服务器程序),位于不同的端系统中,当运行这两个程序时,创建了一个客户机进程和一个服务器进程,同时他们彼此之间通过从套接字读出和写入数据进行通信。
开发者开发一个网络应用,主要是编写客户机程序和服务器程序的代码。
网络应用程序有两类,一类是网络应用程序,由RFC所定义的标准协议的实现。当客户机程序或服务器程序实现了由某RFC定义的协议时,应该使用与协议相关的端口号;另一类是专用的网络应用程序。客户机程序和服务器程序使用的应用层协议不必符合任何现有RFC,不能使用已经在RFC中定义的周知端口号,服务器程序与客户机程序的端口号必须相同。
运行在不同机器上的进程彼此通过向套接字发送报文来通信。套接字socket是应用进程和TCP之间的门。
客户机负责发起与服务器的联系,服务器为了能对客户机发起的连接做出响应,必须实现准备好。即服务器程序不能处于睡眠状态,且必须先于客户机程序运行;服务器程序必须有某种套接字来面对来自运行在任意机器上客户机程序发起的连接。
当服务器进程运行时,客户机进程可以向服务器发起一个TCP连接。在客户机程序中,可以通过创建一个套接字来完成。当客户机创建他的套接字时,他指定服务器进程的地址,即服务器的IP地址和进程的端口号。一旦在客户机程序中生成套接字,客户机的TCP与服务器的TCP发起三次握手并建立一个TCP连接,这个三次握手过程发生在运输层,对于客户机程序和服务器程序是完全透明的。
当客户机进程发起访问,即向服务器的套接字发起访问时,服务器将创建一个新的套接字,为某个特定的客户机程序服务,这个套接字与原套接字基本相同,只是目的地址确定,仅负责该目的地址的通信,通信结束,套接字被回收销毁。
在握手的最后阶段,客户机套接字和服务器套接字之间已经存在一个TCP连接,因此,我们称新的套接字为服务器的连接套接字。
TCP连接是客户机套接字和服务器连接套接字之间的一个直接的虚拟管道,这个管道一直保持,直到某个进程将其关闭。客户机进程可以向他的套接字发送任意字节的数据,TCP保证服务器进程能够按发送的顺序接收到每个字节的数据。TCP因此在客户机进程和服务器进程之间提供了可靠字节流服务。
流是流入和流出进程的字符序列,对一个进程来说,每条流或者是输入流,或者是输出流。如果流是一条输入流,则他与该进程的某个输入源相连,如标准输入(键盘)或者一个套接字。
在TCP连接实际建立起来时,客户机必须先进行一次DNS查询,以便通过主机名获得主机的IP地址,但如果一开始就以服务器主机的IP地址作为通信地址,那么就不需要这一次的DNS查询。主机IP地址连通应用程序的端口号标识了服务器进程。

2、UDP套接字编程

UDP允许运行在不同机器上的两个或多个进程彼此通信。
UDP是一种无连接的服务,即在两个进程间没有创建管道时所需要的初始握手阶段。
因为UDP没有管道,所以当发送数据的时候,发送进程需要为这批字节附上目的进程地址,并且,该过程对于每批由发送进程所发送的字节都必须重复做。
目的地址由二元组组成:目的主机的IP地址和目的进程的端口号,将带有IP目的地址和端口号的一批字节数据称为分组。
UDP提供了一种不可靠的面向报文的服务模型,不能确保分组不会丢失。
即UDP的特点为:
①、两个进程之间没有进行初始握手,因此不需要欢迎套接字
②、没有流与套接字相联系
③、发送主机通过IP目的地址和端口号与他发送每批字节相联系,生成分组。
④、接收进程必须拆开每个所接收到的分组,获得该分组的信息字节
UDP可以先运行客户机,再运行服务器,因为客户机进程没有试图和服务器建立起连接。

发布了317 篇原创文章 · 获赞 194 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/105395761