基础知识
计算机的网络通信可归结为网络中层与层的通信。
网络分层:网络应用开发人员一般将网络分为4层:
- 物理层、数据链路层、
- 网络层。
- 传输层。
- 应用层(最顶层)。
分层并不是在物理上的分层,而是逻辑上的分层。
网络层建立的是主机与主机之间的通信,而传输层则建立了端口与端口之间的通信。这样,一旦确定了主机和端口号之后,你就可以实现程序之间的通信了。
IP地址、端口号
Internet使用IP地址来标识计算机的网络地址,使用端口号来识别不同计算机上的进程,所以通过IP地址+端口号的方式就可以唯一的标识网络上特定计算机的特定进程(应用程序)。
主机用端口号来标识不同的程序(进程),端口号是一个0到65535之间的整数,其中0到1023的端口号已被系统占用,用户只能选择大于1023的端口号来标识程序。
MAC地址
一个主机(电脑手机等)会有一个MAC地址(Madia Access Control Address),也叫物理地址,由网卡决定,他是全球唯一的、固定的。
IP地址可以变换,但MAC地址基本上不会改变。IP间的通信依赖MAC地址。
在局域网中,就可以动态维护一个MAC地址与IP地址的映射关系,根据目的IP地址就可以寻找到机器的MAC地址进行发送 。
DNS 负责域名解析
DNS(domain nname system)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务,即可以通过域名查找IP地址,也可以从IP地址反查找域名。
URL、URI
URL(Uniform Rescource Locator ,统一资源定位符)、URI(Uniform Resource Identifier,统一资源标识符)
URI用字符串表示某一互联网资源,而URL表示资源的地点即互联网上所处的位置,可见URL是URI的子集。通常URI和URL是一样的,不用刻意做区分。
一个URI示例:
https://www.dedao.cn/search/result?q=莫言
主机间进程(应用程序)通信
主机A中的程序和主机B中的程序只有只有使用了相同的协议,他们之间才可以正常通信。
有了地址,有了通信协议,我们就可以使用嵌套字(Socket)来进行通信了。两个程序之间的数据传输是通过嵌套字来完成的。我们可以将嵌套字理解为网络进程通信过程中所使用的一段缓冲区。
网络编程是为了实现通过网络协议,使本地计算机可以直接或间接地与其他计算机进行通信。目前(2014年)较为流行的网络编程模型是客户/服务器(Client/Server)结构。在通信的双方中,一方作为服务器等待客户提出请求并给予响应,另一方客户端在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。
与HTTP协议关系密切的协议:IP、TCP、DNS
负责传输的IP协议
按层次分,IP(Internet protocol)网际协议位于网络层。IP协议的作用就是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件,其中两个重要的条件是IP地址和MAC地址(Madia Access Control Address)。
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可以变换,但MAC地址基本上不会改变。IP间的通信依赖MAC地址。
在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时,会采用ARP协议(Address Resolution Protocol)。ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线。这种机制称为路由选择,有点像快递公司的送货过程。无论哪台计算机、哪台网络设备,他们都无法全面掌握互联网中的细节。
负责域名解析的DNS服务
DNS(domain nname system)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务,即可以通过域名查找IP地址,也可以从IP地址反查找域名。
确保可靠性的TCP协议
按层次分,TCP协议位于传输层,提供可靠的字节流服务。所谓的字节流服务是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够TCP协议能够确认数据最终是否送到到对方。
TCP/IP 协议族
TCP/IP是互联网相关的各类协议族的总称。所以,通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的。而HTTP属于它内部的一个子集。
特点
TCP(transmission control protocol,传输控制协议)是一种面向连接的保证可靠传输的(传输层)协议,通过TCP传输,得到的是一个按顺序写的、无差错的数据流。主要特点:
- 向应用程序提供面向连接的服务,两个需要通过TCP进行数据传输的应用进程之间首先必须建立一个TCP连接,并且在数据传输完成后要释放连接。
- 提供全双工数据传输服务,只要建立了TCP连接,就能在两个应用进程之间进行双向的数据传输服务,但这种传输只是端到端,不支持多播和广播。
- 提供面向字节流的服务,两个建立了TCP连接的应所进程之间交换的是字节流。发送进程以字节流形式发送数据,接受进程也把数据作为字节流来接受。端到端之间不保留数据记录的边界,即在传输层面上不存在数据记录的概念。
TCP的工作过程:
- 连接的建立:就是“发送一个校检包给对方然后互相确认”的过程。只有双方都接收到确认信号后,连接才能建立起来。 通信双方“建路”互通。
- 传输数据:利用TCP传输数据时,数据是以字节流的形式存在的。客户端与服务器端建立连接后,发送方首先要将发送的数据转化为字节流,然后才能将它发送给对方。发送数据时,可以通过程序将数据流不断地写入TCP 的发送缓冲区中。然后,TCP会自动从发送缓冲区中提取一定量的数据,将其组成TCP报文段发送到ip层,再通过IP层(网络层)的网络接口发送出去。 接收端从IP层接收到TCP报文段后,会将其暂时保存在接收缓冲区中,然后通过程序依次读取接收缓冲区中的数据,从而达到相互通信的目的。 客户端程序需使用write方法将数据写入发送端的缓冲区中,然后服务器端(接收端)使用read方法从其自己的缓冲区中读取数据。概括起来,TCP传输就是“对数据的读、写操作”。
- 断开连接:略。
UDP/IP 用户数据报协议
UDP(user data protocol,用户数据报协议)是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址和目的地地址,他在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间和内容的正确性都是不能被保证的。因此UDP是一种非常简单的协议,在网络层的基础上实现了应用进程之间端到端的通信。特点如下:
-
UDP是一种无连接协议,传输数据之前信源和信宿不需要建立连接,因此不存在连接建立的时延。在信源端,UDP传送数据的速度仅受应用程序生成数据的速度、计算机的能力和传输宽带的限制。在信宿端,UDP把每个数据报放在队列中,应用程序每次从队列中读取一个数据报。
-
由于传输数据不需要建立连接,也就不需要维护连接,包括收发状态等。这样一台服务器可以同时向多个客户机发送相同的数据,例如实现多播。
-
UDP数据报的首部很短,只有8字节,相对于TCP首部的20字节,开销小很多。
-
吞吐量不受流量控制算法的调节,只受应用软件生成数据的速率、传输宽带、信源和信宿主机性能的限制。
套接字 Socket。
传输层底层实现:socket。socket并不是一个实实在在的东西,而是运输层抽象出来的一个对象。
不同的运输层协议对socket有不同的定义方式。在UDP协议中,使用目标IP+目标端口号来定义一个socket;在TCP中使用目标IP+目标端口号+源IP+源端口号来定义一个socket。我们只需要在运输层报文的头部附加上这些信息,目标主机就会知道我们要发送给哪个socket,对应监听该socket的进程就可获得信息。
.NET中,System.Net.Socket
命名空间
该类封装了为进行网络通信而设计的一组公共函数。在 .NET中,System.Net.Socket
命名空间为开发人员提供了开发基于Socket类的网络通信程序的一些类,包括Socket类、TcpClient、TcpListener类和UdpClient类,如果开发基于TCP/IP的网络通信程序,可以使用TcpClient、TcpListener类和UdpClient类, 使用上且比较简单;如果为了提高效率或者采用其他网络通信协议,可以采用Socket类。
EndPoint类用于表示网络地址,是一个抽象类。
相关参考:
- 《Learaning heard c# 学习笔记》
更新于:2023-05-03
标签:网络通信,协议,c#,IP,编程,TCP,MAC,IP地址,端口号 From: https://www.cnblogs.com/idasheng/p/17369873.html