C# Socket网络编程(二)

  • Post author:
  • Post category:其他



目录


Socket相关的内容


什么是Socket


Socket的本质


Socket的作用


Socket的典型应用


Socket介绍


网络传输


OSI七层网络模型


网络模型


IP地址与域名


端口的概念


Socket/TCP五层网络模型图


TCP和UDP区别


Socket相关的内容

什么是Socket

在计算机通信领域,Socket被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过Socket这种约定,一台计算机可以接收到其他计算机的数据,也可以向其他计算机发送数据。

Socket的本质

Socket的本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这个就是Scoket编程接口

Socket的作用

Socket的英文原意是“插座”,的意思,通常在计算机编程中称作套接字,可以用来实现不同虚拟机或不同计算机之间的通信

Socket的典型应用

  1. Socket的应用之一就是Web服务器和浏览器:浏览器获取用户输入的URL地址,向服务器发起请求,服务器分析接收到的URL请求,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,将文字、图片、视频等元素呈现给用户

  2. QQ或者微信或者默默等聊天社交工具等:本地的QQ或微信程序就是客户端,登录过程就是连接服务器的过程,聊天过程就是Socket的发送和接受信息过程

Socket介绍

把Socket比作门,门外是邮局,你送信就需要通过门,把信从门送出去到邮局,然后由邮局帮你送达目标的门,目的地主人再打开门,从门取出邮局送过来的信。

分析一下通信过程(打电话):

两人之间打电话:

  1. 需要做好的保障:两人都要有电话,可正常通话的电话就是Socket

    可正常通话的电话:电话能用,电话要插有电话线(信号器),电话要有卡

  2. 发送消息者通过一端的电话拨号等待

  3. 接收消息者通过另一端的电话接听

  4. 发送消息者和接受消息者之间可以进行通过

  5. 消息沟通完毕之后由任意一端先Say Go Bey!挂断电话断开

  6. 剩余的一端被迫断开连接,至此通信结束

网络传输

OSI七层网络模型

在网络历史的早期,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型。一台计算机操作系统中的网络过程包括从应用请求(在协议栈的顶部)到网络介质(底部) ,OSI参考模型把功能分成七个分立的层次。

特点:

  1. 人们可以很容易的讨论和学习协议的规范细节。

  2. 层间的标准接口方便了工程模块化。

  3. 创建了一个更好的互连环境。

  4. 降低了复杂度,使程序更容易修改,产品开发的速度更快。

  5. 每层利用紧邻的下层服务,更容易记住个层的功能。

网络模型

网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给另外一个设备,然后接受另外一个设备反馈的数据。

现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。

在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。

连接一旦建立以后,客户端和服务器端就可以进行数据传递了,而且两者的身份是等价的。

在一些程序中,程序既有客户端功能也有服务器端功能,最常见的软件就是BT、emule这类软件了。

IP地址与域名

在现实生活中,如果要打电话则需要知道对应人的电话号码,如果要寄信则需要知道收信人的地址。在网络中也是这样,需要知道一个设备的位置,则需要使用该设备的IP地址,具体的连接过程由硬件实现,程序员不需要过多的关心。

IP地址是一个规定,现在使用的是IPv4,既由4个0-255之间的数字组成,在计算机内部存储时只需要4个字节即可。在计算机中,IP地址是分配给网卡的,每个网卡有一个唯一的IP地址,如果一个计算机有多个网卡,则该台计算机则拥有多个不同的IP地址,在同一个网络内部,IP地址不能相同。IP地址的概念类似于电话号码、身份证这样的概念。

由于IP地址不方便记忆,所以有专门创造了域名(Domain Name)的概念,其实就是给IP取一个字符的名字,例如163.com、sina.com等。IP和域名之间存在一定的对应关系。如果把IP地址类比成身份证号的话,那么域名就是你的姓名。

其实在网络中只能使用IP地址进行数据传输,所以在传输以前,需要把域名转换为IP,这个由称作DNS的服务器专门来完成。

所以在网络编程中,可以使用IP或域名来标识网络上的一台设备。

端口的概念

为了在一台设备上可以运行多个程序,人为的设计了端口(Port)的概念,类似的例子是公司内部的分机号码。

规定一个设备有216个,也就是65536个端口,每个端口对应一个唯一的程序。每个网络程序,无论是客户端还是服务器端,都对应一个或多个特定的端口号。由于0-1024之间多被操作系统占用,所以实际编程时一般采用1024以后的端口号。

使用端口号,可以找到一台设备上唯一的一个程序。所以如果需要和某台计算机建立连接的话,只需要知道IP地址或域名即可,但是如果想和该台计算机上的某个程序交换数据的话,还必须知道该程序使用的端口号。

Socket/TCP五层网络模型图

TCP和UDP区别

UDP:

  1. 面向无连接,将数据及源封装在数据包中,不需要建立连接

  2. 每个数据报的大小限制在64K内

  3. 因无连接,是不可靠协议

  4. 不需要连接连接,速度快

TCP:

  1. 建立连接,形成传输数据的通道

  2. 在连接中进行大数据量传输,以字节流的形式

  3. 通过三次握手(四次挥手)完成连接,是可靠协议

  4. 必须建立连接,效率会稍低

TCP和UDP协议不互通哟!!!!!



版权声明:本文为Cocksuck原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。