C# Socket编程(1)基本的术语和概念
计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础。那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因。C#语言从一开始就是为了互联网而设计的,它为实现程序的相互通信提供了许多有用API,这类应用编程接口被称为套接字(Socket)。在开始学习C# Socket之前我们需要先来了解一下基本的术语和概念。
阅读目录:
1.计算机网络
计算机网络由一组通过通信信道(Communication channel)相互连接的机器组成。这些机器被称为:主机(hosts)和路由器(routers):
- 通信信道 —— 是将字节序列从一个主机传输到另一个主机的一种手段(有线、无线(WiFi)等方式)。
- 主机 —— 作用是运行程序的计算机。
- 路由器 —— 作用是将信息从一个通信信道传递或转发到另一个通信信道。
TCP/IP网络通信流程图:
2.分组报文
- 分组报文 —— 在网络环境中由程序创建和解释的字节序列。
3.协议
协议相当于相互通信的一种约定,协议规定了分组报文的交换方式和它们包含意义。
互联网所使用的协议是 TCP/IP 协议,TCP/IP 协议族主要包括:
- IP 协议(Internet Protocol,互联网协议)
- TCP 协议(Transmission Control Protocol,传输控制协议)
- UDP 协议(User Datagram Protocol,用户数据报协议)
IP协议
- IP 协议 —— 是TCP/IP协议中唯一属于网络层的协议。将数据从一台主机传输到另一台主机。
- IP 协议 —— 提供了一种数据服务:每组分组报文都有网络独立处理和分发,类似于信件或包裹通过邮政系统发送一样。
- IP 协议 —— 是一个"尽力而为"(best-effort)的协议:它试图分发每一个分组报文,在网络传输过程中,偶尔也会发生丢失报文是报文顺序打乱,或者重复发送报文的情况。
在IP协议层之上是传输层(transport layer),它提供了两种可选的协议:TCP协议和UDP协议,两种协议都建立在IP层所提供的服务基础上,二者也被称为"端到端传输协议(end-to-end transport protocol)"根据应用程序协议(Application protocol)的不同需求,使用了不同的方式传输数据。二者都有一个共同的功能:寻址。TCP协议和UDP协议使用的地址叫做端口号(port number),是用来区分同一主机不同应用程序的。
TCP 协议
TCP协议能够检测和恢复IP层提供的主机到主机的信道中可能发生的报文丢失、重复以及其他错误。TCP协议是一种面向连接(connection oriented)协议:在使用它进行通信之前,两个应用程序之间首先要建立一个TCP连接,这涉及两台相互通信的主机的TCP部件间完成的握手消息(handshake message)的交换。
UDP 协议
UDP协议并不尝试对IP层产生的错误进行修复,它仅仅简单拓展了IP协议,"尽力而为"的数据服务,使它能够在应用程序之间工作,而不是在主机之间工作。使用UDP协议的应用程序需要对处理报文丢失、顺序混乱等问题做好准备。
4.网络地址
在TCP/IP协议中,有两部分信息用来定位一个指定的程序:互联网地址(Internet address)和端口号(port number,范围1-65535)。前者由IP协议使用,后者由传输协议(TCP/UDP)对其进行解析。
互联网地址有二进制数字组成,有两种形式:IPv4(32位)和IPv6(128位)。为了方便使用,两个版本的IP协议有不同的表示方法:
- IPv4地址被表示为一组为4个十进制数,每两个数之间用圆点隔开,这种表示方法叫做:点分形式(dotted-quad)。
- IPv6地址的16个字节由几组16进制的数字表示,这些十六进制数之间有分号隔开,每组数字分别代表了地址中的两个字节。
回环地址
回环地址(loopback address)是被分配的一个特殊的回环接口(loopback interface),回环接口是一种虚拟设备,它的功能只是简单的把发送给它的报文立即返回给发送者。如IPv4中的:127.0.0.1
5.域名系统(Domain Name System,DNS)和本地配置数据库
DNS是一种分布式数据库,它将向www.baidu.com这样的域名映射到真实的互联网地址和其他信息上。DNS协议允许连接到互联网的主机通过TCP或者UDP协议从DNS数据库获取信息。
本地配置数据库通常是一种与具体操作系统相关的机制,用来实现本地与互联网地址的映射。
6.客户端和服务器
客户端(client)和服务器(server)这两个术语分别代表了两种角色:
- 客户端是通信的发起者,而服务器程序则被动等待客户端发起通信,并对其作出响应。
- 客户端和服务器组成了应用程序。
7.什么是Socket(套接字)
Socket(套接字)是一种抽象层,应用程序通过它来发送和接受数据,就像应用程序打开一个文件句柄,将数据读写到稳定的存储器上一样。
在TCP/IP协议族中的主要Socket类型为:
- 流套接字(stream socket):传输层使用TCP协议,提供了一个可信赖的字节流服务
- 数据报套接字(datagram socket):传输层使用UDP协议,提供了一个"尽力而为"的数据报服务,最长一次可以发送65500个字节的数据。
参考资料:《TCP/IP Socket in Java》
引用地址:http://www.cnblogs.com/IPrograming/archive/2012/10/10/CSharp_Socket_1.html
C# Socket编程(1)基本的术语和概念的更多相关文章
- 【Java】Java Socket编程(1)基本的术语和概念
计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.Java语言从一开始就是为了互联网而设计的,它为实 ...
- 【转】C# Socket编程(1)基本的术语和概念
[转自:http://www.cnblogs.com/IPrograming/archive/2012/10/10/2718371.html#Protocol] 计算机程序能够相互联网,相互通讯,这使 ...
- C# Socket编程(4)初识Socket和数据流
经过前面基础知识作为背景,现在对Socket编程进行进一步的学习.在System.Net.Socket命名空间提供了Socket类,利用该类我们可以直接编写Socket的客户端和服务的的程序.但是直接 ...
- 【转】C# Socket编程(4)初识Socket和数据流
[转自:https://www.cnblogs.com/IPrograming/archive/2012/10/15/CSharp_Socket_4.html] 经过前面基础知识作为背景,现在对Soc ...
- 【JAVA】Socket 编程
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...
- Java Socket编程(转)
Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...
- 转:Java Socket编程
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...
- Java Socket编程详细解说
Java Socket编程 JavaSocketServerSocket乱码超时 Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是So ...
- Java基础:三步学会Java Socket编程
Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛 第一步 ...
随机推荐
- 我的android学习经历17
tomcat的下载安装 1.下载tomcat 在百度中输入tomcat可以直接出现他的英文官网 http://tomcat.apache.org/ 进去以后选择与你的java版本相匹配的tomcat ...
- 【leetcode❤python】 205. Isomorphic Strings
#-*- coding: UTF-8 -*- #转换法class Solution(object): def isIsomorphic(self, s, t): "&qu ...
- UVA 590 二十一 Always on the run
Always on the run Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit ...
- 如何优雅的处理Nodejs中的异步回调
前言 Nodejs最大的亮点就在于事件驱动, 非阻塞I/O 模型,这使得Nodejs具有很强的并发处理能力,非常适合编写网络应用.在Nodejs中大部分的I/O操作几乎都是异步的,也就是我们处理I/O ...
- 1:CSS中一些@规则的用法小结 2: @media用法详解
第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule ...
- git生成SSH key
使用https:// 提交GitHub上的私有项目时,需要每次都输入帐号和密码,比较麻烦. 比如我自己的笔记本,在push的时候我可不想每次都输入这些. 那就使用SSH吧,这个需要在GitHub的帐号 ...
- 深度信任网络的快速学习算法(Hinton的论文)
也没啥原创,就是在学习深度学习的过程中丰富一下我的博客,嘿嘿. 不喜勿喷! Hinton是深度学习方面的大牛,跟着大牛走一般不会错吧-- 来源:A fast learning algorithm fo ...
- 在服务器端如何提取checkbox提交的数据?
HttpServeletRequest 单个字符串,getParameters() 多个字符串,getParametersValues(),返回一个数组,需要提前定义一个数组
- nslookup基础用法
简单介绍 简单介绍如下: 实例:查询163.com域名信息 D:>nslookup Default Server: ns-px.online.sh.cn Address: 202.96.209. ...
- CUBRID学习笔记 44 UPDATE 触发器 更新多表 教程
cubrid的中sql查询语法UPDATE c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com ...